public void TransformerGeneratesCorrectMetricTypesForEachSampleType() { var metricNameService = new MetricNameService(); var metricBuilder = Mock.Create <IMetricBuilder>(); //Accumulate the GCSampleTypes that generated each metric type. var sampleTypes_ByteMetrics = new List <GCSampleType>(); var sampleTypes_CountMetrics = new List <GCSampleType>(); var sampleTypes_GaugeMetrics = new List <GCSampleType>(); var sampleTypes_PercentMetrics = new List <GCSampleType>(); //This dictionary defines which GCSampleTypes SHOULD be found in which metric type list. var expectationsDict = new Dictionary <GCSampleType, List <GCSampleType> >() { { GCSampleType.Gen0Size, sampleTypes_ByteMetrics }, { GCSampleType.Gen0Promoted, sampleTypes_ByteMetrics }, { GCSampleType.Gen1Size, sampleTypes_ByteMetrics }, { GCSampleType.Gen1Promoted, sampleTypes_ByteMetrics }, { GCSampleType.Gen2Size, sampleTypes_ByteMetrics }, { GCSampleType.Gen2Survived, sampleTypes_ByteMetrics }, { GCSampleType.LOHSize, sampleTypes_ByteMetrics }, { GCSampleType.LOHSurvived, sampleTypes_ByteMetrics }, { GCSampleType.HandlesCount, sampleTypes_GaugeMetrics }, { GCSampleType.InducedCount, sampleTypes_CountMetrics }, { GCSampleType.PercentTimeInGc, sampleTypes_PercentMetrics }, { GCSampleType.Gen0CollectionCount, sampleTypes_CountMetrics }, { GCSampleType.Gen1CollectionCount, sampleTypes_CountMetrics }, { GCSampleType.Gen2CollectionCount, sampleTypes_CountMetrics }, }; //Arrange to capture which sample types ACTUALLY generated which metric types/shapes Mock.Arrange(() => metricBuilder.TryBuildGCBytesMetric(Arg.IsAny <GCSampleType>(), Arg.IsAny <long>())) .DoInstead <GCSampleType, long>((type, _) => { sampleTypes_ByteMetrics.Add(type); }); Mock.Arrange(() => metricBuilder.TryBuildGCCountMetric(Arg.IsAny <GCSampleType>(), Arg.IsAny <int>())) .DoInstead <GCSampleType, int>((type, _) => { sampleTypes_CountMetrics.Add(type); }); Mock.Arrange(() => metricBuilder.TryBuildGCGaugeMetric(Arg.IsAny <GCSampleType>(), Arg.IsAny <float>())) .DoInstead <GCSampleType, float>((type, _) => { sampleTypes_GaugeMetrics.Add(type); }); Mock.Arrange(() => metricBuilder.TryBuildGCPercentMetric(Arg.IsAny <GCSampleType>(), Arg.IsAny <float>())) .DoInstead <GCSampleType, float>((type, _) => { sampleTypes_PercentMetrics.Add(type); }); var transformer = new GcSampleTransformer(metricBuilder, _metricAggregator); //Act transformer.Transform(_sampleData); //Assert //Ensure that all of the sample types have a corresponding expected metric shape //A failure here indicates that new GCSampleTypes have been added, but the type of metric that it generates has not been identified. Assert.AreEqual(_sampleTypesCount, expectationsDict.Count, "Not all GCSampleTypes have a metric shape associated with them. expectationsDic is missing entries"); //Validate that each SampleType generated the expected MetricType foreach (var q in expectationsDict) { Assert.Contains(q.Key, q.Value, $"GC Sample Type {q.Key} was not of the expected metric type."); } }
public void SetUp() { var metricNameService = new MetricNameService(); _metricBuilder = new MetricBuilder(metricNameService); _metricAggregator = Mock.Create <IMetricAggregator>(); _threadStatsTransformer = new ThreadStatsSampleTransformer(_metricBuilder, _metricAggregator); }
public void Setup() { var metricNameService = new MetricNameService(); _metricBuilder = new MetricBuilder(metricNameService); _metricAggregator = Mock.Create <IMetricAggregator>(); _transformer = new GcSampleTransformer(_metricBuilder, _metricAggregator); //Build example sample data var sampleValue = 0f; _sampleData = new Dictionary <GCSampleType, float>(); foreach (var val in Enum.GetValues(typeof(GCSampleType))) { _sampleData.Add((GCSampleType)val, sampleValue++); } _sampleTypes = _sampleData.Keys.ToArray(); _sampleTypesCount = _sampleTypes.Length; }