1#!/usr/bin/env python 2# 3# Post-process the output of test-dumpevents and check it for correctness. 4# 5 6import math 7import re 8import sys 9 10text = sys.stdin.readlines() 11 12try: 13 expect_inserted_pos = text.index("Inserted:\n") 14 expect_active_pos = text.index("Active:\n") 15 got_inserted_pos = text.index("Inserted events:\n") 16 got_active_pos = text.index("Active events:\n") 17except ValueError: 18 sys.stderr.write("Missing expected dividing line in dumpevents output") 19 sys.exit(1) 20 21if not (expect_inserted_pos < expect_active_pos < 22 got_inserted_pos < got_active_pos): 23 sys.stderr.write("Sections out of order in dumpevents output") 24 sys.exit(1) 25 26now,T= text[1].split() 27T = float(T) 28 29want_inserted = set(text[expect_inserted_pos+1:expect_active_pos]) 30want_active = set(text[expect_active_pos+1:got_inserted_pos-1]) 31got_inserted = set(text[got_inserted_pos+1:got_active_pos]) 32got_active = set(text[got_active_pos+1:]) 33 34pat = re.compile(r'Timeout=([0-9\.]+)') 35def replace_time(m): 36 t = float(m.group(1)) 37 if .9 < abs(t-T) < 1.1: 38 return "Timeout=T+1" 39 elif 2.4 < abs(t-T) < 2.6: 40 return "Timeout=T+2.5" 41 else: 42 return m.group(0) 43 44cleaned_inserted = set( pat.sub(replace_time, s) for s in got_inserted 45 if "Internal" not in s) 46 47if cleaned_inserted != want_inserted: 48 sys.stderr.write("Inserted event lists were not as expected!") 49 sys.exit(1) 50 51if set(got_active) != set(want_active): 52 sys.stderr.write("Active event lists were not as expected!") 53 sys.exit(1) 54 55