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'))
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'))
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, [])
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, [])
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)
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, [])
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)
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)
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()
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)
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)