From ca111f954b6ed5eb60ad90d48f6e9e88149fe46d Mon Sep 17 00:00:00 2001 From: Giovanni Giannola Date: Tue, 9 Jun 2026 16:35:07 -0400 Subject: [PATCH 1/2] Fix #309: make channelName available in Postprocessor script The Postprocessor scope derives channelName from message.getMergedConnectorMessage().getChannelName(), but Message.getMergedConnectorMessage() never populated channelName on the merged ConnectorMessage. As a result the channelName variable was null in Postprocessor scripts, even though it is available in Deploy, Undeploy, and Preprocessor scripts. Populate channelName on the merged connector message from the Message's own channelName, falling back to the source connector message's channelName (which is reliably set during processing). Adds MessageTest covering the three cases. Signed-off-by: Giovanni Giannola --- .../connect/donkey/model/message/Message.java | 4 + .../connect/donkey/test/MessageTest.java | 91 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java diff --git a/donkey/src/main/java/com/mirth/connect/donkey/model/message/Message.java b/donkey/src/main/java/com/mirth/connect/donkey/model/message/Message.java index ffac777dbb..63293d21c7 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/model/message/Message.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/model/message/Message.java @@ -117,6 +117,7 @@ public ConnectorMessage getMergedConnectorMessage() { if (mergedConnectorMessage == null) { mergedConnectorMessage = new ConnectorMessage(); mergedConnectorMessage.setChannelId(channelId); + mergedConnectorMessage.setChannelName(channelName); mergedConnectorMessage.setMessageId(messageId); mergedConnectorMessage.setServerId(serverId); mergedConnectorMessage.setReceivedDate(receivedDate); @@ -128,6 +129,9 @@ public ConnectorMessage getMergedConnectorMessage() { ConnectorMessage sourceConnectorMessage = connectorMessages.get(0); if (sourceConnectorMessage != null) { + if (mergedConnectorMessage.getChannelName() == null) { + mergedConnectorMessage.setChannelName(sourceConnectorMessage.getChannelName()); + } mergedConnectorMessage.setRaw(sourceConnectorMessage.getRaw()); mergedConnectorMessage.setProcessedRaw(sourceConnectorMessage.getProcessedRaw()); sourceMap = sourceConnectorMessage.getSourceMap(); diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java new file mode 100644 index 0000000000..f9d62b9642 --- /dev/null +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) Mirth Corporation. All rights reserved. + * + * http://www.mirthcorp.com + * + * The software in this package is published under the terms of the MPL license a copy of which has + * been included with this distribution in the LICENSE.txt file. + */ + +package com.mirth.connect.donkey.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.Calendar; + +import org.junit.Test; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Message; +import com.mirth.connect.donkey.model.message.Status; + +public class MessageTest { + + private static final String CHANNEL_ID = "test-channel-id"; + private static final String CHANNEL_NAME = "Test Channel"; + private static final String SERVER_ID = "test-server-id"; + private static final long MESSAGE_ID = 1L; + + /** + * Regression test for issue #309: the channelName variable was not available in the + * Postprocessor script because the merged connector message (used to build the postprocessor + * scope) never had its channelName populated. + */ + @Test + public void mergedConnectorMessageInheritsChannelNameFromSourceConnectorMessage() { + Calendar receivedDate = Calendar.getInstance(); + + Message message = new Message(); + message.setMessageId(MESSAGE_ID); + message.setChannelId(CHANNEL_ID); + message.setServerId(SERVER_ID); + message.setReceivedDate(receivedDate); + + ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, CHANNEL_NAME, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED); + message.getConnectorMessages().put(0, sourceConnectorMessage); + + assertEquals(CHANNEL_NAME, message.getMergedConnectorMessage().getChannelName()); + } + + /** + * When the Message itself carries a channelName, it should be propagated to the merged + * connector message even if (theoretically) the source connector message did not have one. + */ + @Test + public void mergedConnectorMessageUsesMessageChannelNameWhenSet() { + Calendar receivedDate = Calendar.getInstance(); + + Message message = new Message(); + message.setMessageId(MESSAGE_ID); + message.setChannelId(CHANNEL_ID); + message.setChannelName(CHANNEL_NAME); + message.setServerId(SERVER_ID); + message.setReceivedDate(receivedDate); + + ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, null, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED); + message.getConnectorMessages().put(0, sourceConnectorMessage); + + assertEquals(CHANNEL_NAME, message.getMergedConnectorMessage().getChannelName()); + } + + /** + * With no channel name available anywhere, the merged connector message channelName stays null + * (i.e. the fix does not fabricate a value). + */ + @Test + public void mergedConnectorMessageChannelNameNullWhenUnavailable() { + Calendar receivedDate = Calendar.getInstance(); + + Message message = new Message(); + message.setMessageId(MESSAGE_ID); + message.setChannelId(CHANNEL_ID); + message.setServerId(SERVER_ID); + message.setReceivedDate(receivedDate); + + ConnectorMessage sourceConnectorMessage = new ConnectorMessage(CHANNEL_ID, null, MESSAGE_ID, 0, SERVER_ID, receivedDate, Status.RECEIVED); + message.getConnectorMessages().put(0, sourceConnectorMessage); + + assertNull(message.getMergedConnectorMessage().getChannelName()); + } +} From c556c597ce33492d878ade4d548e5e8beeb5cc6a Mon Sep 17 00:00:00 2001 From: Giovanni Giannola Date: Wed, 29 Jul 2026 13:44:12 -0400 Subject: [PATCH 2/2] Use SPDX license header on new test file New files in this project use SPDX headers attributing copyright to the contributor, rather than the legacy Mirth Corporation header carried by pre-fork files. Signed-off-by: Giovanni Giannola --- .../com/mirth/connect/donkey/test/MessageTest.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java index f9d62b9642..ac05e102d0 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageTest.java @@ -1,11 +1,5 @@ -/* - * Copyright (c) Mirth Corporation. All rights reserved. - * - * http://www.mirthcorp.com - * - * The software in this package is published under the terms of the MPL license a copy of which has - * been included with this distribution in the LICENSE.txt file. - */ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Giovanni Giannola package com.mirth.connect.donkey.test;