in below/dump/src/test.rs [865:927]
fn test_dump_disk_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_DISK_FIELDS, true);
opts.output_format = Some(OutputFormat::Json);
let disk_dumper = disk::Disk::new(&opts, None, fields.clone());
// update model again to populate disk data
let model = collector
.collect_and_update_model()
.expect("Fail to get model");
let mut disk_content: Vec<u8> = Vec::new();
let mut round = 0;
let ctx = CommonFieldContext { timestamp: 0 };
disk_dumper
.dump_model(&ctx, &model, &mut disk_content, &mut round, false)
.expect("Failed to dump disk model");
// verify json correctness
assert!(!disk_content.is_empty());
let jval: Value = serde_json::from_slice(&disk_content).expect("Fail parse json of disk dump");
// verify content correctness, test first 5 should be enough
let mut count = 5;
for value in jval.as_array().unwrap() {
let name = value["Name"].as_str().unwrap();
let sdm = model
.system
.disks
.get(name)
.expect("Json pid and sdm pid not match");
for dump_field in fields.iter() {
match dump_field {
DumpField::Common(_) => continue,
DumpField::FieldId(field_id) => {
let rc = model::SingleDiskModel::get_render_config_for_dump(&field_id);
assert_eq!(
rc.render(sdm.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;
}
}
}