File: t259_arg_struct_script.py

package info (click to toggle)
uftrace 0.18.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,356 kB
  • sloc: ansic: 49,770; python: 11,181; asm: 837; makefile: 769; sh: 637; cpp: 627; javascript: 191
file content (51 lines) | stat: -rw-r--r-- 1,833 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python3

import subprocess as sp

from runtest import TestBase

class TestCase(TestBase):
    def __init__(self):
        TestBase.__init__(self, 'struct', """
uftrace_begin(ctx)
  record  : False
  version : v0.10-17-g8d1b ( x86_64 dwarf python luajit tui perf sched dynamic )
  cmds    : t-struct

11332966.196463691  50529: [entry] main(4006ef) depth: 0
11332966.196464540  50529: [entry] foo(40068f) depth: 1
  args[0] <class 'str'>: struct: Option{}
  args[1] <class 'str'>: struct: StringRef{}
  args[2] <class 'int'>: 44
  args[3] <class 'int'>: 55
  args[4] <class 'int'>: 66
11332966.196670289  50529: [exit ] foo(40068f) depth: 1
11332966.196671664  50529: [exit ] main(4006ef) depth: 0
  retval  <class 'int'>: 0

uftrace_end()
""", cflags='-g', sort='dump')

    def build(self, name, cflags='', ldflags=''):
        if not 'dwarf' in self.feature or not 'python' in self.feature:
            return TestBase.TEST_SKIP
        # cygprof doesn't support arguments now
        if cflags.find('-finstrument-functions') >= 0:
            return TestBase.TEST_SKIP
        return TestBase.build(self, name, cflags, ldflags)

    def prerun(self, timeout):
        script_cmd = '%s script' % (TestBase.uftrace_cmd)
        p = sp.Popen(script_cmd.split(), stdout=sp.PIPE, stderr=sp.PIPE)
        if p.communicate()[1].decode(errors='ignore').startswith('WARN:'):
            return TestBase.TEST_SKIP
        return TestBase.TEST_SUCCESS

    def setup(self):
        self.subcmd = 'script'
        self.option = '-S %s/scripts/dump.py -a --no-libcall --no-event --record' % self.basedir

    def fixup(self, cflags, result):
        # handle the difference between python2 and python3 output
        result = result.replace(" <class 'int'", " <type 'long'")
        return result.replace(" <class ", " <type ")