|
@@ -75,6 +75,7 @@ class Event(dict):
|
|
|
self.add(data)
|
|
|
|
|
|
def compare_data(self, a, b):
|
|
|
+ # Allow multiple values in assignment separated by '|'
|
|
|
a_list = a.split('|')
|
|
|
b_list = b.split('|')
|
|
|
|
|
@@ -96,12 +97,17 @@ class Event(dict):
|
|
|
return False
|
|
|
return True
|
|
|
|
|
|
- def is_optional(self):
|
|
|
- if self['optional'] == '1':
|
|
|
- return True
|
|
|
- else:
|
|
|
- return False
|
|
|
-
|
|
|
+# Test file description needs to have following sections:
|
|
|
+# [config]
|
|
|
+# - just single instance in file
|
|
|
+# - needs to specify:
|
|
|
+# 'command' - perf command name
|
|
|
+# 'args' - special command arguments
|
|
|
+# 'ret' - expected command return value (0 by default)
|
|
|
+#
|
|
|
+# [eventX:base]
|
|
|
+# - one or multiple instances in file
|
|
|
+# - expected values assignments
|
|
|
class Test(object):
|
|
|
def __init__(self, path, options):
|
|
|
parser = ConfigParser.SafeConfigParser()
|
|
@@ -135,11 +141,15 @@ class Test(object):
|
|
|
parser_event = ConfigParser.SafeConfigParser()
|
|
|
parser_event.read(path)
|
|
|
|
|
|
+ # The event record section header contains 'event' word,
|
|
|
+ # optionaly followed by ':' allowing to load 'parent
|
|
|
+ # event' first as a base
|
|
|
for section in filter(self.is_event, parser_event.sections()):
|
|
|
|
|
|
parser_items = parser_event.items(section);
|
|
|
base_items = {}
|
|
|
|
|
|
+ # Read parent event if there's any
|
|
|
if (':' in section):
|
|
|
base = section[section.index(':') + 1:]
|
|
|
parser_base = ConfigParser.SafeConfigParser()
|
|
@@ -177,11 +187,10 @@ class Test(object):
|
|
|
else:
|
|
|
log.debug(" ->FAIL");
|
|
|
|
|
|
- log.info(" match: [%s] optional(%d) matches %s" %
|
|
|
- (exp_name, exp_event.is_optional(), str(exp_list)))
|
|
|
+ log.info(" match: [%s] matches %s" % (exp_name, str(exp_list)))
|
|
|
|
|
|
# we did not any matching event - fail
|
|
|
- if (not exp_list) and (not exp_event.is_optional()):
|
|
|
+ if (not exp_list):
|
|
|
raise Fail(self, 'match failure');
|
|
|
|
|
|
match[exp_name] = exp_list
|
|
@@ -194,8 +203,6 @@ class Test(object):
|
|
|
if (group == ''):
|
|
|
continue
|
|
|
|
|
|
- # XXX group matching does not account for
|
|
|
- # optional events as above matching does
|
|
|
for res_name in match[exp_name]:
|
|
|
res_group = result[res_name].group
|
|
|
if res_group not in match[group]:
|