fix(generic-snmp): unit tests are back

This commit is contained in:
David Boucher 2025-04-21 15:47:06 +02:00
parent fdf86d33ca
commit 2f3eed6050
2 changed files with 82 additions and 13 deletions

View File

@ -56,13 +56,20 @@ impl<'a> Parser<'a> {
mod Test { mod Test {
use super::*; use super::*;
use snmp::SnmpItem;
use std::collections::HashMap;
#[test] #[test]
fn term() { fn term() {
let lexer = lexer::Lexer::new("123"); let lexer = lexer::Lexer::new("123");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 123_f32); let snmp_result = vec![];
let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 123_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("123"); let lexer = lexer::Lexer::new("123");
assert!(grammar::ExprParser::new().parse(lexer).is_ok()); assert!(grammar::ExprParser::new().parse(lexer).is_ok());
let lexer = lexer::Lexer::new("(((123))"); let lexer = lexer::Lexer::new("(((123))");
@ -75,27 +82,48 @@ mod Test {
let lexer = lexer::Lexer::new("1 + 2"); let lexer = lexer::Lexer::new("1 + 2");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 3_f32); let snmp_result = vec![];
let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 3_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("1 + 2 - 3"); let lexer = lexer::Lexer::new("1 + 2 - 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 0_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 0_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("1 - 2 + 3"); let lexer = lexer::Lexer::new("1 - 2 + 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 2_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 2_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("1 - (2 + 3)"); let lexer = lexer::Lexer::new("1 - (2 + 3)");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == -4_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == -4_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("1 - (2 + (3 - (4 + (5 - (6 + 7)))))"); let lexer = lexer::Lexer::new("1 - (2 + (3 - (4 + (5 - (6 + 7)))))");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!((res.unwrap()).eval() == -8_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == -8_f64),
_ => panic!("Expected a scalar value"),
}
} }
#[test] #[test]
@ -103,27 +131,48 @@ mod Test {
let lexer = lexer::Lexer::new("2 * 3"); let lexer = lexer::Lexer::new("2 * 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 6_f32); let snmp_result = vec![];
let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 6_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("1 + 2 * 3"); let lexer = lexer::Lexer::new("1 + 2 * 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 7_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 7_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("(1 + 2) * 3"); let lexer = lexer::Lexer::new("(1 + 2) * 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 9_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 9_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("2 * 3 * 4"); let lexer = lexer::Lexer::new("2 * 3 * 4");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 24_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 24_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("2 * 3 / 2"); let lexer = lexer::Lexer::new("2 * 3 / 2");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 3_f32); let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 3_f64),
_ => panic!("Expected a scalar value"),
}
// We have an issue with 2/0, I know it but we'll fix it later. // We have an issue with 2/0, I know it but we'll fix it later.
} }
@ -133,7 +182,12 @@ mod Test {
let lexer = lexer::Lexer::new("1 + (3 + 2 * 3) / 3"); let lexer = lexer::Lexer::new("1 + (3 + 2 * 3) / 3");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
assert!(res.unwrap().eval() == 4_f32); let snmp_result = vec![];
let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 4_f64),
_ => panic!("Expected a scalar value"),
}
} }
#[test] #[test]
@ -142,7 +196,13 @@ mod Test {
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);
assert!(res.is_ok()); assert!(res.is_ok());
println!("{:?}", res); println!("{:?}", res);
assert!(res.unwrap().eval() == 1_f32); let items = HashMap::from([("abc".to_string(), SnmpItem::Nbr(vec![1_f64]))]);
let snmp_result = vec![SnmpResult::new(items)];
let res = res.unwrap().eval(&snmp_result);
match res {
ExprResult::Scalar(n) => assert!(n == 2_f64),
_ => panic!("Expected a scalar value"),
}
let lexer = lexer::Lexer::new("abc + 1"); let lexer = lexer::Lexer::new("abc + 1");
let res = grammar::ExprParser::new().parse(lexer); let res = grammar::ExprParser::new().parse(lexer);

View File

@ -34,6 +34,15 @@ pub struct SnmpResult {
last_oid: Vec<u32>, last_oid: Vec<u32>,
} }
impl SnmpResult {
pub fn new(items: HashMap<String, SnmpItem>) -> SnmpResult {
SnmpResult {
items,
last_oid: Vec::new(),
}
}
}
//pub fn snmp_get(target: &str, oid: &str, community: &str) -> SnmpResult { //pub fn snmp_get(target: &str, oid: &str, community: &str) -> SnmpResult {
// let oid_tab = oid // let oid_tab = oid
// .split('.') // .split('.')