def testMerge(self): events = histogram.RelatedEventSet() events.Add({ 'stableId': '0.0', 'title': 'foo', 'start': 0, 'duration': 1, }) generic = generic_set.GenericSet(['generic diagnostic']) generic2 = generic_set.GenericSet(['generic diagnostic 2']) related_map = histogram.RelatedHistogramMap() related_map.Set('a', histogram.Histogram('histogram', 'count')) hist = histogram.Histogram('', 'count') # When Histograms are merged, first an empty clone is created with an empty # DiagnosticMap. hist2 = histogram.Histogram('', 'count') hist2.diagnostics['a'] = generic hist.diagnostics.Merge(hist2.diagnostics) self.assertIs(generic, hist.diagnostics['a']) # Separate keys are not merged. hist3 = histogram.Histogram('', 'count') hist3.diagnostics['b'] = generic2 hist.diagnostics.Merge(hist3.diagnostics) self.assertIs(generic, hist.diagnostics['a']) self.assertIs(generic2, hist.diagnostics['b']) # Merging unmergeable diagnostics should produce an # UnmergeableDiagnosticSet. hist4 = histogram.Histogram('', 'count') hist4.diagnostics['a'] = related_map hist.diagnostics.Merge(hist4.diagnostics) self.assertIsInstance(hist.diagnostics['a'], histogram.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_map, diagnostics[1]) # UnmergeableDiagnosticSets are mergeable. hist5 = histogram.Histogram('', 'count') hist5.diagnostics['a'] = histogram.UnmergeableDiagnosticSet( [events, generic2]) hist.diagnostics.Merge(hist5.diagnostics) self.assertIsInstance(hist.diagnostics['a'], histogram.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_map, diagnostics[1]) self.assertIs(events, diagnostics[2]) self.assertIs(generic2, diagnostics[3])
def testRelatedHistogramMap(self): a = histogram.Histogram('a', 'unitless') b = histogram.Histogram('b', 'unitless') c = histogram.Histogram('c', 'unitless') rhm = histogram.RelatedHistogramMap() rhm.Set('y', b) rhm.Set('z', c) a.diagnostics['rhm'] = rhm # Don't serialize c yet. hists = histogram_set.HistogramSet([a, b]) hists2 = histogram_set.HistogramSet() hists2.ImportDicts(hists.AsDicts()) hists2.ResolveRelatedHistograms() a2 = hists2.GetHistogramsNamed('a') self.assertEqual(len(a2), 1) a2 = a2[0] self.assertEqual(a2.guid, a.guid) self.assertIsInstance(a2, histogram.Histogram) self.assertIsNot(a2, a) b2 = hists2.GetHistogramsNamed('b') self.assertEqual(len(b2), 1) b2 = b2[0] self.assertEqual(b2.guid, b.guid) self.assertIsInstance(b2, histogram.Histogram) self.assertIsNot(b2, b) rhm2 = a2.diagnostics['rhm'] self.assertIsInstance(rhm2, histogram.RelatedHistogramMap) self.assertEqual(len(rhm2), 2) # Assert that b and c are in a2's RelatedHistogramMap, rhm2. self.assertIs(b2, rhm2.Get('y')) self.assertIsInstance(rhm2.Get('z'), histogram.HistogramRef) # Now serialize c and add it to hists2. hists2.ImportDicts([c.AsDict()]) hists2.ResolveRelatedHistograms() c2 = hists2.GetHistogramsNamed('c') self.assertEqual(len(c2), 1) c2 = c2[0] self.assertEqual(c2.guid, c.guid) self.assertIsNot(c2, c) self.assertIs(b2, rhm2.Get('y')) self.assertIs(c2, rhm2.Get('z'))