Skip to content

Commit 095377c

Browse files
committed
test(telemetry): integration coverage for is_telemetry_disabled + sanitize_error_message
Six tests in telemetry_helpers_e2e.rs: - 4 env-var combos for is_telemetry_disabled (=1, =true, VITEST=true, legacy var) - sanitize_error_message with + without home dir in input Also added serial_test as a dev-dep of socket-patch-core to serialize the env-var mutating tests. Assisted-by: Claude Code:claude-opus-4-7
1 parent fa3421a commit 095377c

3 files changed

Lines changed: 107 additions & 0 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/socket-patch-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ nuget = []
3636
[dev-dependencies]
3737
tempfile = { workspace = true }
3838
tokio = { workspace = true, features = ["full", "test-util"] }
39+
serial_test = { workspace = true }
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
//! Integration coverage for `utils::telemetry`'s pub helpers
2+
//! (`is_telemetry_disabled`, `sanitize_error_message`). These are
3+
//! exposed for tests + future external callers; the apply/scan
4+
//! suites never invoke them directly, so the env-var-branch logic
5+
//! and the home-dir redaction were uncovered.
6+
7+
use serial_test::serial;
8+
use socket_patch_core::utils::telemetry::{is_telemetry_disabled, sanitize_error_message};
9+
10+
#[test]
11+
#[serial]
12+
fn telemetry_disabled_when_socket_telemetry_disabled_eq_1() {
13+
let prev = std::env::var("SOCKET_TELEMETRY_DISABLED").ok();
14+
let prev_vitest = std::env::var("VITEST").ok();
15+
std::env::remove_var("VITEST");
16+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", "1");
17+
assert!(is_telemetry_disabled(), "1 must disable telemetry");
18+
std::env::remove_var("SOCKET_TELEMETRY_DISABLED");
19+
if let Some(v) = prev {
20+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", v);
21+
}
22+
if let Some(v) = prev_vitest {
23+
std::env::set_var("VITEST", v);
24+
}
25+
}
26+
27+
#[test]
28+
#[serial]
29+
fn telemetry_disabled_when_socket_telemetry_disabled_eq_true() {
30+
let prev = std::env::var("SOCKET_TELEMETRY_DISABLED").ok();
31+
let prev_vitest = std::env::var("VITEST").ok();
32+
std::env::remove_var("VITEST");
33+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", "true");
34+
assert!(is_telemetry_disabled(), "'true' must disable telemetry");
35+
std::env::remove_var("SOCKET_TELEMETRY_DISABLED");
36+
if let Some(v) = prev {
37+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", v);
38+
}
39+
if let Some(v) = prev_vitest {
40+
std::env::set_var("VITEST", v);
41+
}
42+
}
43+
44+
#[test]
45+
#[serial]
46+
fn telemetry_disabled_when_vitest_env_is_true() {
47+
let prev = std::env::var("SOCKET_TELEMETRY_DISABLED").ok();
48+
let prev_vitest = std::env::var("VITEST").ok();
49+
std::env::remove_var("SOCKET_TELEMETRY_DISABLED");
50+
std::env::set_var("VITEST", "true");
51+
assert!(is_telemetry_disabled(), "VITEST=true must disable telemetry");
52+
std::env::remove_var("VITEST");
53+
if let Some(v) = prev {
54+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", v);
55+
}
56+
if let Some(v) = prev_vitest {
57+
std::env::set_var("VITEST", v);
58+
}
59+
}
60+
61+
#[test]
62+
#[serial]
63+
fn telemetry_disabled_legacy_socket_patch_var_honored() {
64+
let prev = std::env::var("SOCKET_TELEMETRY_DISABLED").ok();
65+
let prev_legacy = std::env::var("SOCKET_PATCH_TELEMETRY_DISABLED").ok();
66+
let prev_vitest = std::env::var("VITEST").ok();
67+
std::env::remove_var("SOCKET_TELEMETRY_DISABLED");
68+
std::env::remove_var("VITEST");
69+
std::env::set_var("SOCKET_PATCH_TELEMETRY_DISABLED", "1");
70+
assert!(is_telemetry_disabled(), "legacy var must still work");
71+
std::env::remove_var("SOCKET_PATCH_TELEMETRY_DISABLED");
72+
if let Some(v) = prev {
73+
std::env::set_var("SOCKET_TELEMETRY_DISABLED", v);
74+
}
75+
if let Some(v) = prev_legacy {
76+
std::env::set_var("SOCKET_PATCH_TELEMETRY_DISABLED", v);
77+
}
78+
if let Some(v) = prev_vitest {
79+
std::env::set_var("VITEST", v);
80+
}
81+
}
82+
83+
#[test]
84+
fn sanitize_error_message_without_home_returns_unchanged() {
85+
// No home substring means no replacement happens.
86+
let msg = "some error message with no home directory in it";
87+
let out = sanitize_error_message(msg);
88+
assert_eq!(out, msg);
89+
}
90+
91+
#[test]
92+
fn sanitize_error_message_replaces_home_with_tilde() {
93+
let home = std::env::var("HOME").or_else(|_| std::env::var("USERPROFILE"));
94+
if let Ok(home) = home {
95+
if !home.is_empty() {
96+
let msg = format!("error at {}/.cache/socket/blob.tar.gz", home);
97+
let out = sanitize_error_message(&msg);
98+
assert!(
99+
!out.contains(&home),
100+
"sanitize must remove home dir; got {out}"
101+
);
102+
assert!(out.contains("~/"), "sanitize must use ~/ prefix; got {out}");
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)