示例#1
0
        public void FilterByBefore_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/04",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "Before=1/02/2001" });

            Assert.Equal(new DateTime(2001, 1, 1), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 2), result.First().End);
            Assert.Equal("Hello World", result.First().Value);
            Assert.Equal(1, result.Count);
        }
示例#2
0
        public void FilterByKey_LessThan_Returns_Only_Match_Results()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=1" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=10" }
            };


            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "State.MyVal < 10" });

            Assert.Equal("E1", result.First().Entity);
            Assert.Equal(new DateTime(2001, 1, 1), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 2).AddSeconds(-1), result.First().End);

            Assert.Equal(1, result.Count);
        }
示例#3
0
        public void FilterByKey_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "State.MyVal=Hello World" }).First();

            Assert.Equal("E1", result.Entity);
            Assert.Equal(new DateTime(2001, 1, 1), result.Start);
            Assert.Equal(new DateTime(2001, 1, 2).AddSeconds(-1), result.End);
        }
示例#4
0
        public void FilterByAfter_Between_Observations_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/03",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "After=1/02/2001" });

            Assert.Equal(2, result.Count());
            Assert.Equal(new DateTime(2001, 1, 2), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 3).AddSeconds(-1), result.First().End);
            Assert.Equal("Hello World", result.First().Value);


            Assert.Equal(new DateTime(2001, 1, 3), result.Skip(1).First().Start);
            Assert.Null(result.Skip(1).First().End);
            Assert.Equal("More", result.Skip(1).First().Value);
        }
示例#5
0
        public void FilterEvent_BasicStateMatch()
        {
            _context.Database.EnsureDeleted();

            var e1 = new NewEvent()
            {
                On       = "2001/01/01 01:01",
                Type     = "MyEventType",
                Entities = new string[] { "E1" }
            };

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyObservationType",
                Entity      = "E1",
                Expressions = new string[] { "State.MyVal=Hello World" }
            };

            _service.RegisterObservation(o1);
            _service.RegisterEvent(e1);


            var match    = _service.SearchEvents(new string[] { "State.MyVal=Hello World" });
            var nonMatch = _service.SearchEvents(new string[] { "State.MyVal=Not The One!" });

            Assert.Single(match);
            Assert.Empty(nonMatch);
        }
示例#6
0
        public void FilterByAfter_AfterEndOfLine_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/03",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "After=1/04/2001" }).First();

            Assert.Equal(new DateTime(2001, 1, 4), result.Start);
            Assert.Equal("More", result.Value);
            Assert.Null(result.End);
        }
        public void RegisteringObservation_Fires_EventAgent_Out_Of_Order()
        {
            _context.Database.EnsureDeleted();
            var agentMock = new Mock <IStateChangeReaction>();
            var service   = new TimeLineService(_context);

            service.RegisterReaction(agentMock.Object);

            var o1 = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };


            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World Again" }
            };


            service.RegisterObservation(o2);
            service.RegisterObservation(o1);


            agentMock.Verify(x => x.OnChange("E1", "MyVal", "Hello World", "Hello World Again", "01/02/2001 00:00:00.0000000"));
        }
        public void RegisteringObservation_StateIsMerged_Chronologically()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };

            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            Assert.False(service.GetEntityState("E1", "2001/01/01 01:01").ContainsKey("MyNextVal"));
        }
        public void RegisteringObservation_StateIsOverwritten()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            var contexts = service.SearchEvents(new string[] { }).OrderByDescending(x => x.On);

            Assert.Equal("Hello World Again", service.GetEntityState("E1", "2001/01/01 01:02")["MyNextVal"]);
        }
        public void RegisteringObservation_StateIsMerged_Simultaneously()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            Assert.Equal("Hello World", service.GetEntityState("E1", "2001/01/01 01:01")["MyVal"]);
            Assert.Equal("Hello World Again", service.GetEntityState("E1", "2001/01/01 01:01")["MyNextVal"]);
        }
示例#11
0
        public void Entity_State_Tracked()
        {
            var e1 = new NewEvent()
            {
                On       = "2001/01/01 01:01",
                Type     = "MyEventType",
                Entities = new [] { "E1" }
            };

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var e2 = new NewEvent()
            {
                On       = "2001/01/01 01:02",
                Type     = "MyEventType",
                Entities = new[] { "E1" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World Again" }
            };



            _service.RegisterObservation(o1);
            _service.RegisterEvent(e1);
            _service.RegisterObservation(o2);
            _service.RegisterEvent(e2);

            var state1 = _service.GetEntityState("E1", "2001 /01/01 01:01");
            var state2 = _service.GetEntityState("E1", "2001/01/01 01:02");
            var state3 = _service.GetEntityState("BADID", "2001/01/01 01:02");

            Assert.Equal("Hello World", state1["MyVal"]);
            Assert.Equal("Hello World Again", state2["MyVal"]);
            Assert.False(state3.ContainsKey("MyVal"));
        }
        public void RegisteringObservation_StateIsMerged_Reverse_Chronologically()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:03",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=3" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=2" }
            };

            var o3 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=1" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);
            service.RegisterObservation(o3);

            Assert.Equal("1", service.GetEntityState("E1", "2001/01/01 01:01")["MyNextVal"]);
            Assert.Equal("2", service.GetEntityState("E1", "2001/01/01 01:02")["MyNextVal"]);
            Assert.Equal("3", service.GetEntityState("E1", "2001/01/01 01:03")["MyNextVal"]);
        }
        public void RegisteringObservation_StateIsSet()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            service.RegisterObservation(o);

            Assert.Equal("Hello World", service.GetEntityState("E1", "2001/01/01")["MyVal"]);
        }