Пример #1
0
  def testWebGlVersion(self):
    """Tests that only results for the correct WebGL version are returned."""
    query_results = [
        {
            'id':
            'build-1234',
            'test_id': ('ninja://chrome/test:telemetry_gpu_integration_test/'
                        'gpu_tests.webgl_conformance_integration_test.'
                        'WebGLConformanceIntegrationTest.test_name'),
            'status':
            'FAIL',
            'typ_expectations': [
                'RetryOnFailure',
            ],
            'typ_tags': [
                'webgl-version-1',
            ],
            'step_name':
            'step_name',
        },
        {
            'id':
            'build-2345',
            'test_id': ('ninja://chrome/test:telemetry_gpu_integration_test/'
                        'gpu_tests.webgl_conformance_integration_test.'
                        'WebGLConformanceIntegrationTest.test_name'),
            'status':
            'FAIL',
            'typ_expectations': [
                'RetryOnFailure',
            ],
            'typ_tags': [
                'webgl-version-2',
            ],
            'step_name':
            'step_name',
        },
    ]
    self._popen_mock.return_value = unittest_utils.FakeProcess(
        stdout=json.dumps(query_results))
    _, results = queries.QueryBuilder('builder', 'ci', 'webgl_conformance1',
                                      'project', 5, False)
    self.assertEqual(len(results), 1)
    self.assertEqual(
        results[0],
        data_types.Result('test_name', ['webgl-version-1'], 'Failure',
                          'step_name', '1234'))

    _, results = queries.QueryBuilder('builder', 'ci', 'webgl_conformance2',
                                      'project', 5, False)
    self.assertEqual(len(results), 1)
    self.assertEqual(
        results[0],
        data_types.Result('test_name', ['webgl-version-2'], 'Failure',
                          'step_name', '2345'))
Пример #2
0
 def testValidResults(self):
   """Tests functionality when valid results are returned."""
   query_results = [
       {
           'id':
           'build-1234',
           'test_id': ('ninja://chrome/test:telemetry_gpu_integration_test/'
                       'gpu_tests.pixel_integration_test.'
                       'PixelIntegrationTest.test_name'),
           'status':
           'FAIL',
           'typ_expectations': [
               'RetryOnFailure',
           ],
           'typ_tags': [
               'win',
               'intel',
           ],
           'step_name':
           'step_name',
       },
   ]
   self._process_mock.return_value = json.dumps(query_results)
   builder, results = queries.QueryBuilder('builder', 'ci', 'pixel', 'project',
                                           5)
   self.assertEqual(builder, 'builder')
   self.assertEqual(len(results), 1)
   self.assertEqual(
       results[0],
       data_types.Result('test_name', ['win', 'intel'], 'Failure', 'step_name',
                         '1234'))
Пример #3
0
 def testNoResults(self):
   """Tests functionality if the query returns no results."""
   self._process_mock.return_value = '[]'
   builder, results = queries.QueryBuilder('builder', 'ci', 'pixel', 'project',
                                           5)
   self.assertEqual(builder, 'builder')
   self.assertEqual(results, [])
Пример #4
0
 def testNoResults(self):
   """Tests functionality if the query returns no results."""
   self._popen_mock.return_value = unittest_utils.FakeProcess(stdout='[]')
   builder, results = queries.QueryBuilder('builder', 'ci', 'pixel', 'project',
                                           5, False)
   self.assertEqual(builder, 'builder')
   self.assertEqual(results, [])
