public void Setup() { DateTime now = DateTime.Now; Mock <IAltitudeClient> altitudeClientMock = new Mock <IAltitudeClient>(); Mock <ILogger> logger = new Mock <ILogger>(); algo = new FreezingAlgorithme(altitudeClientMock.Object, logger.Object); }
public static async Task Run([TimerTrigger("0 0 18 * * *")] TimerInfo myTimer, TraceWriter log) { log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); DependencyInjection.ConfigureInjection(log); using (var scope = DependencyInjection.Container.BeginLifetimeScope()) { FreezingAlgorithme algorithme = scope.Resolve <FreezingAlgorithme>(); DeviceService deviceService = scope.Resolve <DeviceService>(); NotificationService notificationService = scope.Resolve <NotificationService>(); FreezeService freezeService = scope.Resolve <FreezeService>(); AlarmService alarmService = scope.Resolve <AlarmService>(); OpenWeatherMapClient weatherClient = scope.Resolve <OpenWeatherMapClient>(); IList <Alarm> alarms = new List <Alarm>(); try { log.Info("Get latest telemtry"); Dictionary <Device, Telemetry> telemetries = deviceService.GetLatestTelemetryByDevice(); foreach (var item in telemetries) { OwmCurrentWeather current = await weatherClient.GetCurrentWeather(item.Key.Position.Latitude, item.Key.Position.Longitude); OwmForecastWeather forecast = await weatherClient.GetForecastWeather(item.Key.Position.Latitude, item.Key.Position.Longitude); log.Info($"Execute Algorithme (device {item.Key.Id})"); FreezeForecast freeze = await algorithme.Execute(item.Value, item.Key, current.Weather, forecast.Forecast, forecast.StationPosition); if (freeze == null) { log.Error($"Unable to calculate the freeze probability (no forecast)"); continue; } // TODO : complete process Dictionary <DateTime, FreezingProbability> averageFreezePrediction12h = freezeService.CalculAverageFreezePrediction12h(freeze.FreezingProbabilityList); log.Info($"Create alarms"); alarmService.CreateFreezeAlarm(item.Key.Id, item.Key.SiteId, averageFreezePrediction12h); log.Info($"Insert Freeze in Db"); freezeService.CreateFreezeAndThawByDevice(item.Key.Id, averageFreezePrediction12h); } notificationService.SendNotifications(alarms); log.Info($"Notifications sent at: {DateTime.Now}"); } catch (AlgorithmeException) { throw; } catch (Exception e) { log.Error(e.Message, e); throw; } } }
public void ExecuteAlgorithmeWithForecast_ElevationOverHundredTest() { //initialize DeviceTest device = new DeviceTest { Temperature = 6.0, Humidity = 80 }; Mock <IStationPosition> stationDeviceMock = new Mock <IStationPosition>(); stationDeviceMock.Setup(e => e.Altitude).Returns(1000); IStationPosition stationDevice = stationDeviceMock.Object; WeatherTest freezingToday = new WeatherTest { Temperature = 7.0, Humidity = 80, Date = now }; IList <IWeather> forecastList = new List <IWeather> { freezingToday }; WeatherTest tomorrow = new WeatherTest { Temperature = 5.5, Humidity = 90, Date = now.AddDays(1) }; forecastList.Add(tomorrow); WeatherTest afterTomorrow = new WeatherTest { Temperature = -1.0, Humidity = 90, Date = now.AddDays(2) }; forecastList.Add(afterTomorrow); Mock <IStationPosition> stationMock = new Mock <IStationPosition>(); IStationPosition station = stationMock.Object; Mock <IAltitudeClient> altitudeClient = new Mock <IAltitudeClient>(); altitudeClient.Setup(o => o.GetAltitude(It.IsAny <double>(), It.IsAny <double>())).ReturnsAsync(new GmeElevation { Altitude = 0 }); Mock <ILogger> logger = new Mock <ILogger>(); var freezeAlgo = new FreezingAlgorithme(altitudeClient.Object, logger.Object); //execute FreezeForecast freeze = freezeAlgo.Execute(device, stationDevice, freezingToday, forecastList, station).Result; Check.That(freeze.FreezingStart.HasValue).IsEqualTo(true); Check.That(freeze.FreezingEnd.HasValue).IsEqualTo(true); Check.That(stationDevice.Altitude).IsStrictlyGreaterThan(100); Check.That(freeze.FreezingProbabilityList.Count).IsEqualTo(forecastList.Count()); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now)).IsEqualTo(FreezeForecast.FreezingProbability.ZERO); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(1))).IsEqualTo(FreezeForecast.FreezingProbability.HIGH); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(2))).IsEqualTo(FreezeForecast.FreezingProbability.IMMINENT); }
public static async Task Run([EventHubTrigger("device-data", Connection = "EventHubConnectionString")] string myEventHubMessage, TraceWriter log) { log.Info($"C# Event Hub trigger function processed a message: {myEventHubMessage}"); DependencyInjection.ConfigureInjection(log); IEnumerable <Telemetry> telemetries = null; try { telemetries = FrameParser.Parse(myEventHubMessage); if (!telemetries.Any()) { return; } } catch (FormatException e) { log.Error($"Error on parsing frame", e); return; } try { using (var scope = DependencyInjection.Container.BeginLifetimeScope()) { DeviceService deviceService = scope.Resolve <DeviceService>(); AlarmService alarmService = scope.Resolve <AlarmService>(); TelemetryService telemetryService = scope.Resolve <TelemetryService>(); FreezingAlgorithme algorithme = scope.Resolve <FreezingAlgorithme>(); telemetryService.InsertTelemetries(telemetries); string siteId = deviceService.GetSiteId(telemetries.First().DeviceId); log.Info($"Telemetries inserted"); Task <FreezeForecast> forecast = algorithme.Execute(telemetries.Last()); log.Info($"FreezeForecast executed"); log.Info($"Create humidity alarm ..."); alarmService.CreateHumidityAlarm(telemetries.Last(), siteId); log.Info($"Create temperature alarm ..."); alarmService.CreateTemperatureAlarm(telemetries.Last(), siteId); log.Info($"Create battery alarm ..."); alarmService.CreateBatteryAlarm(telemetries.Last(), siteId); FreezeForecast freeze = await forecast; if (freeze.FreezingStart.HasValue && Freeze(freeze.FreezingProbabilityList.FirstOrDefault().Value)) { log.Info($"Create freeze alarm (if not already active)..."); alarmService.CreateFreezingAlarm(telemetries.Last(), siteId, freeze.FreezingProbabilityList.FirstOrDefault().Value); } else if (!Freeze(freeze.FreezingProbabilityList.FirstOrDefault().Value)) { log.Info($"Set latest freeze alarm as inactive ..."); alarmService.SetFreezeAlarmAsInactive(telemetries.Last().DeviceId); } log.Info($"Remove CommunicationFail alarm ..."); alarmService.CheckForActiveCommunicationFailureAlarms(telemetries.First().DeviceId); log.Info($"Update last communication date ..."); deviceService.UpdateLastCommunication(telemetries.Last().DeviceId, DateTime.UtcNow); } } catch (Exception e) { log.Error($"Error on processing telemetries", e); throw; } }
public void ExecuteAlgorithmeWithForecast_ElevationUnderHundredTest() { //initialize DeviceTest device = new DeviceTest { Temperature = 6.0, Humidity = 80 }; Mock <IStationPosition> stationDeviceMock = new Mock <IStationPosition>(); stationDeviceMock.Setup(e => e.Altitude).Returns(10); IStationPosition stationDevice = stationDeviceMock.Object; WeatherTest freezingToday = new WeatherTest { Temperature = -6.0, Humidity = 80, Date = now }; //Mock<IWeather> freezingTodayMock = new Mock<IWeather>(); //freezingTodayMock.Setup(e => e.Temperature).Returns(20); //freezingTodayMock.Setup(e => e.Humidity).Returns(80); //freezingTodayMock.Setup(e => e.Date).Returns(now); //IWeather freezingToday = freezingTodayMock.Object; IEnumerable <IWeather> forecastList = new List <IWeather> { freezingToday }; //Mock<IWeather> tomorrowMock = new Mock<IWeather>(); //tomorrowMock.Setup(e => e.Temperature).Returns(-6); //tomorrowMock.Setup(e => e.Humidity).Returns(80); //tomorrowMock.Setup(e => e.Date).Returns(now.AddDays(1)); //IWeather tomorrow = tomorrowMock.Object; WeatherTest tomorrow = new WeatherTest { Temperature = 12.0, Humidity = 80, Date = now.AddDays(1) }; (forecastList as List <IWeather>).Add(tomorrow); //Mock<IWeather> afterTomorrowMock = new Mock<IWeather>(); //afterTomorrowMock.Setup(e => e.Temperature).Returns(-13.0); //afterTomorrowMock.Setup(e => e.Humidity).Returns(50.0); //afterTomorrowMock.Setup(e => e.Date).Returns(now.AddDays(2)); //IWeather afterTomorrow = afterTomorrowMock.Object; WeatherTest afterTomorrow = new WeatherTest { Temperature = -13.0, Humidity = 50, Date = now.AddDays(2) }; (forecastList as List <IWeather>).Add(afterTomorrow); //Mock<IWeather> afterMock = new Mock<IWeather>(); //afterMock.Setup(e => e.Temperature).Returns(-42); //afterMock.Setup(e => e.Humidity).Returns(90); //afterMock.Setup(e => e.Date).Returns(now.AddDays(3)); //IWeather after = afterMock.Object; WeatherTest after = new WeatherTest { Temperature = -42, Humidity = 90, Date = now.AddDays(3) }; (forecastList as List <IWeather>).Add(after); //Mock<IWeather> endFreezeingDayMock = new Mock<IWeather>(); //endFreezeingDayMock.Setup(e => e.Temperature).Returns(-11.0); //endFreezeingDayMock.Setup(e => e.Humidity).Returns(1.0); //endFreezeingDayMock.Setup(e => e.Date).Returns(now.AddDays(4)); //IWeather endFreezeingDay = endFreezeingDayMock.Object; WeatherTest endFreezeingDay = new WeatherTest { Temperature = -11.0, Humidity = 1.0, Date = now.AddDays(4) }; (forecastList as List <IWeather>).Add(endFreezeingDay); //Mock<IWeather> endFreezeingMock = new Mock<IWeather>(); //endFreezeingMock.Setup(e => e.Temperature).Returns(-20); //endFreezeingMock.Setup(e => e.Humidity).Returns(85); //endFreezeingMock.Setup(e => e.Date).Returns(now.AddDays(5)); //IWeather endFreezeing = endFreezeingMock.Object; WeatherTest endFreezeing = new WeatherTest { Temperature = -20, Humidity = 85, Date = now.AddDays(5) }; (forecastList as List <IWeather>).Add(endFreezeing); Mock <IStationPosition> stationMock = new Mock <IStationPosition>(); IStationPosition station = stationMock.Object; Mock <IAltitudeClient> altitudeClient = new Mock <IAltitudeClient>(); altitudeClient.Setup(o => o.GetAltitude(It.IsAny <double>(), It.IsAny <double>())).ReturnsAsync(new GmeElevation { Altitude = 0 }); Mock <ILogger> logger = new Mock <ILogger>(); var freezeAlgo = new FreezingAlgorithme(altitudeClient.Object, logger.Object); //execute FreezeForecast freeze = freezeAlgo.Execute(device, stationDevice, freezingToday, forecastList, station).Result; //test Check.That(freeze.FreezingStart.HasValue).IsEqualTo(true); Check.That(altitudeClient.Object.GetAltitude(0, 0).Result.Altitude - stationDevice.Altitude).IsStrictlyLessThan(Math.Abs(100)); Console.WriteLine((forecastList as List <IWeather>).Count); Check.That(freeze.FreezingProbabilityList.Count).IsEqualTo((forecastList as List <IWeather>).Count); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now)).IsEqualTo(FreezeForecast.FreezingProbability.HIGH); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(1))).IsEqualTo(FreezeForecast.FreezingProbability.ZERO); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(2))).IsEqualTo(FreezeForecast.FreezingProbability.MEDIUM); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(3))).IsEqualTo(FreezeForecast.FreezingProbability.IMMINENT); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(4))).IsEqualTo(FreezeForecast.FreezingProbability.MEDIUM); Check.That(freeze.FreezingProbabilityList.GetValueOrDefault(now.AddDays(5))).IsEqualTo(FreezeForecast.FreezingProbability.IMMINENT); Check.That(freeze.FreezingEnd.HasValue).IsEqualTo(true); }