Skip to content

Commit 4075f13

Browse files
committed
Add tests
1 parent 250c336 commit 4075f13

File tree

2 files changed

+90
-4
lines changed

2 files changed

+90
-4
lines changed

sdk/core/build.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
use rustc_version::version;
22

33
fn main() {
4-
println!("cargo:rustc-env=AZSDK_RUSTC_VERSION={}", version().unwrap());
4+
let version = match version() {
5+
Ok(version) => version.to_string(),
6+
Err(_) => "unknown".to_string(),
7+
};
8+
println!("cargo:rustc-env=AZSDK_RUSTC_VERSION={}", version);
59
}

sdk/core/src/policies/telemetry_policy.rs

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,15 @@ pub struct TelemetryPolicy {
2323

2424
impl TelemetryPolicy {
2525
pub fn new(options: TelemetryOptions) -> Self {
26-
let crate_name = env!("CARGO_PKG_NAME");
27-
let crate_version = env!("CARGO_PKG_VERSION");
28-
let platform_info = format!("({}; {}; {})", env!("AZSDK_RUSTC_VERSION"), OS, ARCH,);
26+
Self::with_environment::<Env>(options)
27+
}
28+
29+
fn with_environment<T: Environment>(options: TelemetryOptions) -> Self {
30+
const UNKNOWN: &'static str = "unknown";
31+
let crate_name = T::crate_name().unwrap_or(UNKNOWN);
32+
let crate_version = T::crate_version().unwrap_or(UNKNOWN);
33+
let rustc_version = T::rustc_version().unwrap_or(UNKNOWN);
34+
let platform_info = format!("({}; {}; {})", rustc_version, OS, ARCH,);
2935
let header = match options.application_id {
3036
Some(application_id) => format!(
3137
"{} azsdk-rust-{}/{} {}",
@@ -47,6 +53,23 @@ impl Default for TelemetryPolicy {
4753
}
4854
}
4955

56+
trait Environment {
57+
fn crate_name() -> Option<&'static str> {
58+
option_env!("CARGO_PKG_NAME")
59+
}
60+
61+
fn crate_version() -> Option<&'static str> {
62+
option_env!("CARGO_PKG_VERSION")
63+
}
64+
65+
fn rustc_version() -> Option<&'static str> {
66+
option_env!("AZSDK_RUSTC_VERSION")
67+
}
68+
}
69+
70+
struct Env;
71+
impl Environment for Env {}
72+
5073
#[async_trait::async_trait]
5174
impl Policy for TelemetryPolicy {
5275
async fn send(
@@ -62,3 +85,62 @@ impl Policy for TelemetryPolicy {
6285
next[0].send(ctx, request, &next[1..]).await
6386
}
6487
}
88+
89+
#[cfg(test)]
90+
mod test {
91+
use super::*;
92+
93+
// tests assume cargo + rustc
94+
const CRATE_NAME: &'static str = env!("CARGO_PKG_NAME");
95+
const CRATE_VERSION: &'static str = env!("CARGO_PKG_VERSION");
96+
const RUSTC_VERSION: &'static str = env!("AZSDK_RUSTC_VERSION");
97+
98+
struct EmptyEnv;
99+
impl Environment for EmptyEnv {
100+
fn crate_name() -> Option<&'static str> {
101+
None
102+
}
103+
104+
fn crate_version() -> Option<&'static str> {
105+
None
106+
}
107+
108+
fn rustc_version() -> Option<&'static str> {
109+
None
110+
}
111+
}
112+
113+
#[test]
114+
fn test_default() {
115+
let policy = TelemetryPolicy::default();
116+
assert_eq!(
117+
policy.header,
118+
format!(
119+
"azsdk-rust-{}/{} ({}; {}; {})",
120+
CRATE_NAME, CRATE_VERSION, RUSTC_VERSION, OS, ARCH
121+
)
122+
);
123+
}
124+
125+
#[test]
126+
fn test_with_application_id() {
127+
let options = TelemetryOptions::new(Some("test".to_string()));
128+
let policy = TelemetryPolicy::new(options);
129+
assert_eq!(
130+
policy.header,
131+
format!(
132+
"test azsdk-rust-{}/{} ({}; {}; {})",
133+
CRATE_NAME, CRATE_VERSION, RUSTC_VERSION, OS, ARCH
134+
)
135+
);
136+
}
137+
138+
#[test]
139+
fn test_missing_env() {
140+
let policy = TelemetryPolicy::with_environment::<EmptyEnv>(TelemetryOptions::default());
141+
assert_eq!(
142+
policy.header,
143+
format!("azsdk-rust-unknown/unknown (unknown; {}; {})", OS, ARCH)
144+
)
145+
}
146+
}

0 commit comments

Comments
 (0)