public void FlowData_GetAs_NotProcessed() { ConfigureMultiElementValues(); var flowData = StaticFactories.CreateFlowData(_pipeline.Object); var result = flowData.GetAs <string>(STRING_PROPERTY); }
public void FlowData_GetAs_WrongType() { ConfigureMultiElementValues(); var flowData = StaticFactories.CreateFlowData(_pipeline.Object); flowData.Process(); var result = flowData.GetAs <int>(STRING_PROPERTY); }
public void FlowData_GetAs_MultipleProperties() { ConfigureMultiElementValues(); var flowData = StaticFactories.CreateFlowData(_pipeline.Object); flowData.Process(); var result = flowData.GetAs <string>(DUPLICATE_PROPERTY); }
public void FlowData_GetAs_NoProperty() { ConfigureMultiElementValues(); var flowData = StaticFactories.CreateFlowData(_pipeline.Object); flowData.Process(); var result = flowData.GetAs <string>("not a property"); }
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))); }
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)); }
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)); }
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)); }
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"); } }