// ReSharper disable once UnusedParameter.Local
        private void AssertIfStatusOfOutMessageIs(string expectedId, OutStatus expectedStatus)
        {
            OutMessage outMessage = _databaseSpy.GetOutMessageFor(m => m.EbmsMessageId == expectedId);

            Assert.NotNull(outMessage);
            Assert.Equal(expectedStatus, outMessage.Status.ToEnum <OutStatus>());
        }
Esempio n. 2
0
        private async Task CorrectHandlingOnSynchronouslyReceivedMultiHopReceipt(
            bool actAsIntermediaryMsh,
            string receivePModeId,
            OutStatus expectedOutStatus,
            Operation expectedSignalOperation)
        {
            // Arrange
            SendingProcessingMode pmode             = CreateMultihopPMode(StubListenLocation);
            UserMessage           simpleUserMessage = CreateMultihopUserMessage(receivePModeId, pmode);

            AS4Message as4Message = AS4Message.Create(simpleUserMessage, pmode);

            var signal     = new ManualResetEvent(false);
            var serializer = new SoapEnvelopeSerializer();

            StubHttpServer.StartServer(
                StubListenLocation,
                res =>
            {
                res.StatusCode  = 200;
                res.ContentType = Constants.ContentTypes.Soap;

                var receipt = Receipt.CreateFor(
                    $"receipt-{Guid.NewGuid()}",
                    as4Message.FirstUserMessage,
                    userMessageSendViaMultiHop: true);

                serializer.Serialize(AS4Message.Create(receipt), res.OutputStream);
            },
                signal);

            // Act
            PutMessageToSend(as4Message, pmode, actAsIntermediaryMsh);

            // Assert
            signal.WaitOne();

            OutMessage sentMessage = await PollUntilPresent(
                () => _databaseSpy.GetOutMessageFor(m => m.EbmsMessageId == simpleUserMessage.MessageId),
                timeout : TimeSpan.FromSeconds(10));

            Assert.Equal(expectedOutStatus, sentMessage.Status.ToEnum <OutStatus>());

            InMessage receivedMessage = await PollUntilPresent(
                () => _databaseSpy.GetInMessageFor(m => m.EbmsRefToMessageId == simpleUserMessage.MessageId),
                timeout : TimeSpan.FromSeconds(10));

            Assert.Equal(MessageType.Receipt, receivedMessage.EbmsMessageType);
            Assert.Equal(expectedSignalOperation, receivedMessage.Operation);
        }
Esempio n. 3
0
        private void InsertOutMessageInDatastoreWith(Operation operation, OutStatus status)
        {
            using (var context = GetDataStoreContext())
            {
                var expectedMessage = new OutMessage("message-id")
                {
                    MessageLocation = "ignored location"
                };

                expectedMessage.SetStatus(status);
                expectedMessage.Operation = operation;

                context.OutMessages.Add(expectedMessage);
                context.SaveChanges();
            }
        }
Esempio n. 4
0
        private async Task <HttpResponseMessage> PiggyBacked_PullRequest_With_Bundled_Signal(
            Func <string, SignalMessage> createSignal,
            OutStatus expStatus)
        {
            // Arrange
            OverridePullAuthorizationMap(
                @".\config\componenttest-settings\security\pull_authorizationmap_allowed_facts.xml");

            string userMessageId = $"user-{Guid.NewGuid()}";

            StoreToBeAckOutMessage(userMessageId, CreateSendingPMode());

            AS4Message    pullRequest        = CreateAllowedPullRequest();
            SignalMessage extraSignalMessage = createSignal(userMessageId);

            pullRequest.AddMessageUnit(extraSignalMessage);

            AS4Message signedBundled = SignAS4MessageWithPullRequestCert(pullRequest);

            // Act
            HttpResponseMessage response = await StubSender.SendAS4Message(PullSendUrl, signedBundled);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            OutMessage storedUserMesage =
                _databaseSpy.GetOutMessageFor(m => m.EbmsMessageId == userMessageId);

            Assert.Equal(expStatus, storedUserMesage.Status.ToEnum <OutStatus>());

            InMessage storedSignalMessage =
                _databaseSpy.GetInMessageFor(m => m.EbmsMessageId == extraSignalMessage.MessageId);

            Assert.Equal(InStatus.Received, storedSignalMessage.Status.ToEnum <InStatus>());

            return(response);
        }
Esempio n. 5
0
        /// <summary>
        /// Prepare an <see cref="OutMessage"/> to be picked or stored by a Sending operation.
        /// </summary>
        /// <param name="location"></param>
        /// <param name="status"></param>
        /// <param name="operation"></param>
        /// <returns></returns>
        public OutMessage BuildForSending(string location, OutStatus status, Operation operation)
        {
            if (String.IsNullOrWhiteSpace(location))
            {
                throw new ArgumentException(@"Value cannot be null or whitespace.", nameof(location));
            }

            OutMessage outMessage = Build();

            if (_pmode is SendingProcessingMode sp)
            {
                outMessage.Url = sp.PushConfiguration?.Protocol?.Url;
            }
            else if (_pmode is ReceivingProcessingMode rp)
            {
                outMessage.Url = rp.ReplyHandling?.ResponseConfiguration?.Protocol?.Url;
            }

            outMessage.MessageLocation = location;
            outMessage.SetStatus(status);
            outMessage.Operation = operation;

            return(outMessage);
        }
Esempio n. 6
0
 private void DisplayMessage(String message, params Object[] args)
 {
     OutStatus.AppendText(String.Format(message, args) + "\r\n");
 }
Esempio n. 7
0
 private void UpdateReferencedUserMessagesStatus(IEnumerable <SignalMessage> signalMessages, OutStatus outStatus)
 {
     string[] refToMessageIds = signalMessages.Select(r => r.RefToMessageId).Where(id => !String.IsNullOrEmpty(id)).ToArray();
     if (refToMessageIds.Any())
     {
         _repository.UpdateOutMessages(
             m => refToMessageIds.Contains(m.EbmsMessageId) && m.Intermediary == false,
             m =>
         {
             m.SetStatus(outStatus);
             Logger.Debug($"Update OutMessage UserMessage {m.EbmsMessageId} with Status={outStatus}");
         });
     }
 }
Esempio n. 8
0
 public void SetStatus(OutStatus status)
 {
     Status = status.ToString();
 }