in below/dump/src/test.rs [192:255]
fn test_dump_process_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_PROCESS_FIELDS, true);
opts.output_format = Some(OutputFormat::Json);
let process_dumper = process::Process::new(&opts, None, fields.clone());
// update model again to populate cpu and io data
let model = collector
.collect_and_update_model()
.expect("Fail to get model");
let mut process_content: Vec<u8> = Vec::new();
let mut round = 0;
let ctx = CommonFieldContext { timestamp: 0 };
process_dumper
.dump_model(&ctx, &model, &mut process_content, &mut round, false)
.expect("Failed to dump process model");
// verify json correctness
assert!(!process_content.is_empty());
let jval: Value =
serde_json::from_slice(&process_content).expect("Fail parse json of process dump");
// verify content correctness, test first 5 should be enough
let mut count = 5;
for value in jval.as_array().unwrap() {
let pid = value["Pid"].as_str().unwrap();
let spm = model
.process
.processes
.get(&pid.parse().unwrap())
.expect("Json pid and spm pid not match");
for dump_field in fields.iter() {
match dump_field {
DumpField::Common(_) => continue,
DumpField::FieldId(field_id) => {
let rc = model::SingleProcessModel::get_render_config_for_dump(&field_id);
assert_eq!(
rc.render(spm.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;
}
}
}