123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #!/usr/bin/env vpython3
- # Copyright 2016 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import json
- import os
- import unittest
- import six
- import generate_legacy_perf_dashboard_json
- class LegacyResultsProcessorUnittest(unittest.TestCase):
- def setUp(self):
- """Set up for all test method of each test method below."""
- super(LegacyResultsProcessorUnittest, self).setUp()
- if six.PY2:
- self.data_directory = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), 'testdata')
- else:
- self.data_directory = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), 'testdata', 'python3')
- def _ConstructDefaultProcessor(self):
- """Creates a LegacyResultsProcessor instance.
- Returns:
- An instance of LegacyResultsProcessor class
- """
- return generate_legacy_perf_dashboard_json.LegacyResultsProcessor()
- def _ProcessLog(self, log_processor, logfile): # pylint: disable=R0201
- """Reads in a input log file and processes it.
- This changes the state of the log processor object; the output is stored
- in the object and can be gotten using the PerformanceLogs() method.
- Args:
- log_processor: An PerformanceLogProcessor instance.
- logfile: File name of an input performance results log file.
- """
- for line in open(os.path.join(self.data_directory, logfile)):
- log_processor.ProcessLine(line)
- def _CheckFileExistsWithData(self, logs, graph):
- """Asserts that |graph| exists in the |logs| dict and is non-empty."""
- self.assertTrue(graph in logs, 'File %s was not output.' % graph)
- self.assertTrue(logs[graph], 'File %s did not contain data.' % graph)
- def _ConstructParseAndCheckLogfiles(self, inputfiles, graphs):
- """Uses a log processor to process the given input files.
- Args:
- inputfiles: A list of input performance results log file names.
- logfiles: List of expected output ".dat" file names.
- Returns:
- A dictionary mapping output file name to output file lines.
- """
- parser = self._ConstructDefaultProcessor()
- for inputfile in inputfiles:
- self._ProcessLog(parser, inputfile)
- logs = json.loads(parser.GenerateGraphJson())
- for graph in graphs:
- self._CheckFileExistsWithData(logs, graph)
- return logs
- def _ConstructParseAndCheckJSON(
- self, inputfiles, logfiles, graphs):
- """Processes input with a log processor and checks against expectations.
- Args:
- inputfiles: A list of input performance result log file names.
- logfiles: A list of expected output ".dat" file names.
- subdir: Subdirectory containing expected output files.
- log_processor_class: A log processor class.
- """
- logs = self._ConstructParseAndCheckLogfiles(inputfiles, graphs)
- index = 0
- for filename in logfiles:
- graph_name = graphs[index]
- actual = logs[graph_name]
- path = os.path.join(self.data_directory, filename)
- expected = json.load(open(path))
- self.assertEqual(expected, actual, 'JSON data in %s did not match '
- 'expectations.' % filename)
- index += 1
- def testSummary(self):
- graphs = ['commit_charge',
- 'ws_final_total', 'vm_final_browser', 'vm_final_total',
- 'ws_final_browser', 'processes', 'artificial_graph']
- # Tests the output of "summary" files, which contain per-graph data.
- input_files = ['graphing_processor.log']
- output_files = ['%s-summary.dat' % graph for graph in graphs]
- self._ConstructParseAndCheckJSON(input_files, output_files, graphs)
- if __name__ == '__main__':
- unittest.main()
|