Пример #1
0
        public void FlowData_GetAs_NotProcessed()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            var result = flowData.GetAs <string>(STRING_PROPERTY);
        }
Пример #2
0
        public void FlowData_GetAs_WrongType()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            var result = flowData.GetAs <int>(STRING_PROPERTY);
        }
Пример #3
0
        public void FlowData_GetAs_MultipleProperties()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            var result = flowData.GetAs <string>(DUPLICATE_PROPERTY);
        }
Пример #4
0
        public void FlowData_GetAs_NoProperty()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            var result = flowData.GetAs <string>("not a property");
        }
Пример #5
0
        public void FlowData_GetAs_List()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            Assert.IsTrue(LIST_PROPERTY_VALUE.SequenceEqual(
                              flowData.GetAs <List <string> >(LIST_PROPERTY)));
        }
Пример #6
0
        public void FlowData_GetAs_StringNull()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            Assert.IsNull(flowData.GetAs <string>(NULL_STRING_PROPERTY));
            Assert.IsNull(flowData.GetAsString(NULL_STRING_PROPERTY));
        }
Пример #7
0
        public void FlowData_GetAs_String()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            Assert.AreEqual(STRING_PROPERTY_VALUE, flowData.GetAs <string>(STRING_PROPERTY));
            Assert.AreEqual(STRING_PROPERTY_VALUE, flowData.GetAsString(STRING_PROPERTY));
        }
Пример #8
0
        public void FlowData_GetAs_Int()
        {
            ConfigureMultiElementValues();
            var flowData = StaticFactories.CreateFlowData(_pipeline.Object);

            flowData.Process();

            Assert.AreEqual(INT_PROPERTY_VALUE, flowData.GetAs <int>(INT_PROPERTY));
            Assert.AreEqual(INT_PROPERTY_VALUE, flowData.GetAsInt(INT_PROPERTY));
        }
Пример #9
0
        public void Pipeline_Process_SequenceOfTwo()
        {
            // Arrange
            var element1 = GetMockFlowElement();
            var element2 = GetMockFlowElement();

            // Configure the elements
            element1.Setup(e => e.Process(It.IsAny <IFlowData>())).Callback((IFlowData d) =>
            {
                var tempdata    = d.GetOrAdd("element1", (p) => new TestElementData(p));
                tempdata["key"] = "done";
            });
            element2.Setup(e => e.Process(It.IsAny <IFlowData>())).Callback((IFlowData d) =>
            {
                var tempdata    = d.GetOrAdd("element2", (p) => new TestElementData(p));
                tempdata["key"] = "done";
            });

            // Create the pipeline
            var pipeline = CreatePipeline(
                false,
                false,
                element1.Object,
                element2.Object);
            // Don't create the flow data via the pipeline as we just want
            // to test Process.
            IFlowData data = StaticFactories.CreateFlowData(pipeline);

            data.Process();

            // Act
            pipeline.Process(data);

            // Assert
            Assert.IsTrue(data.Errors == null || data.Errors.Count == 0, "Expected no errors");
            // Check that the resulting data has the expected values
            Assert.IsTrue(data.GetDataKeys().Contains("element1"), "data from element 1 is missing in the result");
            Assert.IsTrue(data.GetDataKeys().Contains("element2"), "data from element 2 is missing in the result");
            Assert.AreEqual("done", data.Get("element1")["key"].ToString());
            Assert.AreEqual("done", data.Get("element2")["key"].ToString());
            // Check that element 1 was called before element 2.
            element2.Verify(e => e.Process(It.Is <IFlowData>(d => data.GetDataKeys().Contains("element1"))),
                            "element 1 should have been called before element 2.");
        }
        public void ParallelElements_ThreeElements_ValidateParallel()
        {
            if (Environment.ProcessorCount < 4)
            {
                Assert.Inconclusive("This test cannot be run on a machine with less that 4 processing cores");
            }

            // Arrange
            var element1 = new Mock <IFlowElement>();
            var element2 = new Mock <IFlowElement>();
            var element3 = new Mock <IFlowElement>();

            element1.Setup(e => e.Process(It.IsAny <IFlowData>())).Callback((IFlowData d) =>
            {
                var tempdata      = d.GetOrAdd("element1", (p) => new TestElementData(p));
                tempdata["start"] = DateTime.UtcNow;
                DateTime end      = DateTime.UtcNow.AddSeconds(1);
                SpinWait.SpinUntil(() => DateTime.UtcNow >= end);
                tempdata["end"] = DateTime.UtcNow;
            });
            element2.Setup(e => e.Process(It.IsAny <IFlowData>())).Callback((IFlowData d) =>
            {
                var tempdata      = d.GetOrAdd("element2", (p) => new TestElementData(p));
                tempdata["start"] = DateTime.UtcNow;
                DateTime end      = DateTime.UtcNow.AddSeconds(1);
                SpinWait.SpinUntil(() => DateTime.UtcNow >= end);
                tempdata["end"] = DateTime.UtcNow;
            });
            element3.Setup(e => e.Process(It.IsAny <IFlowData>())).Callback((IFlowData d) =>
            {
                var tempdata      = d.GetOrAdd("element3", (p) => new TestElementData(p));
                tempdata["start"] = DateTime.UtcNow;
                DateTime end      = DateTime.UtcNow.AddSeconds(1);
                SpinWait.SpinUntil(() => DateTime.UtcNow >= end);
                tempdata["end"] = DateTime.UtcNow;
            });

            _parallelElements = new ParallelElements(_logger.Object,
                                                     element1.Object,
                                                     element2.Object,
                                                     element3.Object);

            IFlowData data = StaticFactories.CreateFlowData(_pipeline.Object);

            data.Process();

            // Act
            _parallelElements.Process(data);

            List <DateTime> startTimes = new List <DateTime>();

            startTimes.Add((DateTime)data.Get("element1")["start"]);
            startTimes.Add((DateTime)data.Get("element2")["start"]);
            startTimes.Add((DateTime)data.Get("element3")["start"]);
            List <DateTime> endTimes = new List <DateTime>();

            endTimes.Add((DateTime)data.Get("element1")["end"]);
            endTimes.Add((DateTime)data.Get("element2")["end"]);
            endTimes.Add((DateTime)data.Get("element3")["end"]);

            // Assert
            Assert.IsTrue(data.Errors == null || data.Errors.Count == 0, "Expected no errors");
            Assert.IsTrue(startTimes.TrueForAll(dtStart => endTimes.TrueForAll(dtEnd => dtEnd > dtStart)),
                          $"Start times [{string.Join(",", startTimes.Select(t => t.ToString("HH:mm:ss.ffffff")))}] " +
                          $"not before end times [" +
                          $"{string.Join(",", endTimes.Select(t => t.ToString("HH:mm:ss.ffffff")))}]");
            for (int i = 0; i < 3; i++)
            {
                double ms = endTimes[i].Subtract(startTimes[i]).TotalMilliseconds;
                Assert.IsTrue(ms < 1100 && ms > 1000, $"Element {i} total time taken was {ms}ms, " +
                              $"which is outside the expected range of 1000-1100");
            }
        }