예제 #1
0
        public void ASingleMessagesIsStored()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);

            var msg1 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow,
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            storeMessaggioPosizione.Store(msg1);

            var storedMsgs = dbContext.MessaggiPosizioneCollection
                             .Find(m => m.CodiceMezzo == "Test")
                             .ToList();

            Assert.Multiple(() =>
            {
                Assert.That(storedMsgs.Count, Is.EqualTo(1));
                Assert.That(storedMsgs[0].Id, Is.EqualTo(msg1.Id));
                Assert.That(storedMsgs[0].Ultimo, Is.True);
            });
        }
예제 #2
0
        public void TheSecondOfThreeCloseMessagesIsInterpolated()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);
            var interpolationDecorator  = new StoreMessaggioPosizione_DeleteInterpolatedMessages_Decorator(storeMessaggioPosizione, dbContext.MessaggiPosizioneCollection);

            interpolationDecorator.InterpolationThreshold_mt = 100;

            var msg1 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-2),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            var msgTime = DateTime.UtcNow.AddMinutes(-1);
            var msg2    = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = msgTime,
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            var msg3 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(0),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            interpolationDecorator.Store(msg1);
            interpolationDecorator.Store(msg2);
            interpolationDecorator.Store(msg3);

            var storedMsgs = dbContext.MessaggiPosizioneCollection
                             .Find(m => m.CodiceMezzo == "Test")
                             .ToList();

            Assert.Multiple(() =>
            {
                Assert.That(storedMsgs.Count, Is.EqualTo(2));

                Assert.That(storedMsgs.Single(m => m.Id == msg1.Id).InterpolationData, Is.Null);

                Assert.That(storedMsgs.Single(m => m.Id == msg3.Id).InterpolationData.Messages, Is.EqualTo(1));
                Assert.That(storedMsgs.Single(m => m.Id == msg3.Id).InterpolationData.Length_sec, Is.EqualTo(60));
                Assert.That(storedMsgs.Single(m => m.Id == msg3.Id).InterpolationData.LastMsgTime.Value.Subtract(msgTime).TotalMilliseconds, Is.LessThan(10));
            });
        }
예제 #3
0
        public void WhenThirdMessagesIsNotSoCloseMessagesAreNotInterpolated()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);
            var interpolationDecorator  = new StoreMessaggioPosizione_DeleteInterpolatedMessages_Decorator(storeMessaggioPosizione, dbContext.MessaggiPosizioneCollection);

            interpolationDecorator.InterpolationThreshold_mt = 10;

            var msg1 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-2),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            var msg2 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-1),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            var msg3 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(0),
                Localizzazione      = new Localizzazione {
                    Lat = 1.00015, Lon = 1
                },                                                              //few more than 10 mt
            };

            interpolationDecorator.Store(msg1);
            interpolationDecorator.Store(msg2);
            interpolationDecorator.Store(msg3);

            var storedMsgs = dbContext.MessaggiPosizioneCollection
                             .Find(m => m.CodiceMezzo == "Test")
                             .ToList();

            Assert.Multiple(() =>
            {
                Assert.That(storedMsgs.Count, Is.EqualTo(3));
                Assert.That(storedMsgs.Single(m => m.Id == msg1.Id).InterpolationData, Is.Null);
                Assert.That(storedMsgs.Single(m => m.Id == msg2.Id).InterpolationData, Is.Null);
                Assert.That(storedMsgs.Single(m => m.Id == msg3.Id).InterpolationData, Is.Null);
            });
        }
예제 #4
0
        public void StoringMessageFixesAnomalousPresenceOfMoreLastMessages()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);

            var msg1 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-2),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
                Ultimo = true
            };

            var msg2 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-1),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
                Ultimo = true
            };

            dbContext.MessaggiPosizioneCollection.InsertMany(new[] { msg1, msg2 });

            var msg3 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow,
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
                Ultimo = true
            };

            storeMessaggioPosizione.Store(msg3);

            var storedMsgs = dbContext.MessaggiPosizioneCollection
                             .Find(m => m.CodiceMezzo == "Test")
                             .ToList();

            Assert.Multiple(() =>
            {
                Assert.That(storedMsgs.Count, Is.EqualTo(3));
                Assert.That(storedMsgs.Single(m => m.Id == msg1.Id).Ultimo, Is.False);
                Assert.That(storedMsgs.Single(m => m.Id == msg2.Id).Ultimo, Is.False);
                Assert.That(storedMsgs.Single(m => m.Id == msg3.Id).Ultimo, Is.True);
            });
        }
예제 #5
0
        public void StoringMessageWithNonNullIdRaisesException()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);

            var msg = new MessaggioPosizione()
            {
                Id          = "ABCD",
                CodiceMezzo = "Test"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                storeMessaggioPosizione.Store(msg);
            });
        }
예제 #6
0
        public void TwoConsecutiveMessagesAreStored()
        {
            var storeMessaggioPosizione = new StoreMessaggioPosizione_DB(dbContext.MessaggiPosizioneCollection);

            var msg1 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow.AddMinutes(-1),
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            var msg2 = new MessaggioPosizione()
            {
                CodiceMezzo         = "Test",
                IstanteAcquisizione = DateTime.UtcNow,
                Localizzazione      = new Localizzazione {
                    Lat = 1, Lon = 1
                },
            };

            storeMessaggioPosizione.Store(msg1);
            storeMessaggioPosizione.Store(msg2);

            var storedMsgs = dbContext.MessaggiPosizioneCollection
                             .Find(m => m.CodiceMezzo == "Test")
                             .ToList();

            Assert.Multiple(() =>
            {
                Assert.That(storedMsgs.Count, Is.EqualTo(2));
                Assert.That(storedMsgs.Single(m => m.Id == msg1.Id).Ultimo, Is.False);
                Assert.That(storedMsgs.Single(m => m.Id == msg2.Id).Ultimo, Is.True);
            });
        }