public void ThenGetOutMessageSucceeded() { // Arrange const string ebmsMessageId = "message-id"; const Operation expected = Operation.Delivered; InsertOutMessage(ebmsMessageId, expected); using (DatastoreContext context = GetDataStoreContext()) { var repository = new DatastoreRepository(context); // Act Operation actual = repository.GetOutMessageData(@where: m => m.EbmsMessageId == ebmsMessageId, selection: m => m.Operation) .SingleOrDefault(); // Assert Assert.Equal(expected, actual); } }
private SendingProcessingMode RetrieveSendingPModeForMessageWithEbmsMessageId(string ebmsMessageId) { if (ebmsMessageId == null) { Logger.Debug("Can't retrieve SendingPMode because NotifyMessage.MessageInfo.RefToMessageId is not present"); return(null); } using (DatastoreContext context = _createContext()) { var repository = new DatastoreRepository(context); var outMessageData = repository.GetOutMessageData( where : m => m.EbmsMessageId == ebmsMessageId && m.Intermediary == false, selection: m => new { m.PMode, m.ModificationTime }) .OrderByDescending(m => m.ModificationTime) .FirstOrDefault(); if (outMessageData == null) { Logger.Debug( "Can't retrieve SendingPMode because no matching stored OutMessage found " + $"for EbmsMessageId = {ebmsMessageId} AND Intermediary = false"); return(null); } var pmode = AS4XmlSerializer.FromString <SendingProcessingMode>(outMessageData.PMode); if (pmode == null) { Logger.Debug( "Can't use SendingPMode from matching OutMessage for NotifyMessage.MessageInfo.RefToMessageId " + $"{ebmsMessageId} because the PMode field can't be deserialized correctly to a SendingPMode"); } return(pmode); } }
private async Task <SendPMode> DetermineSendingPModeForSignalMessageAsync(AS4Message as4Message) { var firstNonPrSignalMessage = as4Message.SignalMessages.First(s => !(s is Model.Core.PullRequest)); async Task <SendPMode> SelectSendingPModeBasedOnSendUserMessage() { if (String.IsNullOrWhiteSpace(firstNonPrSignalMessage.RefToMessageId)) { Logger.Warn( $"Cannot determine SendingPMode for received {firstNonPrSignalMessage.GetType().Name} SignalMessage " + "because it doesn't contain a RefToMessageId to link a UserMessage from which the SendingPMode needs to be selected"); return(null); } using (DatastoreContext dbContext = _createContext()) { var repository = new DatastoreRepository(dbContext); // We must take into account that it is possible that we have an OutMessage that has // been forwarded; in that case, we must not retrieve the sending - pmode since we // will have to forward the signal message. var referenced = repository.GetOutMessageData( where : m => m.EbmsMessageId == firstNonPrSignalMessage.RefToMessageId && m.Intermediary == false, selection: m => new { m.PMode, m.ModificationTime }) .OrderByDescending(m => m.ModificationTime) .FirstOrDefault(); if (referenced == null) { Logger.Warn($"No referenced UserMessage record found for SignalMessage {firstNonPrSignalMessage.MessageId}"); return(null); } string pmodeString = referenced?.PMode; if (String.IsNullOrWhiteSpace(pmodeString)) { Logger.Warn($"No SendingPMode found in stored referenced UserMessage record for SignalMessage {firstNonPrSignalMessage.MessageId}"); return(null); } return(await AS4XmlSerializer.FromStringAsync <SendPMode>(pmodeString)); } } SendPMode pmode = await SelectSendingPModeBasedOnSendUserMessage(); if (pmode != null) { Logger.Debug($"Determined SendingPMode {pmode.Id} for received SignalMessages"); return(pmode); } if (as4Message.IsMultiHopMessage == false) { throw new InvalidOperationException( "Cannot determine SendingPMode for incoming SignalMessage because no " + $"referenced UserMessage {firstNonPrSignalMessage.RefToMessageId} was found on this MSH"); } return(null); }