summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-03-17 14:09:57 +0530
committerGitHub <noreply@github.com>2023-03-17 10:39:57 +0200
commitc27e8da2c941098c41732faba84b57ba425346ce (patch)
treec06d804b40ad0e8d2d8e63a051f0704085c30873
parent0eabd2c6d67b5581f461b8bc8fbfaba0a1efca7a (diff)
fix(test_util): parse strace usecs/call in total line if present (#18241)
Fixes https://github.com/denoland/deno/issues/18235
-rw-r--r--test_util/src/lib.rs31
-rw-r--r--test_util/src/testdata/strace_summary3.out48
2 files changed, 76 insertions, 3 deletions
diff --git a/test_util/src/lib.rs b/test_util/src/lib.rs
index 7b88b0a69..33b5ae8bc 100644
--- a/test_util/src/lib.rs
+++ b/test_util/src/lib.rs
@@ -2273,14 +2273,21 @@ pub fn parse_strace_output(output: &str) -> HashMap<String, StraceOutput> {
}
let total_fields = total_line.split_whitespace().collect::<Vec<_>>();
+
+ let mut usecs_call_offset = 0;
summary.insert(
"total".to_string(),
StraceOutput {
percent_time: str::parse::<f64>(total_fields[0]).unwrap(),
seconds: str::parse::<f64>(total_fields[1]).unwrap(),
- usecs_per_call: None,
- calls: str::parse::<u64>(total_fields[2]).unwrap(),
- errors: str::parse::<u64>(total_fields[3]).unwrap(),
+ usecs_per_call: if total_fields.len() > 5 {
+ usecs_call_offset = 1;
+ Some(str::parse::<u64>(total_fields[2]).unwrap())
+ } else {
+ None
+ },
+ calls: str::parse::<u64>(total_fields[2 + usecs_call_offset]).unwrap(),
+ errors: str::parse::<u64>(total_fields[3 + usecs_call_offset]).unwrap(),
},
);
@@ -2384,6 +2391,7 @@ mod tests {
// summary line
assert_eq!(strace.get("total").unwrap().calls, 704);
assert_eq!(strace.get("total").unwrap().errors, 5);
+ assert_eq!(strace.get("total").unwrap().usecs_per_call, None);
}
#[test]
@@ -2399,6 +2407,23 @@ mod tests {
// summary line
assert_eq!(strace.get("total").unwrap().calls, 821);
assert_eq!(strace.get("total").unwrap().errors, 107);
+ assert_eq!(strace.get("total").unwrap().usecs_per_call, None);
+ }
+
+ #[test]
+ fn strace_parse_3() {
+ const TEXT: &str = include_str!("./testdata/strace_summary3.out");
+ let strace = parse_strace_output(TEXT);
+
+ // first syscall line
+ let futex = strace.get("mprotect").unwrap();
+ assert_eq!(futex.calls, 90);
+ assert_eq!(futex.errors, 0);
+
+ // summary line
+ assert_eq!(strace.get("total").unwrap().calls, 543);
+ assert_eq!(strace.get("total").unwrap().errors, 36);
+ assert_eq!(strace.get("total").unwrap().usecs_per_call, Some(6));
}
#[test]
diff --git a/test_util/src/testdata/strace_summary3.out b/test_util/src/testdata/strace_summary3.out
new file mode 100644
index 000000000..c0cb844ca
--- /dev/null
+++ b/test_util/src/testdata/strace_summary3.out
@@ -0,0 +1,48 @@
+% time seconds usecs/call calls errors syscall
+------ ----------- ----------- --------- --------- ------------------
+ 14.12 0.000501 5 90 mprotect
+ 12.23 0.000434 62 7 clone3
+ 8.51 0.000302 13 22 rt_sigprocmask
+ 7.10 0.000252 7 32 read
+ 7.02 0.000249 6 39 madvise
+ 6.31 0.000224 8 26 7 openat
+ 5.69 0.000202 5 34 mmap
+ 5.10 0.000181 4 39 2 newfstatat
+ 4.40 0.000156 4 39 fcntl
+ 4.17 0.000148 5 27 brk
+ 3.27 0.000116 4 26 close
+ 3.16 0.000112 14 8 rseq
+ 3.04 0.000108 15 7 prctl
+ 2.56 0.000091 11 8 set_robust_list
+ 2.20 0.000078 6 12 gettid
+ 1.69 0.000060 5 11 munmap
+ 1.55 0.000055 5 10 write
+ 1.38 0.000049 3 14 lseek
+ 1.01 0.000036 7 5 3 ioctl
+ 0.90 0.000032 6 5 getpid
+ 0.82 0.000029 4 7 getcwd
+ 0.65 0.000023 5 4 sched_getaffinity
+ 0.51 0.000018 18 1 1 pkey_alloc
+ 0.45 0.000016 8 2 unlink
+ 0.45 0.000016 1 16 9 statx
+ 0.31 0.000011 1 6 prlimit64
+ 0.31 0.000011 2 4 getrandom
+ 0.25 0.000009 9 1 uname
+ 0.23 0.000008 1 6 rt_sigaction
+ 0.23 0.000008 4 2 geteuid
+ 0.20 0.000007 7 1 ftruncate
+ 0.11 0.000004 1 3 sigaltstack
+ 0.08 0.000003 3 1 getppid
+ 0.00 0.000000 0 1 poll
+ 0.00 0.000000 0 4 pread64
+ 0.00 0.000000 0 1 1 access
+ 0.00 0.000000 0 1 socketpair
+ 0.00 0.000000 0 1 execve
+ 0.00 0.000000 0 13 12 readlink
+ 0.00 0.000000 0 2 1 arch_prctl
+ 0.00 0.000000 0 1 set_tid_address
+ 0.00 0.000000 0 2 epoll_ctl
+ 0.00 0.000000 0 1 eventfd2
+ 0.00 0.000000 0 1 epoll_create1
+------ ----------- ----------- --------- --------- ------------------
+100.00 0.003549 6 543 36 total \ No newline at end of file