Exemplo n.º 1
0
 def testUnusedButNotEmpty(self):
     """Tests filtering if there is an unused expectation but no empty tests."""
     expectation_map = data_types.TestExpectationMap({
         'foo/test':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo/test', ['win'], ['Failure']):
             data_types.BuilderStepMap({
                 'SomeBuilder':
                 data_types.StepBuildStatsMap(),
             }),
             data_types.Expectation('foo/test', ['linux'], ['Failure']):
             data_types.BuilderStepMap(),
         })
     })
     expected_expectation_map = data_types.TestExpectationMap({
         'foo/test':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo/test', ['win'], ['Failure']):
             data_types.BuilderStepMap({
                 'SomeBuilder':
                 data_types.StepBuildStatsMap(),
             }),
         }),
     })
     unused_expectations = expectations.FilterOutUnusedExpectations(
         expectation_map)
     self.assertEqual(
         unused_expectations,
         [data_types.Expectation('foo/test', ['linux'], ['Failure'])])
     self.assertEqual(expectation_map, expected_expectation_map)
Exemplo n.º 2
0
def main():
    args = ParseArgs()
    # TODO(crbug.com/1108016): Remove this warning once ResultDB is enabled on all
    # builders and there is enough data for the results to be trusted.
    WarnUserOfIncompleteRollout()
    test_expectation_map = expectations.CreateTestExpectationMap(
        args.expectation_file, args.tests)
    ci_builders = builders.GetCiBuilders(
        SUITE_TO_TELEMETRY_SUITE_MAP.get(args.suite, args.suite))
    # Unmatched results are mainly useful for script maintainers, as they don't
    # provide any additional information for the purposes of finding unexpectedly
    # passing tests or unused expectations.
    unmatched = queries.FillExpectationMapForCiBuilders(
        test_expectation_map, ci_builders, args.suite, args.project,
        args.num_samples)
    try_builders = builders.GetTryBuilders(ci_builders)
    unmatched.update(
        queries.FillExpectationMapForTryBuilders(test_expectation_map,
                                                 try_builders, args.suite,
                                                 args.project,
                                                 args.num_samples))
    unused_expectations = expectations.FilterOutUnusedExpectations(
        test_expectation_map)
    result_output.OutputResults(test_expectation_map, unmatched,
                                unused_expectations, args.output_format)
Exemplo n.º 3
0
 def testUnusedAndEmpty(self):
   """Tests filtering if there is an expectation that causes an empty test."""
   expectation_map = {
       'foo/test': {
           data_types.Expectation('foo/test', ['win'], ['Failure']): {},
       },
   }
   unused_expectations = expectations.FilterOutUnusedExpectations(
       expectation_map)
   self.assertEqual(unused_expectations,
                    [data_types.Expectation('foo/test', ['win'], ['Failure'])])
   self.assertEqual(expectation_map, {})
Exemplo n.º 4
0
 def testNoUnused(self):
   """Tests that filtering is a no-op if there are no unused expectations."""
   expectation_map = {
       'foo/test': {
           data_types.Expectation('foo/test', ['win'], ['Failure']): {
               'SomeBuilder': [],
           },
       },
   }
   expected_expectation_map = copy.deepcopy(expectation_map)
   unused_expectations = expectations.FilterOutUnusedExpectations(
       expectation_map)
   self.assertEqual(len(unused_expectations), 0)
   self.assertEqual(expectation_map, expected_expectation_map)
def main():
    args = ParseArgs()
    test_expectation_map = expectations.CreateTestExpectationMap(
        args.expectation_file, args.tests)
    ci_builders = builders.GetCiBuilders(
        SUITE_TO_TELEMETRY_SUITE_MAP.get(args.suite, args.suite))

    querier = queries.BigQueryQuerier(args.suite, args.project,
                                      args.num_samples, args.large_query_mode)
    # Unmatched results are mainly useful for script maintainers, as they don't
    # provide any additional information for the purposes of finding unexpectedly
    # passing tests or unused expectations.
    unmatched = querier.FillExpectationMapForCiBuilders(
        test_expectation_map, ci_builders)
    try_builders = builders.GetTryBuilders(ci_builders)
    unmatched.update(
        querier.FillExpectationMapForTryBuilders(test_expectation_map,
                                                 try_builders))
    unused_expectations = expectations.FilterOutUnusedExpectations(
        test_expectation_map)
    stale, semi_stale, active = expectations.SplitExpectationsByStaleness(
        test_expectation_map)
    result_output.OutputResults(stale, semi_stale, active, unmatched,
                                unused_expectations, args.output_format)

    affected_urls = set()
    stale_message = ''
    if args.remove_stale_expectations:
        stale_expectations = []
        for _, expectation_map in stale.iteritems():
            stale_expectations.extend(expectation_map.keys())
        stale_expectations.extend(unused_expectations)
        affected_urls |= expectations.RemoveExpectationsFromFile(
            stale_expectations, args.expectation_file)
        stale_message += (
            'Stale expectations removed from %s. Stale comments, '
            'etc. may still need to be removed.\n' % args.expectation_file)

    if args.modify_semi_stale_expectations:
        affected_urls |= expectations.ModifySemiStaleExpectations(
            semi_stale, args.expectation_file)
        stale_message += ('Semi-stale expectations modified in %s. Stale '
                          'comments, etc. may still need to be removed.\n' %
                          args.expectation_file)

    if stale_message:
        print(stale_message)
    if affected_urls:
        result_output.OutputAffectedUrls(affected_urls)
