1#!perl
2use Test::More tests => 12;
3use_ok "Sys::Trace::Impl::Strace";
4
5# Try parsing some existing strace output
6my $trace = Sys::Trace::Impl::Strace->new;
7my $calls = $trace->parse(*DATA);
8
9# Should have a call to execve
10is 1, scalar grep { $_->{call} eq 'execve' } @$calls;
11
12my($execve) = grep { $_->{call} eq 'execve' } @$calls;
13
14is $execve->{name}, "/bin/pwd";
15is $execve->{systime}, "0.000351";
16is $execve->{walltime}, "1277677148.516737";
17is_deeply $execve->{args}, [qw(/bin/pwd ["pwd"]), "[/* 32 vars */]"];
18
19is 1, scalar grep { $_->{call} eq 'exit_group' } @$calls;
20
21my($fstat64) = grep { $_->{call} eq 'fstat64' } @$calls;
22is $fstat64->{args}->[0], 3;
23is $fstat64->{args}->[1], "{st_mode=S_IFREG|0644, st_size=72860, ...}";
24is $fstat64->{return}, 0;
25
26my($access) = grep { $_->{call} eq 'access' } @$calls;
27is $access->{name}, "/etc/ld.so.nohwcap";
28is $access->{errno}, "ENOENT";
29
30__DATA__
3125901 1277677148.516737 execve("/bin/pwd", ["pwd"], [/* 32 vars */]) = 0 <0.000351>
3225901 1277677148.517468 brk(0)                = 0x81f1000 <0.000022>
3325901 1277677148.517611 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) <0.000032>
3425901 1277677148.517789 mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb772f000 <0.000026>
3525901 1277677148.517932 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000030>
3625901 1277677148.518072 open("/etc/ld.so.cache", O_RDONLY) = 3 <0.000032>
3725901 1277677148.518192 fstat64(3, {st_mode=S_IFREG|0644, st_size=72860, ...}) = 0 <0.000022>
3825901 1277677148.518390 mmap2(NULL, 72860, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb771d000 <0.000026>
3925901 1277677148.518483 close(3)              = 0 <0.000021>
4025901 1277677148.518572 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) <0.000029>
4125901 1277677148.518720 open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 <0.000035>
4225901 1277677148.518851 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260l\1\0004\0\0\0"..., 512) = 512 <0.000023>
4325901 1277677148.519009 fstat64(3, {st_mode=S_IFREG|0755, st_size=1319364, ...}) = 0 <0.000021>
4425901 1277677148.521333 mmap2(NULL, 1329512, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xda2000 <0.000022>
4525901 1277677148.521401 mprotect(0xee0000, 4096, PROT_NONE) = 0 <0.000014>
4625901 1277677148.521442 mmap2(0xee1000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13e) = 0xee1000 <0.000017>
4725901 1277677148.521500 mmap2(0xee4000, 10600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xee4000 <0.000011>
4825901 1277677148.521549 close(3)              = 0 <0.000008>
4925901 1277677148.521601 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb771c000 <0.000010>
5025901 1277677148.521645 set_thread_area({entry_number:-1 -> 6, base_addr:0xb771c8d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 <0.000008>
5125901 1277677148.521783 mprotect(0xee1000, 8192, PROT_READ) = 0 <0.000011>
5225901 1277677148.521822 mprotect(0x8051000, 4096, PROT_READ) = 0 <0.000011>
5325901 1277677148.521863 mprotect(0xcab000, 4096, PROT_READ) = 0 <0.000011>
5425901 1277677148.521897 munmap(0xb771d000, 72860) = 0 <0.000015>
5525901 1277677148.522040 brk(0)                = 0x81f1000 <0.000008>
5625901 1277677148.522073 brk(0x8212000)        = 0x8212000 <0.000010>
5725901 1277677148.522120 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) <0.000020>
5825901 1277677148.522195 open("/usr/share/locale/locale.alias", O_RDONLY) = 3 <0.000020>
5925901 1277677148.522261 fstat64(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0 <0.000008>
6025901 1277677148.522330 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb772e000 <0.000009>
6125901 1277677148.522368 read(3, "# Locale name alias data base.\n#"..., 4096) = 2570 <0.000018>
6225901 1277677148.522461 read(3, "", 4096)     = 0 <0.000009>
6325901 1277677148.522496 close(3)              = 0 <0.000009>
6425901 1277677148.522527 munmap(0xb772e000, 4096) = 0 <0.000013>
6525901 1277677148.522663 open("/usr/lib/locale/en_GB.UTF-8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000013>
6625901 1277677148.522721 open("/usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION", O_RDONLY) = 3 <0.000014>
6725901 1277677148.522775 fstat64(3, {st_mode=S_IFREG|0644, st_size=366, ...}) = 0 <0.000008>
6825901 1277677148.522840 mmap2(NULL, 366, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb772e000 <0.000010>
6925901 1277677148.522875 close(3)              = 0 <0.000007>
7025901 1277677148.522913 open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3 <0.000014>
7125901 1277677148.522964 fstat64(3, {st_mode=S_IFREG|0644, st_size=26048, ...}) = 0 <0.000008>
7225901 1277677148.523027 mmap2(NULL, 26048, PROT_READ, MAP_SHARED, 3, 0) = 0xb7727000 <0.000010>
7325901 1277677148.523062 close(3)              = 0 <0.000008>
7425901 1277677148.523172 open("/usr/lib/locale/en_GB.UTF-8/LC_MEASUREMENT", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
7525901 1277677148.523228 open("/usr/lib/locale/en_GB.utf8/LC_MEASUREMENT", O_RDONLY) = 3 <0.000012>
7625901 1277677148.523280 fstat64(3, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0 <0.000007>
7725901 1277677148.523344 mmap2(NULL, 23, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7726000 <0.000010>
7825901 1277677148.523378 close(3)              = 0 <0.000008>
7925901 1277677148.523488 open("/usr/lib/locale/en_GB.UTF-8/LC_TELEPHONE", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000013>
8025901 1277677148.523543 open("/usr/lib/locale/en_GB.utf8/LC_TELEPHONE", O_RDONLY) = 3 <0.000013>
8125901 1277677148.523594 fstat64(3, {st_mode=S_IFREG|0644, st_size=56, ...}) = 0 <0.000008>
8225901 1277677148.523657 mmap2(NULL, 56, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7725000 <0.000010>
8325901 1277677148.523692 close(3)              = 0 <0.000008>
8425901 1277677148.523795 open("/usr/lib/locale/en_GB.UTF-8/LC_ADDRESS", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
8525901 1277677148.523848 open("/usr/lib/locale/en_GB.utf8/LC_ADDRESS", O_RDONLY) = 3 <0.000012>
8625901 1277677148.523897 fstat64(3, {st_mode=S_IFREG|0644, st_size=127, ...}) = 0 <0.000008>
8725901 1277677148.523961 mmap2(NULL, 127, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7724000 <0.000009>
8825901 1277677148.523995 close(3)              = 0 <0.000008>
8925901 1277677148.524096 open("/usr/lib/locale/en_GB.UTF-8/LC_NAME", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
9025901 1277677148.524147 open("/usr/lib/locale/en_GB.utf8/LC_NAME", O_RDONLY) = 3 <0.000013>
9125901 1277677148.524194 fstat64(3, {st_mode=S_IFREG|0644, st_size=77, ...}) = 0 <0.000008>
9225901 1277677148.524259 mmap2(NULL, 77, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7723000 <0.000010>
9325901 1277677148.524293 close(3)              = 0 <0.000008>
9425901 1277677148.524398 open("/usr/lib/locale/en_GB.UTF-8/LC_PAPER", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000011>
9525901 1277677148.524450 open("/usr/lib/locale/en_GB.utf8/LC_PAPER", O_RDONLY) = 3 <0.000012>
9625901 1277677148.524499 fstat64(3, {st_mode=S_IFREG|0644, st_size=34, ...}) = 0 <0.000008>
9725901 1277677148.524563 mmap2(NULL, 34, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7722000 <0.000010>
9825901 1277677148.524597 close(3)              = 0 <0.000007>
9925901 1277677148.524734 open("/usr/lib/locale/en_GB.UTF-8/LC_MESSAGES", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000013>
10025901 1277677148.524788 open("/usr/lib/locale/en_GB.utf8/LC_MESSAGES", O_RDONLY) = 3 <0.000012>
10125901 1277677148.524837 fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 <0.000008>
10225901 1277677148.524898 close(3)              = 0 <0.000009>
10325901 1277677148.524931 open("/usr/lib/locale/en_GB.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3 <0.000013>
10425901 1277677148.524985 fstat64(3, {st_mode=S_IFREG|0644, st_size=52, ...}) = 0 <0.000008>
10525901 1277677148.525049 mmap2(NULL, 52, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7721000 <0.000010>
10625901 1277677148.525084 close(3)              = 0 <0.000008>
10725901 1277677148.525191 open("/usr/lib/locale/en_GB.UTF-8/LC_MONETARY", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
10825901 1277677148.525245 open("/usr/lib/locale/en_GB.utf8/LC_MONETARY", O_RDONLY) = 3 <0.000012>
10925901 1277677148.525294 fstat64(3, {st_mode=S_IFREG|0644, st_size=290, ...}) = 0 <0.000008>
11025901 1277677148.525359 mmap2(NULL, 290, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7720000 <0.000009>
11125901 1277677148.525393 close(3)              = 0 <0.000008>
11225901 1277677148.525495 open("/usr/lib/locale/en_GB.UTF-8/LC_COLLATE", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
11325901 1277677148.525550 open("/usr/lib/locale/en_GB.utf8/LC_COLLATE", O_RDONLY) = 3 <0.000012>
11425901 1277677148.525599 fstat64(3, {st_mode=S_IFREG|0644, st_size=966938, ...}) = 0 <0.000008>
11525901 1277677148.525663 mmap2(NULL, 966938, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb762f000 <0.000010>
11625901 1277677148.525697 close(3)              = 0 <0.000007>
11725901 1277677148.525806 open("/usr/lib/locale/en_GB.UTF-8/LC_TIME", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
11825901 1277677148.525859 open("/usr/lib/locale/en_GB.utf8/LC_TIME", O_RDONLY) = 3 <0.000013>
11925901 1277677148.525908 fstat64(3, {st_mode=S_IFREG|0644, st_size=2470, ...}) = 0 <0.000008>
12025901 1277677148.526580 mmap2(NULL, 2470, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb771f000 <0.000012>
12125901 1277677148.526618 close(3)              = 0 <0.000008>
12225901 1277677148.526726 open("/usr/lib/locale/en_GB.UTF-8/LC_NUMERIC", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000013>
12325901 1277677148.526781 open("/usr/lib/locale/en_GB.utf8/LC_NUMERIC", O_RDONLY) = 3 <0.000013>
12425901 1277677148.526831 fstat64(3, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0 <0.000008>
12525901 1277677148.526896 mmap2(NULL, 54, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb771e000 <0.000010>
12625901 1277677148.526931 close(3)              = 0 <0.000008>
12725901 1277677148.527033 open("/usr/lib/locale/en_GB.UTF-8/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000012>
12825901 1277677148.527086 open("/usr/lib/locale/en_GB.utf8/LC_CTYPE", O_RDONLY) = 3 <0.000012>
12925901 1277677148.527134 fstat64(3, {st_mode=S_IFREG|0644, st_size=256316, ...}) = 0 <0.000008>
13025901 1277677148.527198 mmap2(NULL, 256316, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb75f0000 <0.000009>
13125901 1277677148.527233 close(3)              = 0 <0.000008>
13225901 1277677148.527303 getcwd("/tmp", 4096)  = 5 <0.000010>
13325901 1277677148.527348 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0 <0.000008>
13425901 1277677148.527413 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb75ef000 <0.000010>
13525901 1277677148.527455 write(1, "/tmp\n", 5/tmp
13625901 ) = 5 <0.000011>
13725901 1277677148.527502 close(1)              = 0 <0.000007>
13825901 1277677148.527532 munmap(0xb75ef000, 4096) = 0 <0.000013>
13925901 1277677148.527568 close(2)              = 0 <0.000008>
14025901 1277677148.527605 exit_group(0)         = ?
141