public void BalloonLandedDetection(BalloonState initialState, double altitude, BalloonState expectedState) { // arrange var fakeModuleClient = new FakeModuleClient(); var telemetryMessage = CreateTelemetryMessage(); // set gps to indicate rising balloon state telemetryMessage.alt = altitude; var balloonModule = new WeatherBalloon.BalloonModule.BalloonModule(); balloonModule.BalloonState = initialState; // act balloonModule.Receive(telemetryMessage); var task = balloonModule.TransmitBalloonMessage(fakeModuleClient); // verify task.Result.ShouldBe(true); // Sent a Balloon message? fakeModuleClient.SentMessages.Count.ShouldBe(1); // Correct message? var rawMessage = fakeModuleClient.SentMessages[0].Item2; var balloonMessage = MessageHelper.ParseMessage <BalloonMessage>(rawMessage); balloonMessage.State.ShouldBe(expectedState); }
public void BalloonFallingStateDetection(double climb, double altitude, BalloonState expectedState) { // arrange var fakeModuleClient = new FakeModuleClient(); var telemetryMessage = CreateTelemetryMessage(); // set gps to indicate rising balloon state telemetryMessage.climb = climb; telemetryMessage.alt = altitude; var balloonModule = new WeatherBalloon.BalloonModule.BalloonModule(); // set the balloon state to Rising, that's the only transition to Falling. balloonModule.BalloonState = BalloonState.Rising; // act balloonModule.Receive(telemetryMessage); var task = balloonModule.TransmitBalloonMessage(fakeModuleClient); // verify task.Result.ShouldBe(true); // Sent a Balloon message? fakeModuleClient.SentMessages.Count.ShouldBe(1); // Sent on correct output? fakeModuleClient.SentMessages[0].Item1.ShouldBe(WeatherBalloon.BalloonModule.BalloonModule.BalloonOutputName); // Correct message? var rawMessage = fakeModuleClient.SentMessages[0].Item2; var balloonMessage = MessageHelper.ParseMessage <BalloonMessage>(rawMessage); // balloon location balloonMessage.Location.track.ShouldBe(telemetryMessage.track); [email protected](telemetryMessage.@long); balloonMessage.Location.lat.ShouldBe(telemetryMessage.lat); balloonMessage.Location.mode.ShouldBe(telemetryMessage.mode); balloonMessage.Location.time.ShouldBe(telemetryMessage.time); balloonMessage.Location.speed.ShouldBe(telemetryMessage.speed); balloonMessage.Location.climb.ShouldBe(telemetryMessage.climb); balloonMessage.Temperature.ShouldBe(telemetryMessage.temp); balloonMessage.Pressure.ShouldBe(telemetryMessage.pressure); balloonMessage.Humidity.ShouldBe(telemetryMessage.humidity); if (expectedState == BalloonState.Rising) { balloonMessage.AveAscent.ShouldBe(telemetryMessage.climb); balloonMessage.AveDescent.ShouldBe(0.0); } else if (expectedState == BalloonState.Falling) { balloonMessage.AveAscent.ShouldBe(0.0); balloonMessage.AveDescent.ShouldBe(telemetryMessage.climb); } balloonMessage.State.ShouldBe(expectedState); }
public void ReceiveBalloonMessage() { // arrange var fakeModuleClient = new FakeModuleClient(); var telemetryMessage = CreateTelemetryMessage(); var balloonMessage = CreateBalloonMessage(); var trackerModule = new WeatherBalloon.TrackerModule.TrackerModule(); // act trackerModule.Receive(telemetryMessage); var task = trackerModule.Receive(balloonMessage, fakeModuleClient); // verify task.Result.ShouldBe(true); fakeModuleClient.SentMessages.Count.ShouldBe(2); // Sent on correct output? fakeModuleClient.SentMessages[0].Item1.ShouldBe(WeatherBalloon.TrackerModule.TrackerModule.TrackerOutputName); // Correct message? var rawMessage0 = fakeModuleClient.SentMessages[0].Item2; var receivedBalloonMessage = MessageHelper.ParseMessage <BalloonMessage>(rawMessage0); var rawMessage1 = fakeModuleClient.SentMessages[1].Item2; var receivedTrackerMessage = MessageHelper.ParseMessage <TrackerMessage>(rawMessage1); // balloon message fields receivedBalloonMessage.Location.track.ShouldBe(balloonMessage.Location.track); [email protected](balloonMessage.Location.@long); receivedBalloonMessage.Location.lat.ShouldBe(balloonMessage.Location.lat); receivedBalloonMessage.Location.mode.ShouldBe(balloonMessage.Location.mode); receivedBalloonMessage.Location.time.ShouldBe(balloonMessage.Location.time); receivedBalloonMessage.Location.speed.ShouldBe(balloonMessage.Location.speed); receivedBalloonMessage.Location.climb.ShouldBe(balloonMessage.Location.climb); receivedBalloonMessage.State.ShouldBe(balloonMessage.State); receivedBalloonMessage.AveAscent.ShouldBe(balloonMessage.AveAscent); receivedBalloonMessage.AveDescent.ShouldBe(balloonMessage.AveDescent); receivedBalloonMessage.FlightId.ShouldBe(balloonMessage.FlightId); receivedBalloonMessage.DeviceName.ShouldBe("Weather Balloon"); // tracker message fields receivedTrackerMessage.Location.track.ShouldBe(telemetryMessage.track); [email protected](telemetryMessage.@long); receivedTrackerMessage.Location.lat.ShouldBe(telemetryMessage.lat); receivedTrackerMessage.Location.mode.ShouldBe(telemetryMessage.mode); receivedTrackerMessage.Location.time.ShouldBe(telemetryMessage.time); receivedTrackerMessage.Location.speed.ShouldBe(telemetryMessage.speed); receivedTrackerMessage.Location.climb.ShouldBe(telemetryMessage.climb); receivedTrackerMessage.FlightId.ShouldBe(balloonMessage.FlightId); }