public void GetCounters_ReturnsExpectedResult()
        {
            var    mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict);
            string value           = string.Empty;
            var    logger          = new TestLogger("Test");

            mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteAppCountersName)).Returns(() => value);
            var options            = new HostHealthMonitorOptions();
            var performanceManager = new HostPerformanceManager(mockEnvironment.Object, new OptionsWrapper <HostHealthMonitorOptions>(options));

            value = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"activeConnections\": 25,\"activeConnectionLimit\": 600,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"remoteDirMonitors\": 5,\"remoteDirMonitorLimit\": 500,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}";
            var counters = performanceManager.GetPerformanceCounters(logger);

            Assert.Equal(counters.PageFaults, 131522);

            // verify garbage characters are trimmed
            value    = value + "猅";
            counters = performanceManager.GetPerformanceCounters(logger);
            Assert.Equal(counters.PageFaults, 131522);

            value    = "{}";
            counters = performanceManager.GetPerformanceCounters(logger);
            Assert.Equal(counters.PageFaults, 0);

            value    = "this is not json";
            counters = performanceManager.GetPerformanceCounters(logger);
            Assert.Null(counters);
            var error = logger.GetLogMessages().Last();

            Assert.Equal("Failed to deserialize application performance counters. JSON Content: \"this is not json\"", error.FormattedMessage);
        }
        public void GetCounters_ReturnsExpectedResult()
        {
            var    mockSettings = new Mock <ScriptSettingsManager>(MockBehavior.Strict);
            string value        = string.Empty;
            var    traceWriter  = new TestTraceWriter(TraceLevel.Verbose);

            mockSettings.Setup(p => p.GetSetting(EnvironmentSettingNames.AzureWebsiteAppCountersName)).Returns(() => value);
            var performanceManager = new HostPerformanceManager(mockSettings.Object, traceWriter);

            value = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}";
            var counters = performanceManager.GetPerformanceCounters();

            Assert.Equal(counters.PageFaults, 131522);

            value    = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}猅";
            counters = performanceManager.GetPerformanceCounters();
            Assert.Equal(counters.PageFaults, 131522);

            value    = "{}";
            counters = performanceManager.GetPerformanceCounters();
            Assert.Equal(counters.PageFaults, 0);

            value    = "this is not json";
            counters = performanceManager.GetPerformanceCounters();
            Assert.Null(counters);
            var error = traceWriter.Traces.Last();

            Assert.Equal("Failed to deserialize application performance counters. JSON Content: \"this is not json\"", error.Message);
        }
        public static void GetCounters_ReturnsExpectedResult()
        {
            var    mockSettings = new Mock <ScriptSettingsManager>(MockBehavior.Strict);
            string value        = string.Empty;

            mockSettings.Setup(p => p.GetSetting(EnvironmentSettingNames.AzureWebsiteAppCountersName)).Returns(() => value);
            var performanceManager = new HostPerformanceManager(mockSettings.Object);

            value = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}";
            var counters = performanceManager.GetPerformanceCounters();

            Assert.Equal(counters.PageFaults, 131522);

            value    = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}猅";
            counters = performanceManager.GetPerformanceCounters();
            Assert.Equal(counters.PageFaults, 131522);

            value    = "{}";
            counters = performanceManager.GetPerformanceCounters();
            Assert.Equal(counters.PageFaults, 0);
        }
        public void GetCounters_ReturnsExpectedResult()
        {
            _performanceCountersValue = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"activeConnections\": 25,\"activeConnectionLimit\": 600,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"remoteDirMonitors\": 5,\"remoteDirMonitorLimit\": 500,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}";
            var counters = _performanceManager.GetPerformanceCounters(_logger);

            Assert.Equal(counters.PageFaults, 131522);

            // verify garbage characters are trimmed
            _performanceCountersValue += "猅";
            counters = _performanceManager.GetPerformanceCounters(_logger);
            Assert.Equal(counters.PageFaults, 131522);

            _performanceCountersValue = "{}";
            counters = _performanceManager.GetPerformanceCounters(_logger);
            Assert.Equal(counters.PageFaults, 0);

            _performanceCountersValue = "this is not json";
            counters = _performanceManager.GetPerformanceCounters(_logger);
            Assert.Null(counters);
            var error = _logger.GetLogMessages().Last();

            Assert.Equal("Failed to deserialize application performance counters. JSON Content: \"this is not json\"", error.FormattedMessage);
        }