Пример #1
0
        public async Task ShouldSendResponseToBrokerWhenUserJwtIsValid()
        {
            object expectedErrors = null;
            Guid   expectedBody   = Guid.Empty;

            await harness.Start();

            try
            {
                var requestClient = await harness.ConnectRequestClient <ICheckTokenRequest>();

                var response = await requestClient.GetResponse <IOperationResult <Guid> >(new
                {
                    UserJwt = userJwt
                });

                Assert.IsTrue(response.Message.IsSuccess);
                Assert.AreEqual(expectedErrors, response.Message.Errors);
                Assert.AreEqual(expectedBody, response.Message.Body);
                Assert.IsTrue(consumerTestHarness.Consumed.Select <ICheckTokenRequest>().Any());
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_Respond_With_Rejected_If_Test()
        {
            //assert
            var orderId        = NewId.NextGuid();
            var customerNumber = "TEST123";
            var requestClient  = await _harness.ConnectRequestClient <SubmitOrder>();

            //act
            var response = await requestClient.GetResponse <OrderSubmissionRejected>(new OrderSubmissionRejected()
            {
                OrderId        = orderId,
                Timestamp      = InVar.Timestamp,
                CustomerNumber = customerNumber
            });

            await _harness.InputQueueSendEndpoint.Send <SubmitOrder>(new SubmitOrder
            {
                OrderId        = orderId,
                Timestamp      = InVar.Timestamp,
                CustomerNumber = customerNumber
            });

            //assert
            response.Message.OrderId.Should().Be(orderId);

            _consumer.Consumed.Select <SubmitOrder>().Any().Should().BeTrue();
            _harness.Sent.Select <OrderSubmissionRejected>().Any().Should().BeTrue();
        }
Пример #3
0
        public async Task Should_Respond_To_Status_Checks()
        {
            //arrange
            var orderId        = NewId.NextGuid();
            var customerNumber = "12345";
            //act
            await _harness.Bus.Publish <OrderSubmitted>(new OrderSubmitted
            {
                OrderId        = orderId,
                Timestamp      = InVar.Timestamp,
                CustomerNumber = customerNumber
            });

            //assert
            _saga.Created.Select(x => x.CorrelationId == orderId).Any().Should().BeTrue();

            var instanceId = await _saga.Exists(orderId, x => x.Submitted);

            instanceId.Should().NotBeNull();

            var requestClient = await _harness.ConnectRequestClient <CheckOrder>();

            var response = await requestClient.GetResponse <OrderStatus>(new OrderStatus
            {
                OrderId = orderId
            });

            response.Message.State.Should().Be(_orderStateMachine.Submitted.Name);
        }
Пример #4
0
        public async Task Should_respond_with_rejected_if_test_customer_number()
        {
            var harness  = new InMemoryTestHarness();
            var consumer = harness.Consumer <SubmitOrderConsumer>();
            await harness.Start();

            try
            {
                var orderId       = NewId.NextGuid();
                var requestClient = await harness.ConnectRequestClient <ISubmitOrder>();

                var response = await requestClient.GetResponse <OrderSubmissionRejected>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = customerNumberFail
                });

                Assert.That(response.Message.OrderId, Is.EqualTo(orderId));
                Assert.That(consumer.Consumed.Select <ISubmitOrder>().Any(), Is.True);
                Assert.That(harness.Sent.Select <OrderSubmissionRejected>().Any(), Is.True);
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_to_status_checks()
        {
            var harness           = new InMemoryTestHarness();
            var orderStateMachine = new OrderStateMachine();
            var saga = harness.StateMachineSaga <OrderState, OrderStateMachine>(orderStateMachine);
            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();
                await harness.Bus.Publish <OrderSubmitted>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = customerNumber
                });

                Assert.That(saga.Created.Select(x => x.CorrelationId == orderId).Any(), Is.True);
                var instanceId = await saga.Exists(orderId, x => x.Submitted);

                Assert.That(instanceId, Is.Not.Null);
                var requestClient = await harness.ConnectRequestClient <CheckOrder>();

                var response = await requestClient.GetResponse <OrderStatus>(new
                {
                    OrderId = orderId
                });

                Assert.That(response.Message.State, Is.EqualTo(orderStateMachine.Submitted.Name));
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_response_with_accept_if_test_user_DO_NOT_TEST_THIS()
        {
            var harness  = new InMemoryTestHarness();
            var consumer = harness.Consumer <SubmitOrderConsumer>();

            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();

                var requestClient = await harness.ConnectRequestClient <SubmitOrder>();

                var response = await requestClient.GetResponse <OrderSubmissionAccepted>(new
                {
                    OrderId        = orderId,
                    Timestamp      = InVar.Timestamp,
                    CustomerNumber = "TEST",
                });

                Assert.That(response.Message.OrderId, Is.EqualTo(orderId));
                Assert.That(consumer.Consumed.Select <SubmitOrder>().Any(), Is.True);
                // 시스템이 OrderSubmissionRejected 를 전송했는지 확인.
                Assert.That(harness.Sent.Select <OrderSubmissionAccepted>().Any(), Is.True);
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #7
0
        public async Task Should_respond_with_acceptance_if_ok()
        {
            var harness  = new InMemoryTestHarness();
            var consumer = harness.Consumer <SubmitOrderConsumer>();

            await harness.Start();

            try
            {
                var orderId       = NewId.NextGuid();
                var requestClient = await harness.ConnectRequestClient <SubmitOrder>();

                var response = await requestClient.GetResponse <OrderSubmissionAccepted>(new {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "12345"
                });

                await harness.InputQueueSendEndpoint.Send <SubmitOrder>(new {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "12345"
                });

                Assert.Equal(response.Message.OrderId, orderId);

                Assert.True(consumer.Consumed.Select <SubmitOrder>().Any());
                Assert.True(harness.Sent.Select <OrderSubmissionAccepted>().Any());
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task SubmitOrderConsumer_Accepted()
        {
            var harness = new InMemoryTestHarness();

            harness.Consumer <SubmitOrderConsumer>();

            try
            {
                await harness.Start();

                var orderId = NewId.NextGuid();

                var requestClientSubmitOrder = await harness.ConnectRequestClient <ISubmitOrder>();

                var(accepted, rejected) =
                    await requestClientSubmitOrder.GetResponse <IOrderAccepted, IOrderRejected>(new
                {
                    OrderId = orderId,
                    Amount  = 900
                });

                harness.Consumed.Select <ISubmitOrder>().Any().Should().Be.True();
                accepted.IsCompletedSuccessfully.Should().Be.True();
                rejected.IsCompletedSuccessfully.Should().Be.False();

                harness.Published.Select <IOrderAcceptedEvent>().Any().Should().Be.True();
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #9
0
        public async Task Should_respond_with_acceptance_if_ok()
        {
            var harness  = new InMemoryTestHarness();
            var consumer = harness.Consumer <SubmitOrderConsumer>();

            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();

                // use this for request/response scenarios
                var requestClient = await harness.ConnectRequestClient <SubmitOrderCommand>();

                var response = await requestClient.GetResponse <OrderSubmissionAcceptedResponse>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    Customer = "1234"
                });


                response.Message.OrderId.IsSameOrEqualTo(orderId);
                consumer.Consumed.Select <SubmitOrderCommand>().Any().Should().BeTrue();
                harness.Sent.Select <OrderSubmissionAcceptedResponse>().Any().Should().BeTrue();
                // harness.Published.Select<OrderSubmittedEvent>().Any().Should().BeTrue();
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #10
0
        public async Task Should_respond_with_rejected_if_test()
        {
            var harness = new InMemoryTestHarness {
                TestTimeout = TimeSpan.FromSeconds(3)
            };
            var consumer = harness.Consumer <SubmitOrderConsumer>();

            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();

                // use this for request/response scenarios
                var requestClient = await harness.ConnectRequestClient <SubmitOrderCommand>();

                var response = await requestClient.GetResponse <OrderSubmissionRejectedResponse>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    Customer = "TEST1234"
                });


                response.Message.OrderId.IsSameOrEqualTo(orderId);
                consumer.Consumed.Select <SubmitOrderCommand>().Any().Should().BeTrue();
                harness.Sent.Select <OrderSubmissionRejectedResponse>().Any().Should().BeTrue();
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_with_rejection_if_test_file()
        {
            // Arrange (Given)
            var harness  = new InMemoryTestHarness();
            var consumer = harness.Consumer <SubmitFileInfoConsumer>();

            await harness.Start();

            try
            {
                var fileId        = NewId.NextGuid();
                var requestClient = await harness.ConnectRequestClient <SubmitFileInfo>();

                // Act (When)
                var response = await requestClient.GetResponse <FileInfoSubmissionRejected>(new
                {
                    FileId = fileId,
                    InVar.Timestamp,
                    FileName = "TEST.file",
                    Folder   = "c:/folder/"
                });

                // Assert (Then)
                Assert.Equal <Guid>(response.Message.FileId, fileId);
                Assert.True(consumer.Consumed.Select <SubmitFileInfo>().Any());
                Assert.True(harness.Sent.Select <FileInfoSubmissionRejected>().Any());
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #12
0
        public async Task Should_consume_submit_order_commands()
        {
            var harness = new InMemoryTestHarness()
            {
                TestTimeout = TimeSpan.FromSeconds(5)
            };
            var consumer = harness.Consumer <SubmitOrderConsumer>();
            await harness.Start();

            try
            {
                var orderId       = NewId.NextGuid();
                var requestClient = await harness.ConnectRequestClient <ISubmitOrder>();

                await harness.InputQueueSendEndpoint.Send <ISubmitOrder>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = customerNumber
                });

                Assert.That(consumer.Consumed.Select <ISubmitOrder>().Any(), Is.True);
                Assert.That(harness.Sent.Select <OrderSubmissionAccepted>().Any(), Is.False);
                Assert.That(harness.Sent.Select <OrderSubmissionRejected>().Any(), Is.False);
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #13
0
        public async Task Should_publish_order_submitted_event()
        {
            var harness = new InMemoryTestHarness()
            {
            };
            var consumer = harness.Consumer <SubmitOrderConsumer>();
            await harness.Start();

            try
            {
                var orderId       = NewId.NextGuid();
                var requestClient = await harness.ConnectRequestClient <ISubmitOrder>();

                await harness.InputQueueSendEndpoint.Send <ISubmitOrder>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = customerNumber
                });

                Assert.That(harness.Published.Select <OrderSubmitted>().Any(), Is.True);
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_with_rejected_if_customer_is_test()
        {
            var harness = new InMemoryTestHarness();
            ConsumerTestHarness <SubmitOrderConsumer> consumer = harness.Consumer <SubmitOrderConsumer>();

            await harness.Start();

            try
            {
                Guid orderId = NewId.NextGuid();

                IRequestClient <SubmitOrder> requestClient = await harness.ConnectRequestClient <SubmitOrder>();

                Response <OrderSubmissionRejected> response = await requestClient.GetResponse <OrderSubmissionRejected>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "TEST12345"
                });

                // assert
                response.Message.OrderId.Should().Be(orderId);
                consumer.Consumed.Select <SubmitOrder>().Should().NotBeNullOrEmpty();
                harness.Sent.Select <OrderSubmissionRejected>().Should().NotBeNullOrEmpty();
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #15
0
        public async Task Should_respond_when_file_deleted()
        {
            // Arrange (Given)
            var harness = new InMemoryTestHarness();
            var fileHandlerStateMachine = new FileHandlerStateMachine();
            var saga = harness.StateMachineSaga <FileHandlerState, FileHandlerStateMachine>(fileHandlerStateMachine);

            await harness.Start();

            try
            {
                var fileId = NewId.NextGuid();

                await harness.Bus.Publish <FileInfoSubmitted>(new
                {
                    FileId    = fileId,
                    Timestamp = InVar.Timestamp,
                    FileName  = "filename.file",
                    Folder    = "c:/folder/"
                });

                Assert.True(saga.Created.Select(x => x.CorrelationId == fileId).Any());


                var instanceId = await saga.Exists(fileId, x => x.Submitted);

                Assert.NotNull(instanceId);

                var instance = saga.Sagas.Contains(instanceId.Value);

                await harness.Bus.Publish <FileDeletedFromOriginFolder>(new
                {
                    FileId   = fileId,
                    FileName = "filename.file",
                    Folder   = "c:/folder/"
                });

                instanceId = await saga.Exists(fileId, x => x.DeletedFromOriginFolder);

                var requestClient = await harness.ConnectRequestClient <CheckFileInfo>();

                var response = await requestClient.GetResponse <FileStatus>(new { FileId = fileId });

                Assert.Equal(response.Message.State, fileHandlerStateMachine.DeletedFromOriginFolder.Name);
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_to_status_check_requested_event()
        {
            var harness = new InMemoryTestHarness {
                TestTimeout = TimeSpan.FromSeconds(3)
            };
            var orderStateMachine = new OrderStateMachine();
            var orderSaga         = harness.StateMachineSaga <OrderState, OrderStateMachine>(orderStateMachine);

            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();
                await harness.Bus.Publish <OrderSubmittedEvent>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "1234"
                });

                orderSaga.Created
                .Select(s => s.CorrelationId == orderId)
                .Any()
                .Should().BeTrue();

                var instanceId = await orderSaga.Exists(orderId, s => s.Submitted);

                instanceId.Should().NotBeNull();

                var requestClient = await harness.ConnectRequestClient <CheckOrderRequestedEvent>();

                var response = await requestClient.GetResponse <OrderStatusResponse>(new
                {
                    OrderId = orderId
                });

                orderSaga.Consumed.Select <CheckOrderRequestedEvent>().Any().Should().BeTrue();
                response.Message.State.Should().Be(orderStateMachine.Submitted.Name);
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_to_status_check()
        {
            var harness = new InMemoryTestHarness()
            {
                TestTimeout = TimeSpan.FromSeconds(1)
            };
            var orderStateMachine = new OrderStateMachine();
            var saga = harness.StateMachineSaga <OrderState, OrderStateMachine>(orderStateMachine);

            await harness.Start();

            var orderId        = NewId.NextGuid();
            var customerNumber = "1234";

            try
            {
                // 아래는 "없는 걸" 테스트 하므로, Timeout 문제 발생함. 따라서 test harness에 timeout 을 주었다.
                Assert.That(saga.Created.Select(x => x.CorrelationId == orderId).Any(), Is.False);

                await harness.Bus.Publish <OrderSubmitted>(new
                {
                    OrderId        = orderId,
                    Timestamp      = InVar.Timestamp,
                    CustomerNumber = customerNumber
                });

                Assert.That(saga.Created.Select(x => x.CorrelationId == orderId).Any(), Is.True);

                var requestClient = await harness.ConnectRequestClient <CheckOrder>();

                var response = await requestClient.GetResponse <OrderStatus>(new
                {
                    OrderId = orderId
                });

                Assert.That(response.Message.State, Is.EqualTo(orderStateMachine.Submitted.Name));
            }
            finally
            {
                await harness.Stop();
            }
        }
        public async Task Should_respond_to_status_checks()
        {
            var harness           = new InMemoryTestHarness();
            var orderStateMachine = new OrderStateMachine();
            StateMachineSagaTestHarness <OrderState, OrderStateMachine> saga = harness.StateMachineSaga <OrderState, OrderStateMachine>(orderStateMachine);

            await harness.Start();

            try
            {
                Guid orderId = NewId.NextGuid();

                await harness.Bus.Publish <OrderSubmitted>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "12345"
                });

                Guid?instanceId = await saga.Exists(orderId, x => x.Submitted);

                instanceId.Should().Be(orderId);

                var requestClient = await harness.ConnectRequestClient <CheckOrder>();

                var response = await requestClient.GetResponse <OrderStatus>(new
                {
                    OrderId = orderId
                });

                response.Message.State.Should().Be(orderStateMachine.Submitted.Name);
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #19
0
        public async Task Should_respond_to_status_checks()
        {
            var orderStateMachine = new OrderStateMachine();
            var harness           = new InMemoryTestHarness {
                TestTimeout = TimeSpan.FromSeconds(5)
            };
            var saga = harness.StateMachineSaga <OrderState, OrderStateMachine>(new OrderStateMachine());

            await harness.Start();

            try
            {
                var orderId = NewId.NextGuid();

                await harness.Bus.Publish <OrderSubmitted>(new
                {
                    OrderId = orderId,
                    InVar.Timestamp,
                    CustomerNumber = "123456"
                });


                var instance = saga.Created.Contains(orderId);
                await saga.Exists(orderId, x => x.Submitted); //race condtion wait for state change

                var requestClient = await harness.ConnectRequestClient <CheckOrder>();

                var response = await requestClient.GetResponse <OrderStatus>(new { OrderId = orderId });

                Assert.Equal(orderStateMachine.Submitted.Name, response.Message.State);
            }
            finally
            {
                await harness.Stop();
            }
        }
Пример #20
0
        public async Task Should_respond_to_status_checks()
        {
            // Arrange (Given)
            var harness = new InMemoryTestHarness();
            var fileHandlerStateMachine = new FileHandlerStateMachine();
            var saga = harness.StateMachineSaga <FileHandlerState, FileHandlerStateMachine>(fileHandlerStateMachine);

            await harness.Start();

            try
            {
                var fileId = NewId.NextGuid();

                await harness.Bus.Publish <FileInfoSubmitted>(new
                {
                    FileId    = fileId,
                    Timestamp = InVar.Timestamp,
                    FileName  = "filename.file",
                    Folder    = "c:/folder/"
                });

                var instanceID = await saga.Exists(fileId, x => x.Submitted);

                var instance = saga.Sagas.Contains(instanceID.Value);

                var requestClient = await harness.ConnectRequestClient <CheckFileInfo>();

                var response = await requestClient.GetResponse <FileStatus>(new { FileId = fileId });

                Assert.Equal(response.Message.State, fileHandlerStateMachine.Submitted.Name);
            }
            finally
            {
                await harness.Stop();
            }
        }