private Property TestReturnsExpectedWithHttpStatusCode(HttpStatusCode st, Func <HttpSender, SendResult> act)
        {
            // Arrange
            StubHttpClient client = StubHttpClient.ThatReturns(st);
            var            sut    = new HttpSender(client);

            sut.Configure(new LocationMethod("ignored location"));

            // Act
            SendResult r = act(sut);

            // Assert
            var  code        = (int)st;
            bool isFatal     = r == SendResult.FatalFail;
            bool isRetryable = r == SendResult.RetryableFail;
            bool isSuccess   = r == SendResult.Success;

            Assert.True(client.IsCalled, "Stub HTTP client isn't called");
            return(isRetryable
                   .Equals(code >= 500 || code == 408 || code == 429)
                   .Or(isSuccess.Equals(code >= 200 && code <= 206))
                   .Or(isFatal.Equals(code >= 400 && code < 500))
                   .Classify(isSuccess, "Success with code: " + code)
                   .Classify(isRetryable, "Retryable with code: " + code)
                   .Classify(isFatal, "Fatal with code: " + code));
        }
Пример #2
0
        public async Task Send_Returns_Empty_Response_For_Empty_Request_For_Response_SendPMode()
        {
            // Arrange
            IStep sut = CreateSendStepWithResponse(
                StubHttpClient.ThatReturns(HttpStatusCode.Accepted));

            MessagingContext ctx = CreateMessagingContextWithDefaultPullRequest();

            ctx.SendingPMode = CreateSendPModeWithPushUrl();

            // Act
            StepResult actualResult = await sut.ExecuteAsync(ctx);

            // Assert
            Assert.True(actualResult.MessagingContext.AS4Message.IsEmpty);
            Assert.False(actualResult.CanProceed);
        }
Пример #3
0
        public async Task Send_Results_In_Stop_Execution_If_Response_Is_PullRequest_Warning_For_Exsisting_SendPMode()
        {
            // Arrange
            AS4Message as4Message = AS4Message.Create(Error.CreatePullRequestWarning($"error-{Guid.NewGuid()}"));
            IStep      sut        = CreateSendStepWithResponse(
                StubHttpClient.ThatReturns(as4Message));

            MessagingContext ctx = CreateMessagingContextWithDefaultPullRequest();

            ctx.SendingPMode = CreateSendPModeWithPushUrl();

            // Act
            StepResult actualResult = await sut.ExecuteAsync(ctx);

            // Assert
            Assert.False(actualResult.CanProceed);
        }
Пример #4
0
        public async Task Use_ReceivingPMode_When_No_SendingPMode_Is_Available()
        {
            // Arrange
            var userMessage = new UserMessage($"user-{Guid.NewGuid()}");
            var message     = AS4Message.Create(userMessage);

            var output = new MemoryStream();
            await SerializerProvider
            .Default
            .Get(message.ContentType)
            .SerializeAsync(message, output);

            var ctx = new MessagingContext(
                message,
                new ReceivedMessage(output, message.ContentType),
                MessagingContextMode.Send)
            {
                ReceivingPMode = new ReceivingProcessingMode
                {
                    ReplyHandling =
                    {
                        ResponseConfiguration = new PushConfiguration
                        {
                            Protocol          ={ Url = "http://some/endpoint/path" }
                        }
                    }
                }
            };

            var receipt = new Receipt($"receipt-{Guid.NewGuid()}", userMessage.MessageId);
            var stub    = StubHttpClient.ThatReturns(AS4Message.Create(receipt));

            IStep sut = CreateSendStepWithResponse(stub);

            // Act
            StepResult result = await sut.ExecuteAsync(ctx);

            // Assert
            Assert.True(result.Succeeded, "Sending UserMessage step has not succeeded");
            Assert.Equal(receipt, result.MessagingContext.AS4Message.PrimaryMessageUnit);

            // TearDown
            ctx.Dispose();
        }
Пример #5
0
        public async Task After_Send_Updates_Request_Operation_And_Status_To_Sent_For_Exsiting_SendPMode()
        {
            // Arrange
            string     ebmsMessageId = $"user-{Guid.NewGuid()}";
            AS4Message tobeSentMsg   = AS4Message.Create(new FilledUserMessage(ebmsMessageId));

            var inserted = new OutMessage(ebmsMessageId: ebmsMessageId);

            GetDataStoreContext.InsertOutMessage(inserted);

            var receivedMessage = new ReceivedEntityMessage(
                inserted,
                tobeSentMsg.ToStream(),
                tobeSentMsg.ContentType);

            var ctx = new MessagingContext(
                tobeSentMsg,
                receivedMessage,
                MessagingContextMode.Send)
            {
                SendingPMode = CreateSendPModeWithPushUrl()
            };

            AS4Message receiptMessage =
                AS4Message.Create(new Receipt($"receipt-{Guid.NewGuid()}", $"user-{Guid.NewGuid()}"));

            // Act
            IStep sut = CreateSendStepWithResponse(
                StubHttpClient.ThatReturns(receiptMessage));

            await sut.ExecuteAsync(ctx);

            // Assert
            GetDataStoreContext.AssertOutMessage(
                ebmsMessageId,
                message =>
            {
                Assert.Equal(OutStatus.Sent, message.Status.ToEnum <OutStatus>());
                Assert.Equal(Operation.Sent, message.Operation);
            });
        }