public void PostProbeData_MissingInboundVehicle_Fails() { ProbeVehicleData probeData = new ProbeVehicleData(); PositionSnapshot ps = new PositionSnapshot() { Accuracy = 5, Altitude = 123, Heading = 180, Latitude = 44.646581369493, Longitude = -96.6830267664, Satellites = 0, Speed = 14.77999305725097, TimeStamp = 137349837631 }; probeData.Positions.Add(ps); using (IDbContext idtoFakeContext = new IDTOFakeContext()) using (IUnitOfWork imuow = new UnitOfWork(idtoFakeContext)) { var mockTable = new Mock <IAzureTable <ProbeSnapshotEntry> >(); var cut = new ProbeController(idtoFakeContext, mockTable.Object); SetupControllerForTests(cut); HttpResponseMessage returnMessage = cut.PostProbeData(probeData); Assert.AreEqual(HttpStatusCode.BadRequest, returnMessage.StatusCode); } }
public void PostProbeData_UpdateVehiclePosition_Success() { using (IDbContext idtoFakeContext = new IDTOFakeContext()) using (IUnitOfWork imuow = new UnitOfWork(idtoFakeContext)) { AddTripToRepo(imuow); LastVehiclePosition lvp = new LastVehiclePosition { VehicleName = "MDT2", PositionTimestamp = DateTime.UtcNow, Latitude = 44.646581369493, Longitude = -96.6830267664, Speed = 10, Heading = 180, Accuracy = 5 }; imuow.Repository <LastVehiclePosition>().Insert(lvp); imuow.Save(); DateTime newestPositionTimestamp = DateTime.UtcNow.AddMinutes(1); var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long newestTimeStamp = Convert.ToInt64((newestPositionTimestamp - epoch).TotalMilliseconds); ProbeVehicleData probeData = new ProbeVehicleData { InboundVehicle = "MDT2" }; PositionSnapshot ps = new PositionSnapshot() { Accuracy = 5, Altitude = 123, Heading = 180, Latitude = 44.646581369493, Longitude = -96.6830267664, Satellites = 0, Speed = 14.77999305725097, TimeStamp = newestTimeStamp }; probeData.Positions.Add(ps); var mockTable = new Mock <IAzureTable <ProbeSnapshotEntry> >(); var cut = new ProbeController(idtoFakeContext, mockTable.Object); SetupControllerForTests(cut); HttpResponseMessage returnMessage = cut.PostProbeData(probeData); List <LastVehiclePosition> lvpList = imuow.Repository <LastVehiclePosition>().Query().Get().Where(v => v.VehicleName == "MDT2").ToList(); Assert.AreEqual(1, lvpList.Count); Assert.AreEqual(newestPositionTimestamp.ToLongTimeString(), lvpList.First().PositionTimestamp.ToLongTimeString()); } }
/// <summary> /// Receives ProbeVehicleData by inbound vehicle for the latest vehicle location and saves it to the cloud. /// </summary> /// <param name="probeDataMessage"></param> /// <returns></returns> public HttpResponseMessage PostProbeData(ProbeVehicleData probeDataMessage) { try { if (String.IsNullOrEmpty(probeDataMessage.InboundVehicle)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "InboundVehicle cannot be null or empty")); } // Convert from Java timestamp DateTime dtTemp = new DateTime(1970, 1, 1, 0, 0, 0); DateTime newestProbeTimestamp = dtTemp; ProbeSnapshotEntry newestProbeSnapshot = null; foreach (PositionSnapshot positionSnapshot in probeDataMessage.Positions) { DateTime lastUpdatedDate = dtTemp.AddMilliseconds(positionSnapshot.TimeStamp); ProbeSnapshotEntry newProbeSnapshot = new ProbeSnapshotEntry { PartitionKey = probeDataMessage.InboundVehicle, RowKey = Guid.NewGuid().ToString(), Latitude = positionSnapshot.Latitude, Longitude = positionSnapshot.Longitude, Speed = positionSnapshot.Speed, Heading = positionSnapshot.Heading, PositionTimestamp = lastUpdatedDate, Satellites = positionSnapshot.Satellites, Accuracy = positionSnapshot.Accuracy, Altitude = positionSnapshot.Altitude }; _probeTable.AddEntity(newProbeSnapshot); //Check for and hang on to most recent probe snapshot if (lastUpdatedDate > newestProbeTimestamp) { newestProbeTimestamp = lastUpdatedDate; newestProbeSnapshot = newProbeSnapshot; } } SaveNewestProbeSnapshot(newestProbeSnapshot); return(Request.CreateResponse(HttpStatusCode.NoContent)); } catch (Exception ex) { string msg = RecordException(ex, "ProbeController.PostProbeData"); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message + msg)); } }