Пример #5
0
  def testSuiteExceptionMap(self):
    """Tests that the suite passed to the query changes for some suites."""
    # These don't actually matter, we just need to ensure that something valid
    # is returned so QueryBuilder doesn't explode.
    query_results = [
        {
            'id':
            'build-1234',
            'test_id': ('ninja://chrome/test:telemetry_gpu_integration_test/'
                        'gpu_tests.webgl_conformance_integration_test.'
                        'WebGLConformanceIntegrationTest.test_name'),
            'status':
            'FAIL',
            'typ_expectations': [
                'RetryOnFailure',
            ],
            'typ_tags': [
                'webgl-version-1',
            ],
            'step_name':
            'step_name',
        },
    ]
    self._process_mock.return_value = json.dumps(query_results)

    def assertSuiteInQuery(suite, call_args):
      cmd = call_args[0][0]
      s = 'r"gpu_tests\\.%s\\."' % suite
      for c in cmd:
        if s in c:
          return
      self.fail()

    # Non-special cased suite.
    _, _ = queries.QueryBuilder('builder', 'ci', 'pixel', 'project', 5)
    assertSuiteInQuery('pixel_integration_test', self._process_mock.call_args)

    # Special-cased suites.
    _, _ = queries.QueryBuilder('builder', 'ci', 'info_collection', 'project',
                                5)
    assertSuiteInQuery('info_collection_test', self._process_mock.call_args)
    _, _ = queries.QueryBuilder('builder', 'ci', 'power', 'project', 5)
    assertSuiteInQuery('power_measurement_integration_test',
                       self._process_mock.call_args)

    _, _ = queries.QueryBuilder('builder', 'ci', 'trace_test', 'project', 5)
    assertSuiteInQuery('trace_integration_test', self._process_mock.call_args)
Пример #6
0
 def testEarlyReturnOnNoFilter(self):
   """Tests that the absence of a test filter results in an early return."""
   with mock.patch.object(
       queries, '_GetTestFilterClauseForBuilder',
       return_value=None), mock.patch.object(
           queries, '_RunBigQueryCommandForJsonOutput') as query_mock:
     builder, results = queries.QueryBuilder('builder', 'ci',
                                             'info_collection', 'project', 5,
                                             False)
     query_mock.assert_not_called()
     self.assertEqual(builder, 'builder')
     self.assertEqual(results, [])
Пример #7
0
 def testFilterInsertion(self):
   """Tests that test filters are properly inserted into the query."""
   with mock.patch.object(
       queries, '_GetTestFilterClauseForBuilder',
       return_value='a real filter'), mock.patch.object(
           queries, '_RunBigQueryCommandForJsonOutput') as query_mock:
     queries.QueryBuilder('builder', 'ci', 'info_collection', 'project', 5,
                          False)
     query_mock.assert_called_once()
     query = query_mock.call_args[0][0]
     self.assertIn(
         """\
       AND STRUCT("builder", @builder_name) IN UNNEST(variant)
       a real filter
     GROUP BY exported.id""", query)
Пример #8
0
  def testSuiteExceptionMap(self):
    """Tests that the suite passed to the query changes for some suites."""
    def assertSuiteInQuery(suite, call_args):
      query = call_args[0][0]
      s = 'r"gpu_tests\\.%s\\."' % suite
      self.assertIn(s, query)

    with mock.patch.object(queries,
                           '_RunBigQueryCommandForJsonOutput') as query_mock:
      # Non-special cased suite.
      _, _ = queries.QueryBuilder('builder', 'ci', 'pixel', 'project', 5, False)
      assertSuiteInQuery('pixel_integration_test', query_mock.call_args)

      # Special-cased suites.
      _, _ = queries.QueryBuilder('builder', 'ci', 'info_collection', 'project',
                                  5, False)
      assertSuiteInQuery('info_collection_test', query_mock.call_args)
      _, _ = queries.QueryBuilder('builder', 'ci', 'power', 'project', 5, False)
      assertSuiteInQuery('power_measurement_integration_test',
                         query_mock.call_args)

      _, _ = queries.QueryBuilder('builder', 'ci', 'trace_test', 'project', 5,
                                  False)
      assertSuiteInQuery('trace_integration_test', query_mock.call_args)
Пример #9
0
 def testInvalidNumSamples(self):
   """Tests that the number of samples is validated."""
   with self.assertRaises(AssertionError):
     queries.QueryBuilder('builder', 'ci', 'pixel', 'project', -1)
   self._process_mock.assert_not_called()
Пример #10
0
 def testQueryFailureRaised(self):
   """Tests that a query failure is properly surfaced."""
   self._process_mock.side_effect = subprocess.CalledProcessError(1, 'cmd')
   with self.assertRaises(subprocess.CalledProcessError):
     queries.QueryBuilder('builder', 'ci', 'pixel', 'project', 5)
Пример #11
0
 def testQueryFailureRaised(self):
   """Tests that a query failure is properly surfaced."""
   self._popen_mock.return_value = unittest_utils.FakeProcess(returncode=1)
   with self.assertRaises(RuntimeError):
     queries.QueryBuilder('builder', 'ci', 'pixel', 'project', 5, False)