in below/dump/src/test.rs [535:598]
fn test_dump_iface_content() {
let logger = get_logger();
let mut collector = Collector::new(logger.clone(), Default::default());
collector
.collect_and_update_model()
.expect("Fail to get model");
let mut opts: GeneralOpt = Default::default();
let fields = command::expand_fields(command::DEFAULT_IFACE_FIELDS, true);
opts.output_format = Some(OutputFormat::Json);
let iface_dumper = iface::Iface::new(&opts, None, fields.clone());
// update model again to populate net data
let model = collector
.collect_and_update_model()
.expect("Fail to get model");
let mut iface_content: Vec<u8> = Vec::new();
let mut round = 0;
let ctx = CommonFieldContext { timestamp: 0 };
iface_dumper
.dump_model(&ctx, &model, &mut iface_content, &mut round, false)
.expect("Failed to dump iface model");
// verify json correctness
assert!(!iface_content.is_empty());
let jval: Value =
serde_json::from_slice(&iface_content).expect("Fail parse json of network dump");
// verify content correctness, test first 5 should be enough
let mut count = 5;
for value in jval.as_array().unwrap() {
let iface = value["Interface"].as_str().unwrap();
let snm = model
.network
.interfaces
.get(iface)
.expect("Json iface and snm iface not match");
for dump_field in fields.iter() {
match dump_field {
DumpField::Common(_) => continue,
DumpField::FieldId(field_id) => {
let rc = model::SingleNetModel::get_render_config_for_dump(&field_id);
assert_eq!(
rc.render(snm.query(&field_id), false),
value[rc.render_title(false)]
.as_str()
.unwrap_or_else(|| panic!(
"Key not found in Json: {}",
rc.render_title(false)
))
.to_owned(),
"Model value and json value do not match for field: {}",
field_id.to_string(),
);
}
}
}
count -= 1;
if count == 0 {
break;
}
}
}