public void Should_work_for_activity_arguments()
        {
            _intValue     = 27;
            _stringValue  = "Hello, World.";
            _decimalValue = 123.45m;

            var completed = new TaskCompletionSource <RoutingSlipCompleted>();
            var faulted   = new TaskCompletionSource <RoutingSlipFaulted>();

            LocalBus.SubscribeHandler <RoutingSlipCompleted>(message => completed.TrySetResult(message));
            LocalBus.SubscribeHandler <RoutingSlipFaulted>(message => faulted.TrySetResult(message));

            Assert.IsTrue(WaitForSubscription <RoutingSlipCompleted>());
            Assert.IsTrue(WaitForSubscription <RoutingSlipFaulted>());

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            ActivityTestContext testActivity  = GetActivityContext <ObjectGraphTestActivity>();
            ActivityTestContext testActivity2 = GetActivityContext <TestActivity>();

            var dictionary = new Dictionary <string, object>
            {
                { "Outer", new OuterObjectImpl(_intValue, _stringValue, _decimalValue) },
                { "Names", new[] { "Albert", "Chris" } },
            };

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, dictionary);
            builder.AddActivity(testActivity2.Name, testActivity2.ExecuteUri);

            LocalBus.Execute(builder.Build());

            Assert.AreNotEqual(WaitHandle.WaitTimeout,
                               Task.WaitAny(new Task[] { completed.Task, faulted.Task }, Debugger.IsAttached
                                                                            ? 5.Minutes()
                                                                            : 30.Seconds()));

            if (faulted.Task.Status == TaskStatus.RanToCompletion)
            {
                Assert.Fail("Failed due to exception {0}", faulted.Task.Result.ActivityExceptions.Any()
                                                               ? faulted.Task.Result.ActivityExceptions.First()
                            .ExceptionInfo.Message
                                                               : "Unknown");
            }

            Assert.AreEqual(TaskStatus.RanToCompletion, completed.Task.Status, "Did not complete");
        }
Ejemplo n.º 2
0
        public void Should_capture_a_thrown_exception()
        {
            var handled = new ManualResetEvent(false);

            LocalBus.SubscribeHandler <RoutingSlipFaulted>(message => handled.Set());

            Assert.IsTrue(WaitForSubscription <RoutingSlipFaulted>());

            ActivityTestContext faultActivity = GetActivityContext <NastyFaultyActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            builder.AddActivity(faultActivity.Name, faultActivity.ExecuteUri);

            LocalBus.Execute(builder.Build());

            Assert.IsTrue(handled.WaitOne(Debugger.IsAttached ? 5.Minutes() : 30.Seconds()));
        }
Ejemplo n.º 3
0
        public async Task Should_publish_the_completed_event()
        {
            Task <ConsumeContext <RoutingSlipCompleted> > completed = SubscribeHandler <RoutingSlipCompleted>();

            var builder = new RoutingSlipBuilder(NewId.NextGuid());

            builder.AddSubscription(Bus.Address, RoutingSlipEvents.All);

            ActivityTestContext testActivity = GetActivityContext <TestActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello",
            });

            await Bus.Execute(builder.Build());

            await completed;
        }
        public void Setup()
        {
            _completed = new TaskCompletionSource <RoutingSlipCompleted>(TestCancellationToken);
            _firstActivityCompleted  = new TaskCompletionSource <RoutingSlipActivityCompleted>(TestCancellationToken);
            _secondActivityCompleted = new TaskCompletionSource <RoutingSlipActivityCompleted>(TestCancellationToken);

            LocalBus.SubscribeHandler <RoutingSlipCompleted>(x => _completed.SetResult(x));
            Assert.IsTrue(WaitForSubscription <RoutingSlipCompleted>());

            LocalBus.SubscribeHandler <RoutingSlipActivityCompleted>(x =>
            {
                if (x.ActivityName.Equals("Test"))
                {
                    _firstActivityCompleted.SetResult(x);
                }
                if (x.ActivityName.Equals("SecondTest"))
                {
                    _secondActivityCompleted.SetResult(x);
                }
            });
            Assert.IsTrue(WaitForSubscription <RoutingSlipActivityCompleted>());

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            ActivityTestContext testActivity = GetActivityContext <TestActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value     = "Hello",
                NullValue = (string)null,
            });

            testActivity = GetActivityContext <SecondTestActivity>();
            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri);

            builder.AddVariable("Variable", "Knife");
            builder.AddVariable("Nothing", null);

            _routingSlip = builder.Build();

            LocalBus.Execute(_routingSlip);
        }
