Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f2f350c authored by Tony Jones's avatar Tony Jones Committed by Arnaldo Carvalho de Melo
Browse files

perf script python: Add Python3 support to tests/attr.py



Support both Python 2 and Python 3 in tests/attr.py

The use of "except as" syntax implies the minimum supported Python2 version is
now v2.6

Committer testing:

  $ make -C tools/perf PYTHON3=python install-bin

Before:

  # perf test attr
  16: Setup struct perf_event_attr                          : FAILED!
  48: Synthesize attr update                                : Ok
  [root@quaco ~]# perf test -v attr
  16: Setup struct perf_event_attr                          :
  --- start ---
  test child forked, pid 3121
    File "/home/acme/libexec/perf-core/tests/attr.py", line 324
      except Unsup, obj:
                ^
  SyntaxError: invalid syntax
  test child finished with -1
  ---- end ----
  Setup struct perf_event_attr: FAILED!
  48: Synthesize attr update                                :
  --- start ---
  test child forked, pid 3124
  test child finished with 0
  ---- end ----
  Synthesize attr update: Ok
  #

After:

   # perf test attr
  16: Setup struct perf_event_attr                          : Ok
  48: Synthesize attr update                                : Ok
  #

Signed-off-by: default avatarTony Jones <tonyj@suse.de>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Cc: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20190124005229.16146-7-tonyj@suse.de


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 6ab3bc24
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
#! /usr/bin/python
# SPDX-License-Identifier: GPL-2.0

from __future__ import print_function

import os
import sys
import glob
@@ -8,7 +10,11 @@ import optparse
import tempfile
import logging
import shutil
import ConfigParser

try:
    import configparser
except ImportError:
    import ConfigParser as configparser

def data_equal(a, b):
    # Allow multiple values in assignment separated by '|'
@@ -100,20 +106,20 @@ class Event(dict):
    def equal(self, other):
        for t in Event.terms:
            log.debug("      [%s] %s %s" % (t, self[t], other[t]));
            if not self.has_key(t) or not other.has_key(t):
            if t not in self or t not in other:
                return False
            if not data_equal(self[t], other[t]):
                return False
        return True

    def optional(self):
        if self.has_key('optional') and self['optional'] == '1':
        if 'optional' in self and self['optional'] == '1':
            return True
        return False

    def diff(self, other):
        for t in Event.terms:
            if not self.has_key(t) or not other.has_key(t):
            if t not in self or t not in other:
                continue
            if not data_equal(self[t], other[t]):
                log.warning("expected %s=%s, got %s" % (t, self[t], other[t]))
@@ -134,7 +140,7 @@ class Event(dict):
#   - expected values assignments
class Test(object):
    def __init__(self, path, options):
        parser = ConfigParser.SafeConfigParser()
        parser = configparser.SafeConfigParser()
        parser.read(path)

        log.warning("running '%s'" % path)
@@ -193,7 +199,7 @@ class Test(object):
        return True

    def load_events(self, path, events):
        parser_event = ConfigParser.SafeConfigParser()
        parser_event = configparser.SafeConfigParser()
        parser_event.read(path)

        # The event record section header contains 'event' word,
@@ -207,7 +213,7 @@ class Test(object):
            # Read parent event if there's any
            if (':' in section):
                base = section[section.index(':') + 1:]
                parser_base = ConfigParser.SafeConfigParser()
                parser_base = configparser.SafeConfigParser()
                parser_base.read(self.test_dir + '/' + base)
                base_items = parser_base.items('event')

@@ -322,9 +328,9 @@ def run_tests(options):
    for f in glob.glob(options.test_dir + '/' + options.test):
        try:
            Test(f, options).run()
        except Unsup, obj:
        except Unsup as obj:
            log.warning("unsupp  %s" % obj.getMsg())
        except Notest, obj:
        except Notest as obj:
            log.warning("skipped %s" % obj.getMsg())

def setup_log(verbose):
@@ -363,7 +369,7 @@ def main():
    parser.add_option("-p", "--perf",
                      action="store", type="string", dest="perf")
    parser.add_option("-v", "--verbose",
                      action="count", dest="verbose")
                      default=0, action="count", dest="verbose")

    options, args = parser.parse_args()
    if args:
@@ -373,7 +379,7 @@ def main():
    setup_log(options.verbose)

    if not options.test_dir:
        print 'FAILED no -d option specified'
        print('FAILED no -d option specified')
        sys.exit(-1)

    if not options.test:
@@ -382,8 +388,8 @@ def main():
    try:
        run_tests(options)

    except Fail, obj:
        print "FAILED %s" % obj.getMsg();
    except Fail as obj:
        print("FAILED %s" % obj.getMsg())
        sys.exit(-1)

    sys.exit(0)