Пример #1
0
        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);
                }
        }
Пример #2
0
        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());
                }
        }
Пример #3
0
        /// <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));
            }
        }