Exemplo n.º 6
0
 def testUnusedAndEmpty(self):
     """Tests filtering if there is an expectation that causes an empty test."""
     expectation_map = data_types.TestExpectationMap({
         'foo/test':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo/test', ['win'], ['Failure']):
             data_types.BuilderStepMap(),
         }),
     })
     unused_expectations = expectations.FilterOutUnusedExpectations(
         expectation_map)
     self.assertEqual(
         unused_expectations,
         [data_types.Expectation('foo/test', ['win'], ['Failure'])])
     self.assertEqual(expectation_map, {})
Exemplo n.º 7
0
 def testNoUnused(self):
     """Tests that filtering is a no-op if there are no unused expectations."""
     expectation_map = data_types.TestExpectationMap({
         'foo/test':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo/test', ['win'], ['Failure']):
             data_types.BuilderStepMap({
                 'SomeBuilder':
                 data_types.StepBuildStatsMap(),
             }),
         })
     })
     expected_expectation_map = copy.deepcopy(expectation_map)
     unused_expectations = expectations.FilterOutUnusedExpectations(
         expectation_map)
     self.assertEqual(len(unused_expectations), 0)
     self.assertEqual(expectation_map, expected_expectation_map)
Exemplo n.º 8
0
def main():
    args = ParseArgs()
    # TODO(crbug.com/1108016): Remove this warning once ResultDB is enabled on all
    # builders and there is enough data for the results to be trusted.
    WarnUserOfIncompleteRollout()
    test_expectation_map = expectations.CreateTestExpectationMap(
        args.expectation_file, args.tests)
    ci_builders = builders.GetCiBuilders(
        SUITE_TO_TELEMETRY_SUITE_MAP.get(args.suite, args.suite))
    # Unmatched results are mainly useful for script maintainers, as they don't
    # provide any additional information for the purposes of finding unexpectedly
    # passing tests or unused expectations.
    unmatched = queries.FillExpectationMapForCiBuilders(
        test_expectation_map, ci_builders, args.suite, args.project,
        args.num_samples)
    try_builders = builders.GetTryBuilders(ci_builders)
    unmatched.update(
        queries.FillExpectationMapForTryBuilders(test_expectation_map,
                                                 try_builders, args.suite,
                                                 args.project,
                                                 args.num_samples))
    unused_expectations = expectations.FilterOutUnusedExpectations(
        test_expectation_map)
    stale, semi_stale, active = expectations.SplitExpectationsByStaleness(
        test_expectation_map)
    result_output.OutputResults(stale, semi_stale, active, unmatched,
                                unused_expectations, args.output_format)

    if args.remove_stale_expectations:
        stale_expectations = []
        for _, expectation_map in stale.iteritems():
            stale_expectations.extend(expectation_map.keys())
        stale_expectations.extend(unused_expectations)
        removed_urls = expectations.RemoveExpectationsFromFile(
            stale_expectations, args.expectation_file)
        print(
            'Stale expectations removed from %s. Stale comments, etc. may still '
            'need to be removed.' % args.expectation_file)
        result_output.OutputRemovedUrls(removed_urls)
Exemplo n.º 9
0
 def testUnusedButNotEmpty(self):
   """Tests filtering if there is an unused expectation but no empty tests."""
   expectation_map = {
       'foo/test': {
           data_types.Expectation('foo/test', ['win'], ['Failure']): {
               'SomeBuilder': [],
           },
           data_types.Expectation('foo/test', ['linux'], ['Failure']): {},
       },
   }
   expected_expectation_map = {
       'foo/test': {
           data_types.Expectation('foo/test', ['win'], ['Failure']): {
               'SomeBuilder': [],
           },
       },
   }
   unused_expectations = expectations.FilterOutUnusedExpectations(
       expectation_map)
   self.assertEqual(
       unused_expectations,
       [data_types.Expectation('foo/test', ['linux'], ['Failure'])])
   self.assertEqual(expectation_map, expected_expectation_map)