in below/dump/src/test.rs [302:394]
fn test_dump_proc_select() {
let logger = get_logger();
let mut collector = Collector::new(logger.clone(), Default::default());
collector
.collect_and_update_model()
.expect("Fail to get model");
// update model again to populate cpu and io data
let model = collector
.collect_and_update_model()
.expect("Fail to get model");
let fields = command::expand_fields(command::DEFAULT_PROCESS_FIELDS, true);
let mut opts: GeneralOpt = Default::default();
opts.everything = true;
opts.output_format = Some(OutputFormat::Json);
opts.filter = Some(
regex::Regex::new(&model.process.processes.iter().last().unwrap().0.to_string())
.expect("Fail to construct regex"),
);
let process_dumper = process::Process::new(
&opts,
Some(model::SingleProcessModelFieldId::Pid),
fields.clone(),
);
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");
// test select filter
let jval: Value =
serde_json::from_slice(&process_content).expect("Fail parse json of process dump");
assert_eq!(jval.as_array().unwrap().len(), 1);
// test select rsort top
opts.sort = true;
opts.top = 5;
opts.filter = None;
let process_dumper = process::Process::new(
&opts,
Some(model::SingleProcessModelFieldId::Pid),
fields.clone(),
);
process_content = Vec::new();
round = 0;
process_dumper
.dump_model(&ctx, &model, &mut process_content, &mut round, false)
.expect("Failed to dump process model");
assert_eq!(round, 5);
let jval: Value =
serde_json::from_slice(&process_content).expect("Fail parse json of process dump");
let mut prev_id = 0;
for item in jval.as_array().unwrap() {
let pid = item["Pid"].as_str().unwrap();
let cur_id = pid.parse::<i32>().unwrap();
if prev_id > 0 {
assert!(prev_id < cur_id, "prev_id: {}, cur_id: {}", prev_id, cur_id);
}
prev_id = cur_id;
}
// test select sort top
opts.sort = false;
opts.rsort = true;
let process_dumper =
process::Process::new(&opts, Some(model::SingleProcessModelFieldId::Pid), fields);
process_content = Vec::new();
round = 0;
process_dumper
.dump_model(&ctx, &model, &mut process_content, &mut round, false)
.expect("Failed to dump process model");
assert_eq!(round, 5);
let jval: Value =
serde_json::from_slice(&process_content).expect("Fail parse json of process dump");
prev_id = 0;
for item in jval.as_array().unwrap() {
let pid = item["Pid"].as_str().unwrap();
let cur_id = pid.parse::<i32>().unwrap();
if prev_id > 0 {
assert!(prev_id > cur_id, "prev_id: {}, cur_id: {}", prev_id, cur_id);
}
prev_id = cur_id;
}
}