Ejemplo n.º 5
0
        public async Task Should_immediately_complete_an_empty_list()
        {
            Guid trackingNumber = Guid.NewGuid();

            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext reviseActivity = GetActivityContext <ReviseToEmptyItineraryActivity>();

            Task <ConsumeContext <RoutingSlipCompleted> > completed =
                SubscribeHandler <RoutingSlipCompleted>(context => (context.Message.TrackingNumber == trackingNumber));

            Task <ConsumeContext <RoutingSlipActivityCompleted> > testActivityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>(
                context => context.Message.TrackingNumber == trackingNumber && context.Message.ActivityName.Equals(testActivity.Name));

            Task <ConsumeContext <RoutingSlipActivityCompleted> > reviseActivityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>(
                context => context.Message.TrackingNumber == trackingNumber && context.Message.ActivityName.Equals(reviseActivity.Name));

            Task <ConsumeContext <RoutingSlipRevised> > revised = SubscribeHandler <RoutingSlipRevised>(
                context => context.Message.TrackingNumber == trackingNumber);

            var builder = new RoutingSlipBuilder(trackingNumber);

            builder.AddActivity(reviseActivity.Name, reviseActivity.ExecuteUri, new
            {
                Value = "Time to remove any remaining items!",
            });
            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello",
            });

            await Bus.Execute(builder.Build());

            await completed;
            await reviseActivityCompleted;

            var revisions = await revised;

            Assert.AreEqual(1, revisions.Message.DiscardedItinerary.Length);
            Assert.AreEqual(0, revisions.Message.Itinerary.Length);

            testActivityCompleted.Wait(TimeSpan.FromSeconds(3)).ShouldBe(false);
        }
        public void Should_publish_the_completed_event()
        {
            var handled = new ManualResetEvent(false);

            LocalBus.SubscribeHandler <RoutingSlipCompleted>(message => { handled.Set(); });

            Assert.IsTrue(WaitForSubscription <RoutingSlipCompleted>());

            ActivityTestContext testActivity = GetActivityContext <TestActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello",
            });
            LocalBus.Execute(builder.Build());

            Assert.IsTrue(handled.WaitOne(Debugger.IsAttached ? 5.Minutes() : 30.Seconds()));
        }
Ejemplo n.º 7
0
        public void Setup()
        {
            _limit = 1;

            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext secondActivity = GetActivityContext <SecondTestActivity>();

            for (int i = 0; i < _limit; i++)
            {
                var builder = new RoutingSlipBuilder(Guid.NewGuid());
                builder.AddActivity(testActivity.Name, testActivity.ExecuteUri);
                builder.AddActivity(secondActivity.Name, secondActivity.ExecuteUri);

                RoutingSlip routingSlip = builder.Build();

                Bus.Execute(routingSlip);

                _sentRoutingSlips.Add(routingSlip.TrackingNumber);
            }
        }
Ejemplo n.º 8
0
        public void Setup()
        {
            _limit = 100;

            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext secondActivity = GetActivityContext <SecondTestActivity>();

            for (int i = 0; i < _limit; i++)
            {
                var builder = new RoutingSlipBuilder(Guid.NewGuid());
                builder.AddActivity(testActivity.Name, testActivity.ExecuteUri);
                builder.AddActivity(secondActivity.Name, secondActivity.ExecuteUri);
                builder.AddVariable("Value", "Hello");

                RoutingSlip routingSlip = builder.Build();

                TaskUtil.Await(() => Bus.Execute(routingSlip));

                _sentRoutingSlips.Add(routingSlip.TrackingNumber);
            }
        }
