#[macro_use]
extern crate pretty_assertions;
extern crate nom;
extern crate snmp_parser;
use snmp_parser::*;
static SNMPV3_REQ: &[u8] = include_bytes!("../assets/snmpv3_req.bin");
#[test]
fn test_snmp_v3_req() {
let bytes = SNMPV3_REQ;
let sp = SecurityParameters::USM(UsmSecurityParameters {
msg_authoritative_engine_id: b"",
msg_authoritative_engine_boots: 0,
msg_authoritative_engine_time: 0,
msg_user_name: String::from(""),
msg_authentication_parameters: b"",
msg_privacy_parameters: b"",
});
let cei = [
0x80, 0x00, 0x1f, 0x88, 0x80, 0x59, 0xdc, 0x48, 0x61, 0x45, 0xa2, 0x63, 0x22,
];
let data = SnmpPdu::Generic(SnmpGenericPdu {
pdu_type: PduType::GetRequest,
req_id: 2098071598,
err: ErrorStatus::NoError,
err_index: 0,
var: vec![],
});
let expected = SnmpV3Message {
version: 3,
header_data: HeaderData {
msg_id: 821490644,
msg_max_size: 65507,
msg_flags: 4,
msg_security_model: SecurityModel::USM,
},
security_params: sp,
data: ScopedPduData::Plaintext(ScopedPdu {
ctx_engine_id: &cei,
ctx_engine_name: b"",
data,
}),
};
let (rem, res) = parse_snmp_v3(bytes).expect("parsing failed");
assert!(rem.is_empty());
assert_eq!(res, expected);
}
#[test]
fn test_snmp_v3_req_encrypted() {
let bytes = include_bytes!("../assets/snmpv3_req_encrypted.bin");
let (rem, msg) = parse_snmp_v3(bytes).expect("parsing failed");
assert!(rem.is_empty());
assert_eq!(msg.version, 3);
assert_eq!(msg.header_data.msg_security_model, SecurityModel::USM);
}
#[test]
fn test_snmp_v3_report() {
let bytes = include_bytes!("../assets/snmpv3-report.bin");
let (rem, msg) = parse_snmp_v3(bytes).expect("parsing failed");
assert!(rem.is_empty());
assert_eq!(msg.version, 3);
assert_eq!(msg.header_data.msg_security_model, SecurityModel::USM);
}
#[test]
fn test_snmp_v3_generic() {
let bytes = SNMPV3_REQ;
let res = parse_snmp_generic_message(bytes);
let (rem, m) = res.expect("parse_snmp_generic_message");
assert!(rem.is_empty());
if let SnmpGenericMessage::V3(msg) = m {
assert_eq!(msg.version, 3);
assert_eq!(msg.header_data.msg_security_model, SecurityModel::USM);
} else {
panic!("unexpected PDU type");
}
}