code wiki / (root) / nx_session_summary_test.nx

nx_session_summary_test.nx source

↩ module page · 67 lines · 2680 B

1// nx_session_summary_test.nx -- smoke for nx_session_summary. 2 3import "nx_syscalls.nx" 4import "nx_session_summary.nx" 5 6func main() -> i64 { 7 if NX_SV_N_VERDICTS != 4 { return 1 } 8 if nx_sv_is_valid(NX_SV_VALID) != 1 { return 2 } 9 if nx_sv_is_valid(4) != 0 { return 3 } 10 11 // Build a session at t=1000 12 let s: *NxSessionSummary = nx_session_summary_new(1000) 13 if s.started_us != 1000 { return 4 } 14 if s.verdict != NX_SV_NON_SESSION { return 5 } 15 16 // Pre-finalize, hunt + gather both zero -> verdict stays NON_SESSION 17 nx_session_summary_finalize(s, 2000, 0) 18 if s.verdict != NX_SV_NON_SESSION { return 6 } 19 20 // Now set hunt only (no gather): NON_SESSION 21 let s2: *NxSessionSummary = nx_session_summary_new(1000) 22 nx_session_summary_set_hunt(s2, 3, 0) 23 nx_session_summary_set_imbalance(s2, 512) 24 nx_session_summary_finalize(s2, 2000, 0) 25 if s2.verdict != NX_SV_NON_SESSION { return 7 } 26 27 // Both set, balanced, no alert -> VALID 28 let s3: *NxSessionSummary = nx_session_summary_new(1000) 29 nx_session_summary_set_hunt(s3, 3, 0) 30 nx_session_summary_set_gather(s3, 5, 1000) 31 nx_session_summary_set_imbalance(s3, 512) 32 nx_session_summary_finalize(s3, 5000, 0) 33 if s3.verdict != NX_SV_VALID { return 8 } 34 if nx_session_summary_is_valid(s3) != 1 { return 9 } 35 if nx_session_summary_duration_us(s3) != 4000 { return 10 } 36 37 // Imbalanced (mostly hunt, ratio > 853) -> IMBALANCED 38 let s4: *NxSessionSummary = nx_session_summary_new(1000) 39 nx_session_summary_set_hunt(s4, 10, 0) 40 nx_session_summary_set_gather(s4, 1, 0) 41 nx_session_summary_set_imbalance(s4, 930) 42 nx_session_summary_finalize(s4, 2000, 0) 43 if s4.verdict != NX_SV_IMBALANCED { return 11 } 44 45 // Imbalanced (mostly gather, ratio < 171) 46 let s5: *NxSessionSummary = nx_session_summary_new(1000) 47 nx_session_summary_set_hunt(s5, 1, 0) 48 nx_session_summary_set_gather(s5, 20, 5000) 49 nx_session_summary_set_imbalance(s5, 100) 50 nx_session_summary_finalize(s5, 2000, 0) 51 if s5.verdict != NX_SV_IMBALANCED { return 12 } 52 53 // Compromised takes precedence even when balanced 54 let s6: *NxSessionSummary = nx_session_summary_new(1000) 55 nx_session_summary_set_hunt(s6, 3, 0) 56 nx_session_summary_set_gather(s6, 5, 1000) 57 nx_session_summary_set_imbalance(s6, 512) 58 nx_session_summary_set_book(s6, 8, 2) 59 nx_session_summary_finalize(s6, 2000, 1) // any_compromised_alert=1 60 if s6.verdict != NX_SV_COMPROMISED { return 13 } 61 62 // Verdict getter 63 if nx_session_summary_verdict(s3) != NX_SV_VALID { return 14 } 64 if nx_session_summary_verdict(s6) != NX_SV_COMPROMISED { return 15 } 65 66 return 0 67}