Esempio n. 1
0
 def testInvalidMerge(self):
     """Tests that updating a BuildStats instance twice is an error."""
     base_map = {
         'foo': {
             data_types.Expectation('foo', ['win'], 'Failure'): {
                 'builder': {
                     'step': data_types.BuildStats(),
                 },
             },
         },
     }
     merge_stats = data_types.BuildStats()
     merge_stats.AddFailedBuild('1')
     merge_map = {
         'foo': {
             data_types.Expectation('foo', ['win'], 'Failure'): {
                 'builder': {
                     'step': merge_stats,
                 },
             },
         },
     }
     original_base_map = copy.deepcopy(base_map)
     expectations.MergeExpectationMaps(base_map, merge_map,
                                       original_base_map)
     with self.assertRaises(AssertionError):
         expectations.MergeExpectationMaps(base_map, merge_map,
                                           original_base_map)
Esempio n. 2
0
 def testMergeBuildStats(self):
   """Tests that BuildStats for the same step are merged properly."""
   base_map = {
       'foo': {
           data_types.Expectation('foo', ['win'], 'Failure'): {
               'builder': {
                   'step': data_types.BuildStats(),
               },
           },
       },
   }
   merge_stats = data_types.BuildStats()
   merge_stats.AddFailedBuild('1')
   merge_map = {
       'foo': {
           data_types.Expectation('foo', ['win'], 'Failure'): {
               'builder': {
                   'step': merge_stats,
               },
           },
       },
   }
   expected_stats = data_types.BuildStats()
   expected_stats.AddFailedBuild('1')
   expected_base_map = {
       'foo': {
           data_types.Expectation('foo', ['win'], 'Failure'): {
               'builder': {
                   'step': expected_stats,
               },
           },
       },
   }
   expectations.MergeExpectationMaps(base_map, merge_map)
   self.assertEqual(base_map, expected_base_map)
Esempio n. 3
0
    def _FillExpectationMapForBuilders(self, expectation_map, builders,
                                       builder_type):
        """Fills |expectation_map| with results from |builders|.

    Args:
      expectation_map: A data_types.TestExpectationMap. Will be modified
          in-place.
      builders: A list of strings containing the names of builders to query.
      builder_type: A string containing the type of builder to query, either
          "ci" or "try".

    Returns:
      A dict containing any results that were retrieved that did not have a
      matching expectation in |expectation_map| in the following format:
      {
        |builder_type|:|builder_name| (str): [
          result1 (data_types.Result),
          result2 (data_types.Result),
          ...
        ],
      }
    """
        assert isinstance(expectation_map, data_types.TestExpectationMap)

        # Spin up a separate process for each query/add step. This is wasteful in
        # the sense that we'll have a bunch of idle processes once faster steps
        # start finishing, but ensures that we start slow queries early and avoids
        # the overhead of passing large amounts of data between processes. See
        # crbug.com/1182459 for more information on performance considerations.
        process_pool = multiprocessing_utils.GetProcessPool(
            nodes=len(builders))

        args = [(b, builder_type, expectation_map) for b in builders]

        results = process_pool.map(self._QueryAddCombined, args)

        tmp_expectation_map = data_types.TestExpectationMap()
        all_unmatched_results = {}

        for (unmatched_results, prefixed_builder_name, merge_map) in results:
            expectations.MergeExpectationMaps(tmp_expectation_map, merge_map,
                                              expectation_map)
            if unmatched_results:
                all_unmatched_results[
                    prefixed_builder_name] = unmatched_results

        expectation_map.clear()
        expectation_map.update(tmp_expectation_map)

        return all_unmatched_results
Esempio n. 4
0
 def testEmptyMergeMap(self):
   """Tests that a merge with an empty merge map is a no-op."""
   base_map = {
       'foo': {
           data_types.Expectation('foo', ['win'], 'Failure'): {
               'builder': {
                   'step': data_types.BuildStats(),
               },
           },
       },
   }
   merge_map = {}
   original_base_map = copy.deepcopy(base_map)
   expectations.MergeExpectationMaps(base_map, merge_map)
   self.assertEqual(base_map, original_base_map)
   self.assertEqual(merge_map, {})
Esempio n. 5
0
 def testEmptyBaseMap(self):
     """Tests that a merge with an empty base map copies the merge map."""
     base_map = data_types.TestExpectationMap()
     merge_map = data_types.TestExpectationMap({
         'foo':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo', ['win'], 'Failure'):
             data_types.BuilderStepMap({
                 'builder':
                 data_types.StepBuildStatsMap({
                     'step':
                     data_types.BuildStats(),
                 }),
             }),
         }),
     })
     original_merge_map = copy.deepcopy(merge_map)
     expectations.MergeExpectationMaps(base_map, merge_map)
     self.assertEqual(base_map, merge_map)
     self.assertEqual(merge_map, original_merge_map)
Esempio n. 6
0
 def testMissingKeys(self):
     """Tests that missing keys are properly copied to the base map."""
     base_map = data_types.TestExpectationMap({
         'foo':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo', ['win'], 'Failure'):
             data_types.BuilderStepMap({
                 'builder':
                 data_types.StepBuildStatsMap({
                     'step':
                     data_types.BuildStats(),
                 }),
             }),
         }),
     })
     merge_map = data_types.TestExpectationMap({
         'foo':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('foo', ['win'], 'Failure'):
             data_types.BuilderStepMap({
                 'builder':
                 data_types.StepBuildStatsMap({
                     'step2':
                     data_types.BuildStats(),
                 }),
                 'builder2':
                 data_types.StepBuildStatsMap({
                     'step':
                     data_types.BuildStats(),
                 }),
             }),
             data_types.Expectation('foo', ['mac'], 'Failure'):
             data_types.BuilderStepMap({
                 'builder':
                 data_types.StepBuildStatsMap({
                     'step':
                     data_types.BuildStats(),
                 })
             })
         }),
         'bar':
         data_types.ExpectationBuilderMap({
             data_types.Expectation('bar', ['win'], 'Failure'):
             data_types.BuilderStepMap({
                 'builder':
                 data_types.StepBuildStatsMap({
                     'step':
                     data_types.BuildStats(),
                 }),
             }),
         }),
     })
     expected_base_map = {
         'foo': {
             data_types.Expectation('foo', ['win'], 'Failure'): {
                 'builder': {
                     'step': data_types.BuildStats(),
                     'step2': data_types.BuildStats(),
                 },
                 'builder2': {
                     'step': data_types.BuildStats(),
                 },
             },
             data_types.Expectation('foo', ['mac'], 'Failure'): {
                 'builder': {
                     'step': data_types.BuildStats(),
                 }
             }
         },
         'bar': {
             data_types.Expectation('bar', ['win'], 'Failure'): {
                 'builder': {
                     'step': data_types.BuildStats(),
                 },
             },
         },
     }
     expectations.MergeExpectationMaps(base_map, merge_map)
     self.assertEqual(base_map, expected_base_map)