Ejemplo n.º 9
0
        public void Should_publish_the_completed_event()
        {
            _completed         = SubscribeHandler <RoutingSlipCompleted>();
            _activityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>();

            _trackingNumber = NewId.NextGuid();
            var builder = new RoutingSlipBuilder(_trackingNumber);

            builder.AddSubscription(Bus.Address, RoutingSlipEvents.ActivityCompleted, RoutingSlipEventContents.None);

            ActivityTestContext testActivity = GetActivityContext <TestActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello",
            });

            builder.AddVariable("Variable", "Knife");

            Await(() => Bus.Execute(builder.Build()));
        }
Ejemplo n.º 10
0
        public async Task Should_work_for_activity_arguments()
        {
            _intValue     = 27;
            _stringValue  = "Hello, World.";
            _decimalValue = 123.45m;

            Task <ConsumeContext <RoutingSlipCompleted> > completed = SubscribeHandler <RoutingSlipCompleted>();
            Task <ConsumeContext <RoutingSlipFaulted> >   faulted   = SubscribeHandler <RoutingSlipFaulted>();

            ActivityTestContext testActivity  = GetActivityContext <ObjectGraphTestActivity>();
            ActivityTestContext testActivity2 = GetActivityContext <TestActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            var dictionary = new Dictionary <string, object>
            {
                { "Outer", new OuterObjectImpl(_intValue, _stringValue, _decimalValue) },
                { "Names", new[] { "Albert", "Chris" } },
            };

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, dictionary);
            builder.AddActivity(testActivity2.Name, testActivity2.ExecuteUri, new
            {
                Value = "Howdy!"
            });

            await Bus.Execute(builder.Build());

            await Task.WhenAny(completed, faulted);

            if (faulted.Status == TaskStatus.RanToCompletion)
            {
                Assert.Fail("Failed due to exception {0}", faulted.Result.Message.ActivityExceptions.Any()
                    ? faulted.Result.Message.ActivityExceptions.First()
                            .ExceptionInfo.Message
                    : "VisitUnknownFilter");
            }

            completed.Status.ShouldBe(TaskStatus.RanToCompletion);
        }
Ejemplo n.º 11
0
        public void Setup()
        {
            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext secondActivity = GetActivityContext <SecondTestActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value     = "Hello",
                NullValue = (string)null,
            });

            builder.AddActivity(secondActivity.Name, secondActivity.ExecuteUri);

            builder.AddVariable("Variable", "Knife");
            builder.AddVariable("Nothing", null);

            _routingSlip = builder.Build();

            Await(() => Bus.Execute(_routingSlip));
        }
Ejemplo n.º 12
0
        public async Task Should_compensate_both_activities()
        {
            Task <ConsumeContext <RoutingSlipFaulted> > handled = SubscribeHandler <RoutingSlipFaulted>();

            ActivityTestContext testActivity  = GetActivityContext <TestActivity>();
            ActivityTestContext faultActivity = GetActivityContext <NastyFaultyActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello Again!",
            });
            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello Again!",
            });
            builder.AddActivity(faultActivity.Name, faultActivity.ExecuteUri);

            await Bus.Execute(builder.Build());

            await handled;
        }
Ejemplo n.º 13
0
        public async Task Should_compensate_both_activities()
        {
            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            Task <ConsumeContext <RoutingSlipFaulted> > handled = ConnectPublishHandler <RoutingSlipFaulted>(x => x.Message.TrackingNumber == builder.TrackingNumber);

            ActivityTestContext testActivity  = GetActivityContext <TestActivity>();
            ActivityTestContext faultActivity = GetActivityContext <NastyFaultyActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello Again!",
            });
            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value = "Hello Again!",
            });
            builder.AddActivity(faultActivity.Name, faultActivity.ExecuteUri);

            await Bus.Execute(builder.Build());

            await handled;
        }
