1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use crate::environment::app_name::EnvironmentVariableAppNameProvider;
use crate::profile::app_name;
use crate::provider_config::ProviderConfig;
use aws_types::app_name::AppName;
pub fn default_provider() -> Builder {
Builder::default()
}
#[derive(Debug, Default)]
pub struct Builder {
env_provider: EnvironmentVariableAppNameProvider,
profile_file: app_name::Builder,
}
impl Builder {
#[doc(hidden)]
pub fn configure(mut self, configuration: &ProviderConfig) -> Self {
self.env_provider = EnvironmentVariableAppNameProvider::new_with_env(configuration.env());
self.profile_file = self.profile_file.configure(configuration);
self
}
pub fn profile_name(mut self, name: &str) -> Self {
self.profile_file = self.profile_file.profile_name(name);
self
}
pub async fn app_name(self) -> Option<AppName> {
self.env_provider
.app_name()
.or(self.profile_file.build().app_name().await)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::profile::profile_file::{ProfileFileKind, ProfileFiles};
use crate::provider_config::ProviderConfig;
use crate::test_case::{no_traffic_connector, InstantSleep};
use aws_types::os_shim_internal::{Env, Fs};
#[tokio::test]
async fn prefer_env_to_profile() {
let fs = Fs::from_slice(&[("test_config", "[default]\nsdk-ua-app-id = wrong")]);
let env = Env::from_slice(&[
("AWS_CONFIG_FILE", "test_config"),
("AWS_SDK_UA_APP_ID", "correct"),
]);
let app_name = Builder::default()
.configure(
&ProviderConfig::no_configuration()
.with_fs(fs)
.with_env(env)
.with_http_connector(no_traffic_connector()),
)
.app_name()
.await;
assert_eq!(Some(AppName::new("correct").unwrap()), app_name);
}
#[tokio::test]
async fn profile_name_override() {
let fs = Fs::from_slice(&[("test_config", "[profile custom]\nsdk-ua-app-id = correct")]);
let conf = crate::from_env()
.configure(
ProviderConfig::empty()
.with_fs(fs)
.with_sleep(InstantSleep)
.with_http_connector(no_traffic_connector()),
)
.profile_name("custom")
.profile_files(
ProfileFiles::builder()
.with_file(ProfileFileKind::Config, "test_config")
.build(),
)
.load()
.await;
assert_eq!(conf.app_name(), Some(&AppName::new("correct").unwrap()));
}
#[tokio::test]
async fn load_from_profile() {
let fs = Fs::from_slice(&[("test_config", "[default]\nsdk-ua-app-id = correct")]);
let env = Env::from_slice(&[("AWS_CONFIG_FILE", "test_config")]);
let app_name = Builder::default()
.configure(
&ProviderConfig::empty()
.with_fs(fs)
.with_env(env)
.with_http_connector(no_traffic_connector()),
)
.app_name()
.await;
assert_eq!(Some(AppName::new("correct").unwrap()), app_name);
}
}