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.");
            }
        }
Beispiel #2
0
        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;
        }