v0.26.0
This commit is contained in:
1 parent
d168ee2afa
commit
ddc5c6593f
70 files changed
+2293
-594
No files matched your search
@@ -3,6 +3,11 @@ mod tests {
|
||||
|
||||
fn entry() -> LogEntry {
|
||||
LogEntry {
|
||||
event: "request",
|
||||
protocol_error: None,
|
||||
error_detail: None,
|
||||
local_addr: Some("192.0.2.1:443".into()),
|
||||
tls_sni: Some("app.example".into()),
|
||||
vhost: Some("app".into()),
|
||||
route: Some("root".into()),
|
||||
cache_effective_enabled: Some(true),
|
||||
@@ -108,11 +113,63 @@ mod tests {
|
||||
#[test]
|
||||
fn default_json_format_keeps_standard_entry() {
|
||||
let value = format_entry(&entry(), &JsonFormat::default());
|
||||
assert_eq!(value["event"], "request");
|
||||
assert_eq!(value["method"], "GET");
|
||||
assert_eq!(value["cache"], "HIT");
|
||||
assert_eq!(value["response_bytes"], 42);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn protocol_error_keeps_required_diagnostic_fields_with_custom_mapping() {
|
||||
let mut item = entry();
|
||||
item.event = "protocol_error";
|
||||
item.protocol_error = Some("tls_handshake_error");
|
||||
item.error_detail = Some("invalid handshake".into());
|
||||
item.outcome = "protocol_error";
|
||||
item.status = 0;
|
||||
item.transport = "tls";
|
||||
let mut format = JsonFormat::default();
|
||||
format.fields.insert("site".into(), "vhost".into());
|
||||
format.static_fields.insert("event".into(), "custom".into());
|
||||
let value = format_entry(&item, &format);
|
||||
assert_eq!(value["site"], "app");
|
||||
assert_eq!(value["event"], "protocol_error");
|
||||
assert_eq!(value["protocol_error"], "tls_handshake_error");
|
||||
assert_eq!(value["error_detail"], "invalid handshake");
|
||||
assert_eq!(value["client_ip"], "192.0.2.10");
|
||||
assert_eq!(value["transport"], "tls");
|
||||
assert_eq!(value["outcome"], "protocol_error");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn protocol_errors_skip_live_history_and_use_persistent_sink_only() {
|
||||
let logs = Logs::default();
|
||||
let mut settings = Settings::default();
|
||||
settings.file.enabled = true;
|
||||
logs.configure(settings);
|
||||
logs.push_protocol_error(
|
||||
"tls_handshake_error",
|
||||
"invalid token=topsecret",
|
||||
"192.0.2.10:50000".parse().unwrap(),
|
||||
"192.0.2.20:443".parse().unwrap(),
|
||||
"tls",
|
||||
"",
|
||||
0,
|
||||
Some("app.example".into()),
|
||||
);
|
||||
assert!(logs.recent().is_empty());
|
||||
assert_eq!(logs.sink_dropped.load(Ordering::Relaxed), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn protocol_error_detail_is_utf8_safe_bounded_and_redacted() {
|
||||
let detail = protocol_error_detail(format!("token=topsecret {}", "€".repeat(300)));
|
||||
assert!(!detail.contains("topsecret"));
|
||||
assert!(detail.is_char_boundary(detail.len()));
|
||||
assert!(detail.len() <= 515);
|
||||
assert!(detail.ends_with("..."));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_log_defaults_off_and_redacts_common_secret_shapes() {
|
||||
let settings = ErrorLogSettings::default();
|
||||
|
||||
Reference in new issue
Block a user