Ejemplo n.º 14
0
        public async Task Should_publish_the_completed_event()
        {
            _completed         = SubscribeHandler <RoutingSlipCompleted>();
            _activityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>();

            _trackingNumber = NewId.NextGuid();
            var builder = new RoutingSlipBuilder(_trackingNumber);

            builder.AddSubscription(Bus.Address, RoutingSlipEvents.All);

            ActivityTestContext testActivity = GetActivityContext <SetVariableActivity>();

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Key = "Test",
            });

            builder.AddVariable("Value", "Used");

            await Bus.Execute(builder.Build());

            await _completed;
        }
Ejemplo n.º 15
0
        public async Task Setup()
        {
            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext secondActivity = GetActivityContext <SecondTestActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri, new
            {
                Value     = "Hello",
                NullValue = (string)null,
            });

            builder.AddActivity(secondActivity.Name, secondActivity.ExecuteUri);

            builder.AddVariable("Variable", "Knife");
            builder.AddVariable("Nothing", null);
            builder.AddVariable("ToBeRemoved", "Existing");

            _routingSlip = builder.Build();

            await Bus.Execute(_routingSlip);
        }
Ejemplo n.º 16
0
        public async Task Should_handle_the_failed_to_compensate_event()
        {
            Task <ConsumeContext <RoutingSlipActivityCompensationFailed> > handledCompensationFailure =
                SubscribeHandler <RoutingSlipActivityCompensationFailed>();
            Task <ConsumeContext <RoutingSlipCompensationFailed> > handledRoutingSlipFailure =
                SubscribeHandler <RoutingSlipCompensationFailed>();

            ActivityTestContext testActivity             = GetActivityContext <TestActivity>();
            ActivityTestContext faultyCompensateActivity = GetActivityContext <FaultyCompensateActivity>();
            ActivityTestContext faultActivity            = GetActivityContext <FaultyActivity>();

            var builder = new RoutingSlipBuilder(Guid.NewGuid());

            builder.AddVariable("Value", "Hello");
            builder.AddActivity(testActivity.Name, testActivity.ExecuteUri);
            builder.AddActivity(faultyCompensateActivity.Name, faultyCompensateActivity.ExecuteUri);
            builder.AddActivity(faultActivity.Name, faultActivity.ExecuteUri);

            await Bus.Execute(builder.Build());

            await handledRoutingSlipFailure;

            await handledCompensationFailure;
        }
Ejemplo n.º 17
0
        public async Task Should_complete_the_additional_item()
        {
            Guid trackingNumber = Guid.NewGuid();

            ActivityTestContext testActivity   = GetActivityContext <TestActivity>();
            ActivityTestContext reviseActivity = GetActivityContext <ReviseItineraryActivity>();

            Task <ConsumeContext <RoutingSlipCompleted> > completed =
                SubscribeHandler <RoutingSlipCompleted>(context => (context.Message.TrackingNumber == trackingNumber));

            Task <ConsumeContext <RoutingSlipActivityCompleted> > testActivityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>(
                context => context.Message.TrackingNumber == trackingNumber && context.Message.ActivityName.Equals(testActivity.Name));

            Task <ConsumeContext <RoutingSlipActivityCompleted> > reviseActivityCompleted = SubscribeHandler <RoutingSlipActivityCompleted>(
                context => context.Message.TrackingNumber == trackingNumber && context.Message.ActivityName.Equals(reviseActivity.Name));

            Task <ConsumeContext <RoutingSlipRevised> > revised = SubscribeHandler <RoutingSlipRevised>(
                context => context.Message.TrackingNumber == trackingNumber);

            var builder = new RoutingSlipBuilder(trackingNumber);

            builder.AddActivity(reviseActivity.Name, reviseActivity.ExecuteUri, new
            {
                Value = "Time to add a new item!",
            });

            await Bus.Execute(builder.Build());

            await completed;
            await testActivityCompleted;
            await reviseActivityCompleted;

            var revisions = await revised;

            Assert.AreEqual(0, revisions.Message.DiscardedItinerary.Length);
        }
Ejemplo n.º 18
0
 public RequestProxy(ActivityTestContext testActivity, ActivityTestContext secondActivity)
 {
     _testActivity   = testActivity;
     _secondActivity = secondActivity;
 }