Represents a leaf in the suite tree structure.
| 451 | |
| 452 | |
| 453 | class LeafTraceConfig(GraphConfig): |
| 454 | """Represents a leaf in the suite tree structure.""" |
| 455 | def __init__(self, suite, parent, arch): |
| 456 | super(LeafTraceConfig, self).__init__(suite, parent, arch) |
| 457 | assert self.results_regexp |
| 458 | if '%s' in self.results_regexp: |
| 459 | raise Exception( |
| 460 | "results_regexp at the wrong level. " |
| 461 | "Regexp should not contain '%%s': results_regexp='%s' name=%s" % |
| 462 | (self.results_regexp, self.name)) |
| 463 | |
| 464 | def AppendChild(self, node): |
| 465 | raise Exception("%s cannot have child configs." % type(self).__name__) |
| 466 | |
| 467 | def ConsumeOutput(self, output, result_tracker): |
| 468 | """Extracts trace results from the output. |
| 469 | |
| 470 | Args: |
| 471 | output: Output object from the test run. |
| 472 | result_tracker: Result tracker to be updated. |
| 473 | |
| 474 | Returns: |
| 475 | The raw extracted result value or None if an error occurred. |
| 476 | """ |
| 477 | |
| 478 | if len(self.children) > 0: |
| 479 | results_for_total = [] |
| 480 | for trace in self.children: |
| 481 | result = trace.ConsumeOutput(output, result_tracker) |
| 482 | if result is not None: |
| 483 | results_for_total.append(result) |
| 484 | |
| 485 | result = None |
| 486 | stddev = None |
| 487 | |
| 488 | try: |
| 489 | result = float( |
| 490 | re.search(self.results_regexp, output.stdout, re.M).group(1)) |
| 491 | except ValueError: |
| 492 | result_tracker.AddError( |
| 493 | 'Regexp "%s" returned a non-numeric for test %s.' % |
| 494 | (self.results_regexp, self.name)) |
| 495 | except: |
| 496 | if self.results_default is not None: |
| 497 | result = float(self.results_default) |
| 498 | else: |
| 499 | result_tracker.AddError( |
| 500 | 'Regexp "%s" did not match for test %s.' % |
| 501 | (self.results_regexp, self.name)) |
| 502 | |
| 503 | try: |
| 504 | if self.stddev_regexp: |
| 505 | if result_tracker.TraceHasStdDev(self): |
| 506 | result_tracker.AddError( |
| 507 | 'Test %s should only run once since a stddev is provided by the ' |
| 508 | 'test.' % self.name) |
| 509 | stddev = re.search(self.stddev_regexp, output.stdout, re.M).group(1) |
| 510 | except: |