From 179d4356c2d59e73a270a7085021686600ab2812 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 18:48:01 -0500 Subject: [PATCH 01/28] Fix oracle storage failure A historical change set did not use the closeDatabaseObjectIfNeeded method which permits the oracle connections to batch inserts. Updated to use that. Non-oracle databases are not affected by this change since they do not override the closeDatabaseObjectIfNeeded method. Closes 454 Signed-off-by: Mitch Gaffigan --- ci/README.md | 1 + .../messages/01-hello-world/source_encoded | 1 + .../donkey/server/data/jdbc/JdbcDao.java | 27 ++++- .../server/data/jdbc/OracleJdbcDaoTest.java | 108 ++++++++++++++++++ .../smoketest/MessageAssertions.java | 2 + 5 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 ci/tests/101-raw-no-op/channels/01-raw-no-op/messages/01-hello-world/source_encoded create mode 100644 donkey/src/test/java/com/mirth/connect/donkey/server/data/jdbc/OracleJdbcDaoTest.java diff --git a/ci/README.md b/ci/README.md index 660f4c6af0..c9605360a5 100644 --- a/ci/README.md +++ b/ci/README.md @@ -44,6 +44,7 @@ the payload sent to the channel. The other files are optional assertions: | `source_status` | Source status | | `source_response` | Source response payload | | `source_transformed` | Transformed source payload | +| `source_encoded` | Encoded source payload | | `destNN` | Sent payload for destination `NN` | | `destNN_transformed` | Transformed payload for destination `NN` | | `destNN_response` | Response payload from destination `NN` | diff --git a/ci/tests/101-raw-no-op/channels/01-raw-no-op/messages/01-hello-world/source_encoded b/ci/tests/101-raw-no-op/channels/01-raw-no-op/messages/01-hello-world/source_encoded new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/101-raw-no-op/channels/01-raw-no-op/messages/01-hello-world/source_encoded @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java index a22f8fb1a1..0a08874df3 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java @@ -208,6 +208,12 @@ public void insertMessageContent(MessageContent messageContent) { insertContent(messageContent.getChannelId(), messageContent.getMessageId(), messageContent.getMetaDataId(), messageContent.getContentType(), messageContent.getContent(), messageContent.getDataType(), messageContent.isEncrypted()); } + /* + * The statement is deliberately left open here. It is the cached statement that holds the + * accumulated batch, so closing it would discard every addBatch() made so far; + * executeBatchInsertMessageContent() runs the batch and closes the statement if the + * subclass needs that. + */ @Override public void batchInsertMessageContent(MessageContent messageContent) { logger.debug(messageContent.getChannelId() + "/" + messageContent.getMessageId() + "/" + messageContent.getMetaDataId() + ": batch inserting message content (" + messageContent.getContentType().toString() + ")"); @@ -237,9 +243,9 @@ public void batchInsertMessageContent(MessageContent messageContent) { statement.addBatch(); statement.clearParameters(); } catch (SQLException e) { + // The batch will never be executed now, so do not leave it for the next message. + clearBatchQuietly(statement); throw new DonkeyDaoException(e); - } finally { - closeDatabaseObjectIfNeeded(statement); } } @@ -258,14 +264,29 @@ public void executeBatchInsertMessageContent(String channelId) { */ statement = prepareStatement("batchInsertMessageContent", channelId); statement.executeBatch(); - statement.clearBatch(); } catch (SQLException e) { throw new DonkeyDaoException(e); } finally { + clearBatchQuietly(statement); closeDatabaseObjectIfNeeded(statement); } } + /** + * Empties a cached statement's batch without letting the cleanup itself fail. The statement + * outlives the DAO in the prepared statement cache, so anything left on its batch would be + * executed along with the next message's rows. + */ + private void clearBatchQuietly(Statement statement) { + if (statement != null) { + try { + statement.clearBatch(); + } catch (SQLException e) { + logger.debug("Failed to clear batch", e); + } + } + } + @Override public void storeMessageContent(MessageContent messageContent) { logger.debug(messageContent.getChannelId() + "/" + messageContent.getMessageId() + "/" + messageContent.getMetaDataId() + ": updating message content (" + messageContent.getContentType().toString() + ")"); diff --git a/donkey/src/test/java/com/mirth/connect/donkey/server/data/jdbc/OracleJdbcDaoTest.java b/donkey/src/test/java/com/mirth/connect/donkey/server/data/jdbc/OracleJdbcDaoTest.java new file mode 100644 index 0000000000..fd9cc28934 --- /dev/null +++ b/donkey/src/test/java/com/mirth/connect/donkey/server/data/jdbc/OracleJdbcDaoTest.java @@ -0,0 +1,108 @@ +/* + * 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.server.data.jdbc; + +import static org.mockito.ArgumentMatchers.eq; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; + +import com.mirth.connect.donkey.model.message.ContentType; +import com.mirth.connect.donkey.model.message.MessageContent; +import com.mirth.connect.donkey.server.Donkey; +import com.mirth.connect.donkey.server.channel.Statistics; +import com.mirth.connect.donkey.server.data.DonkeyDaoException; +import com.mirth.connect.donkey.server.data.StatisticsUpdater; +import com.mirth.connect.donkey.util.SerializerProvider; + +/** + * Oracle is the only DAO that actually closes statements, so it is the only one where closing + * the wrong statement at the wrong time is observable. + */ +public class OracleJdbcDaoTest { + + private static final String CHANNEL_ID = "abc"; + + private OracleJdbcDao dao; + private PreparedStatement statement; + + @Before + public void before() throws SQLException { + Donkey donkey = mock(Donkey.class); + Connection connection = mock(Connection.class); + QuerySource querySource = mock(QuerySource.class); + PreparedStatementSource statementSource = mock(PreparedStatementSource.class); + SerializerProvider serializerProvider = mock(SerializerProvider.class); + StatisticsUpdater statisticsUpdater = mock(StatisticsUpdater.class); + Statistics currentStats = mock(Statistics.class); + Statistics totalStats = mock(Statistics.class); + + dao = spy(new OracleJdbcDao(donkey, connection, querySource, statementSource, serializerProvider, false, false, false, false, statisticsUpdater, currentStats, totalStats, "")); + + statement = mock(PreparedStatement.class); + doReturn(statement).when(dao).prepareStatement(eq("batchInsertMessageContent"), eq(CHANNEL_ID)); + } + + /** + * The batch lives on the cached statement, so the statement has to survive every + * batchInsertMessageContent() call and only be closed once the batch has been executed. + * Closing it earlier silently discarded the source content on Oracle. + */ + @Test + public void testBatchInsertMessageContentKeepsStatementOpenUntilExecuted() throws SQLException { + dao.batchInsertMessageContent(content(ContentType.PROCESSED_RAW, "processed raw")); + dao.batchInsertMessageContent(content(ContentType.TRANSFORMED, "transformed")); + dao.batchInsertMessageContent(content(ContentType.ENCODED, "encoded")); + + verify(statement, times(3)).addBatch(); + verify(statement, never()).close(); + + dao.executeBatchInsertMessageContent(CHANNEL_ID); + + InOrder inOrder = inOrder(statement); + inOrder.verify(statement, times(3)).addBatch(); + inOrder.verify(statement).executeBatch(); + inOrder.verify(statement).clearBatch(); + inOrder.verify(statement).close(); + } + + /** A failed batch must not be left behind for the next message to execute. */ + @Test + public void testFailedBatchInsertClearsTheBatch() throws SQLException { + doThrow(new SQLException("no")).when(statement).addBatch(); + + try { + dao.batchInsertMessageContent(content(ContentType.ENCODED, "encoded")); + fail("Expected a DonkeyDaoException"); + } catch (DonkeyDaoException e) { + // expected + } + + verify(statement).clearBatch(); + } + + private static MessageContent content(ContentType contentType, String content) { + return new MessageContent(CHANNEL_ID, 1L, 0, contentType, content, "RAW", false); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index f9849435ae..f2844f2ac6 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -55,6 +55,8 @@ static void assertFixtureFile(Message message, String fileName, String content) connector(message, SOURCE_META_DATA_ID, fileName).getStatus()); case "source_transformed" -> assertContent("source transformed", content, content(connector(message, SOURCE_META_DATA_ID, fileName).getTransformed())); + case "source_encoded" -> assertContent("source encoded", content, + content(connector(message, SOURCE_META_DATA_ID, fileName).getEncoded())); case "source_response" -> assertResponse("source response", content, connector(message, SOURCE_META_DATA_ID, fileName)); case "source_metadata.yml" -> assertMetadata("source_metadata.yml", parseYamlMap(content), From e144295d1442f0aec5fb9401c69917bcd54ecf31 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 12:44:23 -0500 Subject: [PATCH 02/28] Restore some of disabled *Tests Signed-off-by: Mitch Gaffigan --- .../connect/model/converters/TestUtil.java | 5 ++ ...lizerTests.java => HL7SerializerTest.java} | 79 +++++++------------ ...sts.java => PasswordRequirementsTest.java} | 2 +- ...sts.java => Pre22PasswordCheckerTest.java} | 2 +- ...ts.java => TemplateValueReplacerTest.java} | 2 +- ...lacerTests.java => ValueReplacerTest.java} | 2 +- 6 files changed, 38 insertions(+), 54 deletions(-) rename server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/{HL7SerializerTests.java => HL7SerializerTest.java} (70%) rename server/src/test/java/com/mirth/connect/server/util/{PasswordRequirementsTests.java => PasswordRequirementsTest.java} (97%) rename server/src/test/java/com/mirth/connect/server/util/{Pre22PasswordCheckerTests.java => Pre22PasswordCheckerTest.java} (92%) rename server/src/test/java/com/mirth/connect/server/util/{TemplateValueReplacerTests.java => TemplateValueReplacerTest.java} (98%) rename server/src/test/java/com/mirth/connect/util/{ValueReplacerTests.java => ValueReplacerTest.java} (99%) diff --git a/server/src/test/java/com/mirth/connect/model/converters/TestUtil.java b/server/src/test/java/com/mirth/connect/model/converters/TestUtil.java index 405550a60f..214e74e7c1 100644 --- a/server/src/test/java/com/mirth/connect/model/converters/TestUtil.java +++ b/server/src/test/java/com/mirth/connect/model/converters/TestUtil.java @@ -49,6 +49,11 @@ public static String prettyPrintXml(String input) throws Exception { return writer.toString(); } + /** Line endings carry no meaning in pretty-printed XML, and the fixtures on disk are CRLF. */ + public static String normalizeLineEndings(String input) { + return input.replaceAll("\r\n|\r", "\n"); + } + public static String convertCRToCRLF(String input) { return input.replaceAll("\r", "\r\n"); } diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTest.java similarity index 70% rename from server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTests.java rename to server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTest.java index aae28422bb..46792bc61f 100644 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTests.java +++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7SerializerTest.java @@ -11,27 +11,19 @@ import java.io.File; -import junit.framework.Assert; - import org.apache.commons.io.FileUtils; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.mirth.connect.model.converters.TestUtil; -public class HL7SerializerTests { +public class HL7SerializerTest { private HL7v2DataTypeProperties defaultProperties; @Before public void setUp() throws Exception { - defaultProperties = new HL7v2DataTypeProperties(); - -// defaultProperties = new Properties(); -// defaultProperties.put("useStrictParser", "false"); -// defaultProperties.put("handleRepetitions", "false"); -// defaultProperties.put("handleSubcomponents", "false"); -// defaultProperties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// defaultProperties.put("outputSegmentDelimiter", "\\r"); + defaultProperties = properties(false, false); } @Test @@ -39,7 +31,7 @@ public void testToXmlDefault() throws Exception { String input = FileUtils.readFileToString(new File("tests/test-hl7-input.txt")); String output = FileUtils.readFileToString(new File("tests/test-hl7-output.xml")); ER7Serializer serializer = new ER7Serializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + assertXmlEquals(output, serializer.toXML(input)); } @Test @@ -55,7 +47,7 @@ public void testToXmlWhitepsace() throws Exception { String input = FileUtils.readFileToString(new File("tests/test-hl7-whitespace-input.txt")); String output = FileUtils.readFileToString(new File("tests/test-hl7-whitespace-output.xml")); ER7Serializer serializer = new ER7Serializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + assertXmlEquals(output, serializer.toXML(input)); } @Test @@ -97,12 +89,7 @@ public void testFromXmlMissingSubcomponents() throws Exception { @Test public void testFromXmlSingleSegment() throws Exception { - HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "false"); -// properties.put("handleSubcomponents", "true"); -// properties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// properties.put("outputSegmentDelimiter", "\\r"); + HL7v2DataTypeProperties properties = properties(false, true); String input = FileUtils.readFileToString(new File("tests/test-hl7-single-segment-input.xml")); String output = FileUtils.readFileToString(new File("tests/test-hl7-single-segment-output.txt")); @@ -120,29 +107,17 @@ public void testFromXmlSingleField() throws Exception { @Test public void testToXmlWithSubcomponents() throws Exception { - HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); -// Properties properties = new Properties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "false"); -// properties.put("handleSubcomponents", "true"); -// properties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// properties.put("outputSegmentDelimiter", "\\r"); + HL7v2DataTypeProperties properties = properties(false, true); String input = FileUtils.readFileToString(new File("tests/test-hl7-subcomponents-input.txt")); String output = FileUtils.readFileToString(new File("tests/test-hl7-subcomponents-output.xml")); ER7Serializer serializer = new ER7Serializer(properties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + assertXmlEquals(output, serializer.toXML(input)); } @Test public void testFromXmlWithSubcomponents() throws Exception { - HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); -// Properties properties = new Properties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "false"); -// properties.put("handleSubcomponents", "true"); -// properties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// properties.put("outputSegmentDelimiter", "\\r"); + HL7v2DataTypeProperties properties = properties(false, true); String input = FileUtils.readFileToString(new File("tests/test-hl7-subcomponents-output.xml")); String output = FileUtils.readFileToString(new File("tests/test-hl7-subcomponents-input.txt")); @@ -152,29 +127,17 @@ public void testFromXmlWithSubcomponents() throws Exception { @Test public void testToXmlWithRepetitions() throws Exception { - HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); -// Properties properties = new Properties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "true"); -// properties.put("handleSubcomponents", "false"); -// properties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// properties.put("outputSegmentDelimiter", "\\r"); + HL7v2DataTypeProperties properties = properties(true, false); String input = FileUtils.readFileToString(new File("tests/test-hl7-repetitions-input.txt")); String output = FileUtils.readFileToString(new File("tests/test-hl7-repetitions-output.xml")); ER7Serializer serializer = new ER7Serializer(properties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + assertXmlEquals(output, serializer.toXML(input)); } @Test public void testFromXmlWithRepetitions() throws Exception { - HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); -// Properties properties = new Properties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "true"); -// properties.put("handleSubcomponents", "false"); -// properties.put("inputSegmentDelimiter", "\\r\\n|\\r|\\n"); -// properties.put("outputSegmentDelimiter", "\\r"); + HL7v2DataTypeProperties properties = properties(true, false); String input = FileUtils.readFileToString(new File("tests/test-hl7-repetitions-output.xml")); String output = FileUtils.readFileToString(new File("tests/test-hl7-repetitions-input.txt")); @@ -187,7 +150,7 @@ public void testToXmlWithBatch() throws Exception { String input = FileUtils.readFileToString(new File("tests/test-hl7-batch-input.txt")); String output = FileUtils.readFileToString(new File("tests/test-hl7-batch-output.xml")); ER7Serializer serializer = new ER7Serializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + assertXmlEquals(output, serializer.toXML(input)); } @Test @@ -197,4 +160,20 @@ public void testFromXmlWithBatch() throws Exception { ER7Serializer serializer = new ER7Serializer(defaultProperties.getSerializerProperties()); Assert.assertEquals(output, TestUtil.convertCRToCRLF(serializer.fromXML(input))); } + + private static void assertXmlEquals(String expected, String actual) throws Exception { + Assert.assertEquals(TestUtil.normalizeLineEndings(expected), TestUtil.normalizeLineEndings(TestUtil.prettyPrintXml(actual))); + } + + /** + * The fixtures predate the typed property classes, which default both flags to true; the + * combination each test was written against survives only in its setup. + */ + private static HL7v2DataTypeProperties properties(boolean handleRepetitions, boolean handleSubcomponents) { + HL7v2DataTypeProperties properties = new HL7v2DataTypeProperties(); + HL7v2SerializationProperties serializationProperties = (HL7v2SerializationProperties) properties.getSerializationProperties(); + serializationProperties.setHandleRepetitions(handleRepetitions); + serializationProperties.setHandleSubcomponents(handleSubcomponents); + return properties; + } } diff --git a/server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTests.java b/server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTest.java similarity index 97% rename from server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTests.java rename to server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTest.java index e21b4a683e..66494fdd96 100644 --- a/server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTests.java +++ b/server/src/test/java/com/mirth/connect/server/util/PasswordRequirementsTest.java @@ -14,7 +14,7 @@ import com.mirth.connect.client.core.ControllerException; import com.mirth.connect.model.PasswordRequirements; -public class PasswordRequirementsTests extends TestCase { +public class PasswordRequirementsTest extends TestCase { protected void setUp() throws Exception { super.setUp(); diff --git a/server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTests.java b/server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTest.java similarity index 92% rename from server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTests.java rename to server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTest.java index 0d125317e8..90c2434941 100644 --- a/server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTests.java +++ b/server/src/test/java/com/mirth/connect/server/util/Pre22PasswordCheckerTest.java @@ -13,7 +13,7 @@ import org.junit.Test; -public class Pre22PasswordCheckerTests { +public class Pre22PasswordCheckerTest { @Test public void testCheckPassword() throws Exception { diff --git a/server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTests.java b/server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTest.java similarity index 98% rename from server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTests.java rename to server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTest.java index d763a136e8..3c45cb7f52 100644 --- a/server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTests.java +++ b/server/src/test/java/com/mirth/connect/server/util/TemplateValueReplacerTest.java @@ -19,7 +19,7 @@ import org.junit.Before; import org.junit.Test; -public class TemplateValueReplacerTests { +public class TemplateValueReplacerTest { private TemplateValueReplacer templateReplacer; diff --git a/server/src/test/java/com/mirth/connect/util/ValueReplacerTests.java b/server/src/test/java/com/mirth/connect/util/ValueReplacerTest.java similarity index 99% rename from server/src/test/java/com/mirth/connect/util/ValueReplacerTests.java rename to server/src/test/java/com/mirth/connect/util/ValueReplacerTest.java index 2acfadbbf6..1d7a79dc75 100644 --- a/server/src/test/java/com/mirth/connect/util/ValueReplacerTests.java +++ b/server/src/test/java/com/mirth/connect/util/ValueReplacerTest.java @@ -26,7 +26,7 @@ import com.mirth.connect.donkey.model.message.ConnectorMessage; -public class ValueReplacerTests { +public class ValueReplacerTest { private ValueReplacer replacer; private Map> map; private ConnectorMessage connectorMessage; From 58368f717e35c75206e0efe5cd1dcc5b79676444 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 17:07:05 -0500 Subject: [PATCH 03/28] Re-add EDISerializerTests using new fixtures Signed-off-by: Mitch Gaffigan --- .../datatypes/edi/EDISerializerTest.java | 34 +++ .../datatypes/edi/EDISerializerTests.java | 66 ----- .../test-1597-input-missing-elements.xml | 261 +++++++++++++++++ server/tests/test-1597-input.xml | 265 ++++++++++++++++++ server/tests/test-1597-output.txt | 16 ++ server/tests/test-edi-input.txt | 16 ++ server/tests/test-edi-output.xml | 265 ++++++++++++++++++ 7 files changed, 857 insertions(+), 66 deletions(-) delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTests.java create mode 100644 server/tests/test-1597-input-missing-elements.xml create mode 100644 server/tests/test-1597-input.xml create mode 100644 server/tests/test-1597-output.txt create mode 100644 server/tests/test-edi-input.txt create mode 100644 server/tests/test-edi-output.xml diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTest.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTest.java index 030158e228..7c1819a7e2 100644 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTest.java +++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTest.java @@ -4,11 +4,15 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.File; + +import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXParseException; import com.mirth.connect.donkey.model.message.MessageSerializerException; +import com.mirth.connect.model.converters.TestUtil; import com.mirth.connect.model.datatype.SerializerProperties; public class EDISerializerTest { @@ -41,6 +45,36 @@ public void testFromXMLWithExternalDtd() { assertTrue(exceptionCaught); } + @Test + public void testToXml() throws Exception { + assertXmlEquals(read("test-edi-output.xml"), serializer.toXML(read("test-edi-input.txt"))); + } + + @Test + public void testFromXml() throws Exception { + assertEquals(read("test-edi-input.txt"), serializer.fromXML(read("test-edi-output.xml"))); + } + + /** Issue 1597: the serializer fills in elements the XML leaves out. */ + @Test + public void testIssue1597fromXML() throws Exception { + assertEquals(read("test-1597-output.txt"), serializer.fromXML(read("test-1597-input-missing-elements.xml"))); + } + + @Test + public void testIssue1597toXML() throws Exception { + assertXmlEquals(read("test-1597-input.xml"), serializer.toXML(read("test-1597-output.txt"))); + } + + private static String read(String name) throws Exception { + return FileUtils.readFileToString(new File("tests/" + name), "UTF-8"); + } + + /** toXML returns one unindented line with an XML declaration; the fixtures are readable. */ + private static void assertXmlEquals(String expected, String actual) throws Exception { + assertEquals(TestUtil.normalizeLineEndings(expected), TestUtil.normalizeLineEndings(TestUtil.prettyPrintXml(actual))); + } + private static String validXml = "\r\n" + "bar"; diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTests.java deleted file mode 100644 index 3969ceaad8..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/EDISerializerTests.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.plugins.datatypes.edi; - -import java.io.File; - -import junit.framework.Assert; - -import org.apache.commons.io.FileUtils; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class EDISerializerTests { - @Before - public void setUp() throws Exception { - - } - - @After - public void tearDown() throws Exception { - - } - - @Test - public void testToXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-edi-input.txt"), "UTF-8"); - String output = FileUtils.readFileToString(new File("tests/test-edi-output.xml"), "UTF-8"); - EDISerializer serializer = new EDISerializer(new EDIDataTypeProperties().getSerializerProperties()); - Assert.assertEquals(output, serializer.toXML(input)); - } - - @Test - public void testFromXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-edi-output.xml"), "UTF-8"); - String output = FileUtils.readFileToString(new File("tests/test-edi-input.txt"), "UTF-8"); - EDISerializer serializer = new EDISerializer(new EDIDataTypeProperties().getSerializerProperties()); - Assert.assertEquals(output, serializer.fromXML(input)); - } - - /* - * Checks if serializer adds missing elements when going from XML to EDI/X12. - */ - @Test - public void testIssue1597fromXML() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-1597-input-missing-elements.xml"), "UTF-8"); - String output = FileUtils.readFileToString(new File("tests/test-1597-output.txt"), "UTF-8"); - EDISerializer serializer = new EDISerializer(new EDIDataTypeProperties().getSerializerProperties()); - Assert.assertEquals(output, serializer.fromXML(input)); - } - - @Test - public void testIssue1597toXML() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-1597-output.txt"), "UTF-8"); - String output = FileUtils.readFileToString(new File("tests/test-1597-input.xml"), "UTF-8"); - EDISerializer serializer = new EDISerializer(new EDIDataTypeProperties().getSerializerProperties()); - Assert.assertEquals(output, serializer.toXML(input)); - } -} diff --git a/server/tests/test-1597-input-missing-elements.xml b/server/tests/test-1597-input-missing-elements.xml new file mode 100644 index 0000000000..b5789444eb --- /dev/null +++ b/server/tests/test-1597-input-missing-elements.xml @@ -0,0 +1,261 @@ + + + + 00 + + + + + + 00 + + + + + + ZZ + + + SUBMITTERID + + + ZZ + + + PAYERID + + + 260330 + + + 1430 + + + ^ + + + 00501 + + + 000000001 + + + 0 + + + T + + + + + + + + + HS + + + SUBMITTERID + + + PAYERID + + + 20260330 + + + 1430 + + + 1 + + + X + + + 005010X279A1 + + + + + 270 + + + 0001 + + + 000010001 + + + + + 0022 + + + 13 + + + REF123456789 + + + 20260330 + + + 1430 + + + + + 1 + + + + 20 + + + 1 + + + + + PR + + + 2 + + + GREAT HEALTH PLAN + + + PI + + + PAYER12345 + + + + + 2 + + + 1 + + + 21 + + + 1 + + + + + 1P + + + 2 + + + COMMUNITY HOSPITAL + + + + + + + XX + + + 1234567890 + + + + + 3 + + + 2 + + + 22 + + + 0 + + + + + 1 + + + 987654321 + + + 1234567890 + + + + + IL + + + 1 + + + SMITH + + + JOHN + + + M + + + + + MI + + + SUB123456789 + + + + + D8 + + + 19800101 + + + M + + + + + 30 + + + + + 13 + + + 0001 + + + + + 1 + + + 1 + + + + + 1 + + + 000000001 + + + diff --git a/server/tests/test-1597-input.xml b/server/tests/test-1597-input.xml new file mode 100644 index 0000000000..0a7ded8aeb --- /dev/null +++ b/server/tests/test-1597-input.xml @@ -0,0 +1,265 @@ + + + + 00 + + + + + + 00 + + + + + + ZZ + + + SUBMITTERID + + + ZZ + + + PAYERID + + + 260330 + + + 1430 + + + ^ + + + 00501 + + + 000000001 + + + 0 + + + T + + + + + + + + + HS + + + SUBMITTERID + + + PAYERID + + + 20260330 + + + 1430 + + + 1 + + + X + + + 005010X279A1 + + + + + 270 + + + 0001 + + + 000010001 + + + + + 0022 + + + 13 + + + REF123456789 + + + 20260330 + + + 1430 + + + + + 1 + + + + 20 + + + 1 + + + + + PR + + + 2 + + + GREAT HEALTH PLAN + + + + + + + PI + + + PAYER12345 + + + + + 2 + + + 1 + + + 21 + + + 1 + + + + + 1P + + + 2 + + + COMMUNITY HOSPITAL + + + + + + + XX + + + 1234567890 + + + + + 3 + + + 2 + + + 22 + + + 0 + + + + + 1 + + + 987654321 + + + 1234567890 + + + + + IL + + + 1 + + + SMITH + + + JOHN + + + M + + + + + MI + + + SUB123456789 + + + + + D8 + + + 19800101 + + + M + + + + + 30 + + + + + 13 + + + 0001 + + + + + 1 + + + 1 + + + + + 1 + + + 000000001 + + + diff --git a/server/tests/test-1597-output.txt b/server/tests/test-1597-output.txt new file mode 100644 index 0000000000..e1a30e694e --- /dev/null +++ b/server/tests/test-1597-output.txt @@ -0,0 +1,16 @@ +ISA*00* *00* *ZZ*SUBMITTERID *ZZ*PAYERID *260330*1430*^*00501*000000001*0*T*:~ +GS*HS*SUBMITTERID*PAYERID*20260330*1430*1*X*005010X279A1~ +ST*270*0001*000010001~ +BHT*0022*13*REF123456789*20260330*1430~ +HL*1**20*1~ +NM1*PR*2*GREAT HEALTH PLAN*****PI*PAYER12345~ +HL*2*1*21*1~ +NM1*1P*2*COMMUNITY HOSPITAL*****XX*1234567890~ +HL*3*2*22*0~ +TRN*1*987654321*1234567890~ +NM1*IL*1*SMITH*JOHN*M***MI*SUB123456789~ +DMG*D8*19800101*M~ +EQ*30~ +SE*13*0001~ +GE*1*1~ +IEA*1*000000001~ diff --git a/server/tests/test-edi-input.txt b/server/tests/test-edi-input.txt new file mode 100644 index 0000000000..e1a30e694e --- /dev/null +++ b/server/tests/test-edi-input.txt @@ -0,0 +1,16 @@ +ISA*00* *00* *ZZ*SUBMITTERID *ZZ*PAYERID *260330*1430*^*00501*000000001*0*T*:~ +GS*HS*SUBMITTERID*PAYERID*20260330*1430*1*X*005010X279A1~ +ST*270*0001*000010001~ +BHT*0022*13*REF123456789*20260330*1430~ +HL*1**20*1~ +NM1*PR*2*GREAT HEALTH PLAN*****PI*PAYER12345~ +HL*2*1*21*1~ +NM1*1P*2*COMMUNITY HOSPITAL*****XX*1234567890~ +HL*3*2*22*0~ +TRN*1*987654321*1234567890~ +NM1*IL*1*SMITH*JOHN*M***MI*SUB123456789~ +DMG*D8*19800101*M~ +EQ*30~ +SE*13*0001~ +GE*1*1~ +IEA*1*000000001~ diff --git a/server/tests/test-edi-output.xml b/server/tests/test-edi-output.xml new file mode 100644 index 0000000000..0a7ded8aeb --- /dev/null +++ b/server/tests/test-edi-output.xml @@ -0,0 +1,265 @@ + + + + 00 + + + + + + 00 + + + + + + ZZ + + + SUBMITTERID + + + ZZ + + + PAYERID + + + 260330 + + + 1430 + + + ^ + + + 00501 + + + 000000001 + + + 0 + + + T + + + + + + + + + HS + + + SUBMITTERID + + + PAYERID + + + 20260330 + + + 1430 + + + 1 + + + X + + + 005010X279A1 + + + + + 270 + + + 0001 + + + 000010001 + + + + + 0022 + + + 13 + + + REF123456789 + + + 20260330 + + + 1430 + + + + + 1 + + + + 20 + + + 1 + + + + + PR + + + 2 + + + GREAT HEALTH PLAN + + + + + + + PI + + + PAYER12345 + + + + + 2 + + + 1 + + + 21 + + + 1 + + + + + 1P + + + 2 + + + COMMUNITY HOSPITAL + + + + + + + XX + + + 1234567890 + + + + + 3 + + + 2 + + + 22 + + + 0 + + + + + 1 + + + 987654321 + + + 1234567890 + + + + + IL + + + 1 + + + SMITH + + + JOHN + + + M + + + + + MI + + + SUB123456789 + + + + + D8 + + + 19800101 + + + M + + + + + 30 + + + + + 13 + + + 0001 + + + + + 1 + + + 1 + + + + + 1 + + + 000000001 + + + From 93e73a6c519d73bb6d24d58bd2160c62422d6ec3 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 17:45:31 -0500 Subject: [PATCH 04/28] Re-add NCPDP Tests, expand to include D.0 response, add bijection Signed-off-by: Mitch Gaffigan --- .gitattributes | 3 + .../datatypes/ncpdp/NCPDPSerializerTest.java | 90 +++++++++++++++ .../datatypes/ncpdp/NCPDPSerializerTests.java | 109 ------------------ server/tests/test-ncpdp-51-request-input.txt | 1 + server/tests/test-ncpdp-51-request-output.xml | 50 ++++++++ server/tests/test-ncpdp-51-response-input.txt | 1 + .../tests/test-ncpdp-51-response-output.xml | 34 ++++++ server/tests/test-ncpdp-d0-request-input.txt | 1 + server/tests/test-ncpdp-d0-request-output.xml | 59 ++++++++++ server/tests/test-ncpdp-d0-response-input.txt | 1 + .../tests/test-ncpdp-d0-response-output.xml | 34 ++++++ 11 files changed, 274 insertions(+), 109 deletions(-) delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTests.java create mode 100644 server/tests/test-ncpdp-51-request-input.txt create mode 100644 server/tests/test-ncpdp-51-request-output.xml create mode 100644 server/tests/test-ncpdp-51-response-input.txt create mode 100644 server/tests/test-ncpdp-51-response-output.xml create mode 100644 server/tests/test-ncpdp-d0-request-input.txt create mode 100644 server/tests/test-ncpdp-d0-request-output.xml create mode 100644 server/tests/test-ncpdp-d0-response-input.txt create mode 100644 server/tests/test-ncpdp-d0-response-output.xml diff --git a/.gitattributes b/.gitattributes index 1e727afd1f..e9cfea079a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,3 +11,6 @@ configure-from-env text eol=lf # Binary files are left untouched *.jar binary + +# NCPDP fixtures delimit with control characters (0x1C/0x1D/0x1E), not line breaks +/server/tests/test-ncpdp-*-input.txt binary diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTest.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTest.java index a3c84faa98..2146b3de60 100644 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTest.java +++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTest.java @@ -1,14 +1,21 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2017 Mirth Corporation +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan package com.mirth.connect.plugins.datatypes.ncpdp; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.File; + +import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXParseException; import com.mirth.connect.donkey.model.message.MessageSerializerException; +import com.mirth.connect.model.converters.TestUtil; import com.mirth.connect.model.datatype.SerializerProperties; public class NCPDPSerializerTest { @@ -41,6 +48,89 @@ public void testFromXMLWithExternalDtd() { assertTrue(exceptionCaught); } + @Test + public void test51RequestToXml() throws Exception { + String input = read("test-ncpdp-51-request-input.txt"); + String output = read("test-ncpdp-51-request-output.xml"); + assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + } + + @Test + public void test51RequestFromXml() throws Exception { + String input = read("test-ncpdp-51-request-output.xml"); + String output = read("test-ncpdp-51-request-input.txt"); + assertEquals(output, serializer.fromXML(input)); + } + + @Test + public void test51ResponseToXml() throws Exception { + String input = read("test-ncpdp-51-response-input.txt"); + String output = read("test-ncpdp-51-response-output.xml"); + assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + } + + @Test + public void test51ResponseFromXml() throws Exception { + String input = read("test-ncpdp-51-response-output.xml"); + String output = read("test-ncpdp-51-response-input.txt"); + assertEquals(output, serializer.fromXML(input)); + } + + @Test + public void testD0RequestToXml() throws Exception { + String input = read("test-ncpdp-d0-request-input.txt"); + String output = read("test-ncpdp-d0-request-output.xml"); + assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + } + + @Test + public void testD0RequestFromXml() throws Exception { + String input = read("test-ncpdp-d0-request-output.xml"); + String output = read("test-ncpdp-d0-request-input.txt"); + assertEquals(output, serializer.fromXML(input)); + } + + @Test + public void testD0ResponseToXml() throws Exception { + String input = read("test-ncpdp-d0-response-input.txt"); + String output = read("test-ncpdp-d0-response-output.xml"); + assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); + } + + @Test + public void testD0ResponseFromXml() throws Exception { + String input = read("test-ncpdp-d0-response-output.xml"); + String output = read("test-ncpdp-d0-response-input.txt"); + assertEquals(output, serializer.fromXML(input)); + } + + @Test + public void testvalidateTransformHeaderWithfieldValue() throws Exception { + String input = "6100"; + String expectedOutput = "6100 "; + String actualOutput = serializer.validateTransformHeader(input); + assertEquals(actualOutput, expectedOutput); + } + + @Test + public void testvalidateTransformHeaderWithoutFieldValue() throws Exception { + String input = ""; + String expectedOutput = " "; + String actualOutput = serializer.validateTransformHeader(input); + assertEquals(actualOutput, expectedOutput); + } + + @Test + public void testvalidateTransformHeaderWithOneEndTag() throws Exception { + String input = ""; + String expectedOutput = " "; + String actualOutput = serializer.validateTransformHeader(input); + assertEquals(actualOutput, expectedOutput); + } + private static String read(String name) throws Exception { + return FileUtils.readFileToString(new File("tests/" + name)); + } + private static String validXml = "\r\n" + "bar"; diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTests.java deleted file mode 100644 index 99496d723a..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPSerializerTests.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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.plugins.datatypes.ncpdp; - -import java.io.File; - -import junit.framework.Assert; - -import org.apache.commons.io.FileUtils; -import org.junit.Before; -import org.junit.Test; - -import com.mirth.connect.model.converters.TestUtil; - -public class NCPDPSerializerTests { - private NCPDPDataTypeProperties defaultProperties; - - @Before - public void setUp() throws Exception { - defaultProperties = new NCPDPDataTypeProperties(); -// defaultProperties = new Properties(); -// defaultProperties.put("segmentDelimiter", "0x1E"); -// defaultProperties.put("groupDelimiter", "0x1D"); -// defaultProperties.put("fieldDelimiter", "0x1C"); -// defaultProperties.put("useStrictValidation", "false"); - } - - @Test - public void test51RequestToXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-51-request-input.txt")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-51-request-output.xml")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } - - @Test - public void test51RequestFromXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-51-request-output.xml")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-51-request-input.txt")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, serializer.fromXML(input)); - } - - @Test - public void test51ResponseToXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-51-response-input.txt")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-51-response-output.xml")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } - - @Test - public void test51ResponseFromXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-51-response-output.xml")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-51-response-input.txt")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, serializer.fromXML(input)); - } - - @Test - public void testD0ToXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-d0-input.txt")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-d0-output.xml")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } - - @Test - public void testD0FromXml() throws Exception { - String input = FileUtils.readFileToString(new File("tests/test-ncpdp-d0-output.xml")); - String output = FileUtils.readFileToString(new File("tests/test-ncpdp-d0-input.txt")); - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - Assert.assertEquals(output, serializer.fromXML(input)); - } - - @Test - public void testvalidateTransformHeaderWithfieldValue() throws Exception { - String input = "6100"; - String expectedOutput = "6100 "; - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - String actualOutput = serializer.validateTransformHeader(input); - Assert.assertEquals(actualOutput, expectedOutput); - } - - @Test - public void testvalidateTransformHeaderWithoutFieldValue() throws Exception { - String input = ""; - String expectedOutput = " "; - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - String actualOutput = serializer.validateTransformHeader(input); - Assert.assertEquals(actualOutput, expectedOutput); - } - - @Test - public void testvalidateTransformHeaderWithOneEndTag() throws Exception { - String input = ""; - String expectedOutput = " "; - NCPDPSerializer serializer = new NCPDPSerializer(defaultProperties.getSerializerProperties()); - String actualOutput = serializer.validateTransformHeader(input); - Assert.assertEquals(actualOutput, expectedOutput); - } -} diff --git a/server/tests/test-ncpdp-51-request-input.txt b/server/tests/test-ncpdp-51-request-input.txt new file mode 100644 index 0000000000..7657c0435c --- /dev/null +++ b/server/tests/test-ncpdp-51-request-input.txt @@ -0,0 +1 @@ +00000051B1ASDF 1011234567890 20260913 AM01CY123456789C701AM04C2123456789AM07EM1D298765432E103D711111022222E728000D30D57D61D80DF0DJ3DE20260913AM03EZ01DB1234567890AM11D9136EDC80{DX00{DQ216EDU216EDN01 \ No newline at end of file diff --git a/server/tests/test-ncpdp-51-request-output.xml b/server/tests/test-ncpdp-51-request-output.xml new file mode 100644 index 0000000000..4e9b41e4eb --- /dev/null +++ b/server/tests/test-ncpdp-51-request-output.xml @@ -0,0 +1,50 @@ + + + 000000 + 51 + B1 + ASDF + 1 + 01 + 1234567890 + 20260913 + + + + 123456789 + 01 + + + 123456789 + + + + + 1 + 98765432 + 03 + 11111022222 + 28000 + 0 + 7 + 1 + 0 + 0 + 3 + 20260913 + + + 01 + 1234567890 + + + 136E + 80{ + 00{ + 216E + 216E + 01 + + + + diff --git a/server/tests/test-ncpdp-51-response-input.txt b/server/tests/test-ncpdp-51-response-input.txt new file mode 100644 index 0000000000..57f3661576 --- /dev/null +++ b/server/tests/test-ncpdp-51-response-input.txt @@ -0,0 +1 @@ +51B11A011234567890 20260913AM25C2123456789AM29AM21ANPF354716cb1bb9646a9bc8cAM22EM1D298765432AM23F500{F600{F7216EF9216EFM6 \ No newline at end of file diff --git a/server/tests/test-ncpdp-51-response-output.xml b/server/tests/test-ncpdp-51-response-output.xml new file mode 100644 index 0000000000..b312ec0964 --- /dev/null +++ b/server/tests/test-ncpdp-51-response-output.xml @@ -0,0 +1,34 @@ + + + 51 + B1 + 1 + A + 01 + 1234567890 + 20260913 + + + 123456789 + + + + + + P + 54716cb1bb9646a9bc8c + + + 1 + 98765432 + + + 00{ + 00{ + 216E + 216E + 6 + + + + diff --git a/server/tests/test-ncpdp-d0-request-input.txt b/server/tests/test-ncpdp-d0-request-input.txt new file mode 100644 index 0000000000..776ecb8a98 --- /dev/null +++ b/server/tests/test-ncpdp-d0-request-input.txt @@ -0,0 +1 @@ +000000D0B1ASDF 1011234567890 20260913 AM01CY123456789C701AM04C2123456789AM07EM1D298765432E103D711111022222E728000D30D57D61D80DF0DJ3DE20260913U75AM03EZ01DB1234567890AM11D9136EDC80{DX00{DQ216EDU216EDN01AM158CEX3QExample3U123 Anywhere St.5JNowhere3VIN6D12345 \ No newline at end of file diff --git a/server/tests/test-ncpdp-d0-request-output.xml b/server/tests/test-ncpdp-d0-request-output.xml new file mode 100644 index 0000000000..0346830984 --- /dev/null +++ b/server/tests/test-ncpdp-d0-request-output.xml @@ -0,0 +1,59 @@ + + + 000000 + D0 + B1 + ASDF + 1 + 01 + 1234567890 + 20260913 + + + + 123456789 + 01 + + + 123456789 + + + + + 1 + 98765432 + 03 + 11111022222 + 28000 + 0 + 7 + 1 + 0 + 0 + 3 + 20260913 + 5 + + + 01 + 1234567890 + + + 136E + 80{ + 00{ + 216E + 216E + 01 + + + EX + Example + 123 Anywhere St. + Nowhere + IN + 12345 + + + + diff --git a/server/tests/test-ncpdp-d0-response-input.txt b/server/tests/test-ncpdp-d0-response-input.txt new file mode 100644 index 0000000000..d2960b217b --- /dev/null +++ b/server/tests/test-ncpdp-d0-response-input.txt @@ -0,0 +1 @@ +D0B11A011234567890 20260913AM25C2123456789AM29AM21ANPF354716cb1bb9646a9bc8cAM22EM1D298765432AM23F500{F600{F7216EF9216EFM6 \ No newline at end of file diff --git a/server/tests/test-ncpdp-d0-response-output.xml b/server/tests/test-ncpdp-d0-response-output.xml new file mode 100644 index 0000000000..addf81dcee --- /dev/null +++ b/server/tests/test-ncpdp-d0-response-output.xml @@ -0,0 +1,34 @@ + + + D0 + B1 + 1 + A + 01 + 1234567890 + 20260913 + + + 123456789 + + + + + + P + 54716cb1bb9646a9bc8c + + + 1 + 98765432 + + + 00{ + 00{ + 216E + 216E + 6 + + + + From c1ca290d335896c182a3ca1092c3681fd1eadb7c Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 18:08:14 -0500 Subject: [PATCH 05/28] Re-add DICOM tests, thanks Saga Signed-off-by: Mitch Gaffigan --- .gitattributes | 1 + .../datatypes/dicom/DICOMSerializerTest.java | 55 +++++ .../datatypes/dicom/DICOMSerializerTests.java | 46 ---- server/tests/dicom/README.md | 22 ++ .../dicom/ct-abdomen-c4kc-kits-instance.dcm | Bin 0 -> 528368 bytes .../dicom/ct-abdomen-c4kc-kits-instance.xml | 213 ++++++++++++++++++ .../dicom/ct-chest-lidc-idri-instance.dcm | Bin 0 -> 526466 bytes .../dicom/ct-chest-lidc-idri-instance.xml | 115 ++++++++++ .../dicom/ct-lung-screening-nlst-instance.dcm | Bin 0 -> 526502 bytes .../dicom/ct-lung-screening-nlst-instance.xml | 118 ++++++++++ .../mg-mammography-cbis-ddsm-instance.dcm | Bin 0 -> 299076 bytes .../mg-mammography-cbis-ddsm-instance.xml | 49 ++++ .../dicom/mr-prostate-prostatex-instance.dcm | Bin 0 -> 25216 bytes .../dicom/mr-prostate-prostatex-instance.xml | 181 +++++++++++++++ .../tests/dicom/pt-breast-qin-01-instance.dcm | Bin 0 -> 35722 bytes .../tests/dicom/pt-breast-qin-01-instance.xml | 169 ++++++++++++++ .../dicom/us-lymph-node-cmb-lca-instance.dcm | Bin 0 -> 789196 bytes .../dicom/us-lymph-node-cmb-lca-instance.xml | 148 ++++++++++++ 18 files changed, 1071 insertions(+), 46 deletions(-) create mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTest.java delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTests.java create mode 100644 server/tests/dicom/README.md create mode 100644 server/tests/dicom/ct-abdomen-c4kc-kits-instance.dcm create mode 100644 server/tests/dicom/ct-abdomen-c4kc-kits-instance.xml create mode 100644 server/tests/dicom/ct-chest-lidc-idri-instance.dcm create mode 100644 server/tests/dicom/ct-chest-lidc-idri-instance.xml create mode 100644 server/tests/dicom/ct-lung-screening-nlst-instance.dcm create mode 100644 server/tests/dicom/ct-lung-screening-nlst-instance.xml create mode 100644 server/tests/dicom/mg-mammography-cbis-ddsm-instance.dcm create mode 100644 server/tests/dicom/mg-mammography-cbis-ddsm-instance.xml create mode 100644 server/tests/dicom/mr-prostate-prostatex-instance.dcm create mode 100644 server/tests/dicom/mr-prostate-prostatex-instance.xml create mode 100644 server/tests/dicom/pt-breast-qin-01-instance.dcm create mode 100644 server/tests/dicom/pt-breast-qin-01-instance.xml create mode 100644 server/tests/dicom/us-lymph-node-cmb-lca-instance.dcm create mode 100644 server/tests/dicom/us-lymph-node-cmb-lca-instance.xml diff --git a/.gitattributes b/.gitattributes index e9cfea079a..f894780747 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,6 +11,7 @@ configure-from-env text eol=lf # Binary files are left untouched *.jar binary +*.dcm binary # NCPDP fixtures delimit with control characters (0x1C/0x1D/0x1E), not line breaks /server/tests/test-ncpdp-*-input.txt binary diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTest.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTest.java new file mode 100644 index 0000000000..5309cdc172 --- /dev/null +++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTest.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2017 Mirth Corporation +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package com.mirth.connect.plugins.datatypes.dicom; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +/** + * Serializes every sample in tests/dicom and compares it against the committed XML, which is the + * serializer's own output and so is already indented. Drop a new .dcm and its .xml into that + * directory and it is picked up without touching this class; see the README there for provenance. + */ +@RunWith(Parameterized.class) +public class DICOMSerializerTest { + + // server/build.gradle runs tests with workingDir = projectDir + private static final File SAMPLES = new File("tests/dicom"); + + @Parameters(name = "{0}") + public static List samples() { + String[] names = SAMPLES.list((dir, name) -> name.endsWith(".dcm")); + assertTrue("No DICOM samples found in " + SAMPLES.getAbsolutePath(), names != null && names.length > 0); + Arrays.sort(names); + return Arrays.asList(names); + } + + @Parameter + public String name; + + @Test + public void toXml() throws Exception { + // the committed XML is of the header alone; pixel data would dwarf it + byte[] header = DICOMSerializer.removePixelData(FileUtils.readFileToByteArray(new File(SAMPLES, name))); + String actual = new DICOMSerializer().toXML(Base64.getEncoder().encodeToString(header)); + String expected = FileUtils.readFileToString(new File(SAMPLES, StringUtils.removeEnd(name, ".dcm") + ".xml"), UTF_8); + + assertEquals(expected, actual); + } +} diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTests.java deleted file mode 100644 index db549d4948..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMSerializerTests.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.plugins.datatypes.dicom; - -import java.io.File; - -import junit.framework.Assert; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.net.util.Base64; -import org.junit.Test; - -import com.mirth.connect.model.converters.TestUtil; - -public class DICOMSerializerTests { - @Test - public void testToXml1() throws Exception { - String input = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("tests/test-dicom-input-1.dcm"))); - String output = FileUtils.readFileToString(new File("tests/test-dicom-output-1.xml")); - DICOMSerializer serializer = new DICOMSerializer(); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } - - @Test - public void testToXml2() throws Exception { - String input = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("tests/test-dicom-input-2.dcm"))); - String output = FileUtils.readFileToString(new File("tests/test-dicom-output-2.xml")); - DICOMSerializer serializer = new DICOMSerializer(); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } - - @Test - public void testToXml3() throws Exception { - String input = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("tests/test-dicom-input-3.dcm"))); - String output = FileUtils.readFileToString(new File("tests/test-dicom-output-3.xml")); - DICOMSerializer serializer = new DICOMSerializer(); - Assert.assertEquals(output, TestUtil.prettyPrintXml(serializer.toXML(input))); - } -} \ No newline at end of file diff --git a/server/tests/dicom/README.md b/server/tests/dicom/README.md new file mode 100644 index 0000000000..b135d29ac3 --- /dev/null +++ b/server/tests/dicom/README.md @@ -0,0 +1,22 @@ +# DICOM test samples + +All CC-BY licensed (commercial reuse OK with attribution), sourced from NCI Imaging Data Commons, +by way of https://saga-it.com/dicom/samples + +Each `.dcm` is paired with `.xml`, the expected serialization of its header. +`DICOMSerializerTest` discovers the pairs by scanning this directory, so a new sample needs no code +change. The XML covers the header only - `DICOMSerializer.removePixelData` strips pixel data before +serializing, since including it would dwarf the rest of the document. + +| Sample | Modality | Collection | +| --- | --- | --- | +| `ct-abdomen-c4kc-kits-instance` | CT | C4KC-KiTS | +| `ct-chest-lidc-idri-instance` | CT | LIDC-IDRI | +| `ct-lung-screening-nlst-instance` | CT | NLST | +| `mg-mammography-cbis-ddsm-instance` | MG | CBIS-DDSM | +| `mr-prostate-prostatex-instance` | MR | PROSTATEx | +| `pt-breast-qin-01-instance` | PT | QIN-BREAST | +| `us-lymph-node-cmb-lca-instance` | US | CMB-LCA | + +The patient identifiers in these files are the collections' own pseudonyms (for example +`LIDC-IDRI-0580`), not real ones. diff --git a/server/tests/dicom/ct-abdomen-c4kc-kits-instance.dcm b/server/tests/dicom/ct-abdomen-c4kc-kits-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..ad88cdc16fd64c73b377833d4c85f43719d23825 GIT binary patch literal 528368 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

mJ%`pSijIq4|7%u76PadsNu{?a_Z&!GdUt z6EhB4>C~KgWX@XLAHOVYVNu>4AJm_mvyS=m(Tnr<`H3Oi8SS%XatdSPGmT5U;JWV9 z-PP^naDmmDIjJ?mDP;-R%qG@bJy=D|#0ID4p20O)sC^4-f3@;DMSvlO+=~aW!mJs| z!?@v#td_qCPZb|h$>J)ae5?g+QxUqdj_eKWz);1^uvhwn6k#m-gNu+v?YI)0JBwGY zwoP=3Rv`Cc6Z)}Pj}4lGB&s@c^^$zOX4&ZipV5GjWmL}4A393UF>)TY_Qku+gyW&t zTvU7&nlan|(F^RORb)m1VUDC3;Fi{5tyyvUfd2D+)z|VajEL@}DPYT*8u2+ZUfKg^ zr*-KH*z#%Bt>W3Tn%J28;PYCO#|tYjhQ6?V$S80<_r@4y`b9gdrbr*%ZCBEBn!31$ zoovN$WR9k%eO8_pwkpl+StoB-FdE$adBR&&uB;PDJTZ*_-?~yxXnaXX@Ta zT<(_G+;e(sxge5$WRKZHgHV=zY3$z#LDDI~#p3XSv-AG&9K$ls4_;0Sg4xyMf)a7T z(}R>_^7l!39UG(_krof?+4j7Ab9DD#(H_U=JFPE@ZaE@)=B(rqUP^9pe6-P~!=HEG zNFC9*?&0>L#3L8BhbM3Uk3s#%+b_3Y4IlVIet#=DiX+=o+ck5&?S@|n^WQOXi+2;v zJ14z8HaI^dE&m{z>zMS`|Cq-i>BszBohCRU?`}$T2j=Fy zMbS|w^y6KY88{}IVo~(Kl4y$s{m+uj-4*c-?g}4hl0}%A=)hZH729@8+Si-UG`~o6 zaAxlA$f}7h_e2aIzU-m|M{1p|R%F#{_j2;WJ7#Cff5+{}ElXHy(d_D4mYTjNGvpC^ z#hFTu@xsa!ko59!S*{U$vYGq_(n7P4dD%qkDR5YxsFr-ECn9cDqgwlNVGq8C9%GWp z3~?sz3dY}hY?L%+`RhJqt?5_anHO;mS165v2b3>C>()Nkj@`VE^_R`Z1*)>l-BLH~ zs;;K;Pj%0(iK2~eE^I!RT=;hq%UUJ&>YeVX?!j2A3nTk@E_;db;_UD{Cm1?9l7B)z zU6k+VNBY_7Ga~oL1V={%Pe05NeCxTry_}ntE{O&ZCpa{pu(T(n9W0=1F#qAdgZp{; z=KHB5IwTGZhDanRwq`@yB0G%;KuFbwc`gRR5!ohXunwh}OY7zMsGNBm9?R zgW?}YU)-1xoSK&`hPdTPy>5W*dFj~?dcMz#p&J%vEXU{g#W|8kaCASm<1!kVkL79a z!S2=Q)k)Cs{rPtb$xAZO8-g1PYFTg5<*^wJADuk=7B{G9hHAyKebD9#u;_a9n|E3%&%by8+4mVcM=$W` z;fjx2@xa0(+b&-RiLO^#$CyOs*?8?}vvh_lm0uy=UVDIe2RFQniX!TfQSrc7U9(-B z3YNu9aEOZN^S3MhuMHXmhA|~=IZj2W7S%^o?ya7`Z9eG<+S%t=4V=5n?oH`ccalCS zMr3x~MP8zw*e{2Mrh#WhQtWf74$Hn(rFq#F+2~>aKlZZq;JCrMsdN2uyGA7Zscx7G zowt(R`f<2AJj&G_7&$*GGCeOcjRhZ*AOA!B@x8U1pLg|sQE(s%h!Y%`vlfN{oD>`! zp4Z}d3)e=coSo1AGoQi#g0#Z-W|4mwEPCPD2j_@GbIw6|e`4(At>Gc>#S7Rs*?<#M zJ$zVj-?Wc6Hzdxtyg92mC$9y~ae1AX%ARwZA2)4$gC*U^hF_1@KOt2+_avIIJiR?O zSDKUF9g%)5>aU=0c+KJc7!Jz#7UZ=geC3Ax$Z23Si~C;b-x2Bek$vx+Q8CQJd(0n| zznA5VW76kEeT#=?*5>s3@Tf!uu1kA2$Cr96W7!}hS!;NE{DBMF7Zb(2WbmcP?8#Fphyp!!$On~EZSdQL*);Kr)d^tjMi9*h~`5sQ$BWjM+=`i6f%FB?6Q zgNH<;l3C|5c_$7C$4254ddF2Ttg4;TE8KwxqbIOUH_`7n$}@3? zFHW3 z{luEPc%0U*?G(HJ^5CN8|Hj*25`Ma22x<3sYE^*cSEvu$Ga z^CH#cUG%;p;czc9MnBBY&%EG-9^maC9}FEAWCecQ7>??V)%vE7FT&(>{M6=1+=UpPOsW?O%&>6)!e?Y5HYMXXN+E z`TvLMD=+{1IST`luQ($Ao0S@`h`@1qUwKUoW`4$jY0S^3;vq+8RxgZRk#9IFvCyA( z&-B#;>kl6d*ZEaA%Re`FW^Lq_(a+Ws$q-skZQpZy6vMdvhp^{*T2#frSW|0b{AQMtL%GcLh z8AyFG9-5=rr*%bA!p$I$K9;A9l?&O=&!MNO2Y!Pi&6vUL~L5E45++;za?h zpj0nH-)wiuyeJsO;zjRZ zfVV6%e|#i&Y0vRtTi$CmnpeT4MUni@wT570X&y@z<$J*mk^Zb?E%ax)7+Pp{@xsd6#`jEsxx@Z(V zz)sp{iA30Im_?8!f;UnK=PV^`jj-0Lf+OQ(gl7Q%WgqP?foa%@K-~c8Ds+{H?-3!1{`7)06MnvL>3 zv@G_i9=+C+=sS)8mBwNvD$SyQI2w&9<_h^(i|f!du27!6@wjJVo8>#0d2v*Fkk&L) zl{v9T1>Mi9uiPNLQmbK{O)mIsR>>7lv;x>_-C_Em$6t!2oZo!0Z6c#Db(Z2IBd-f%q0h-X^*M_ow=8m5W7Rs)voPqzm*vak0rPX0AbxoR&|I3~J;8PRO~U0ds?Ov38k6vH2tN|LMIZ5Jl6!+q*U%z~>W7 z|4g@E`|r)#&EtbR2WJodYjAjKd*`P{`KbI{nze}I+rR7HKm1DX`9IzLBuri;{k`(JDN4@Gu1=IyGbhek6~v4-O0G;CG%nKjh~ zJQ=zQ7I|ElHC^mnOq$lK=M2@1jdaH@Fxq%fHcr5Kr@9HM}%4 zs#oHGVnF&?Q4cU!ry!g=swe+TC;@_lk- z`oAOHbOp3v#0TaKwKXDbRTF?$pPBX@GpDzpBJQ|z)dI?=FYJ##CKx*}$6_9GX_v<{ zxj$aY-l^Yvy?Zv^{{h)S;Dy0&1~(2a8(clOc5p}5=Kf;v?%?F+ruNP5E8z+o51&o` z@celGGzk{IAiX~^I*T{6IDML*D=f<>^x@=uc6NUAT8_x$F%IlC1OJ6KTb82^&->Dm6)}*55bM%+t~Iw>U=6Wy@+m%tVc@658%Vi6<0^%+T76m!05Zy^ z;W6aCaLp?&|Jqf>8Q@qnqK?N?YS&4%@oMSl4_riVi?aG<4l0UM@eFYhS96al zZ|AvN>VdRLoAV?_Y6a~~rh?1diSvv5VjcV?aaWqmK60LhMLJ~sD@H3$tR9dy+9JO_ zmC(+6E2pA-&R|yaQgdT_U~2d`OqBmuJ;Kh86yl{gKlz-O|CdMdPtIS^iOsTfb9y_6 z`^wcFp5F`lGa=*ny!$~uW6f3eiLkNna%BthiNCy8KX-mI0jCEss(@$-$b%uC$MRUj zQ~F-8z8CiRQwgvlIJ!6-;K@YJ_DLMzkna2K_07kdowFKo-R9L)|E-@LM`ksAajQ-X$5=iD`@1!Yf%2>>ZkZF3#`&3O+>zS#B)m>|C8DJ0e~jmn+nx7Usg8|OZ5pZi^_gzPU=`R~#I z7$vR1S1kU>b0k@^ep+B{ND+I18`~41EVn4RIGxInT2qDD7Kg{>`Lir?@nG_bJrvFg zMRL{fUsj7XqD=}PFeYm)#}5Y(jUCucvA71_%D>Pr8iK}QzcCo7!q+R~RqLJc4`Y#q z*UNh0*2YK!i2&+FSzjySjG(HUu=v_5MHG|8#!Gx(+ClG(+VRFLhE`ZKpDKxHlgeeV z<*v4Q&Udd|4+l~U;TgFVZxx|%EtL?o(752=*y(Y3nvpnwXUtTEl-P$=p6b0P_VY*c z(7~lg`8=>bEfO)JXH^A>>zF%!KcBzJ`_B%ZA6(KL-+nn2_N&CwJQ2%yZ6scOo(R>k zk@Hi7K@t38`*$ZsQpvFxpNK!t9yWOQqF^*a#lLaeIcY~kOl6JifZSSH{e?Z3I5a4b z1zZ-C{3tr$w48fbu5eP$SP}#+3NjYvdMqpdUlg5j#2XJn4ZL>pi8Gr0PGCUxh`kq|r>|BF?F1uIReNhV7J}4MG zI~owW<@q3y2ArS2FahuJlvC3?TtHm!M7WSoogy^&%9C#98n(Hd%w=-nkf(^;0f>Nb@^YYxxN+TzXH+09{z(^@%VS4mHQ zW8Jn%euq842+0kc(*x{-NE!r*1L4s024=4X_L4+H1%$}zRdor>&;b>p!rcqwn7qm{ zc9{<0N0c897lldRS56VrWD)Ur|5rx7a*Z&k{zzUBw#!r3OCAG@D5fEr$&SlXYsc8E zoT2+*zwEt{X@iXwOQ^baZNi-yqCsls6&2HZ?=v-XwW5aRf-1SsYJ(R6_jC?D2tVe_ zoYeKq2+rajRAgVAK&B8%>9u;Yb46Nc*jfuHS8D{SHpKzdByN_MK8e;;yiqO`o5FA~ zG_#=INKKd?dXBE0-$g3yL@UY&;bH=tMj~eAN8UhhWsKc-yJy&!YJBQ@Rt)~8`B1xl zB79@BYVY}ApWQnz^}Gurg;wnx-?P>;B9CI^`06o{V%8YD7o$5Re=p2$F#&9sS4?|| z(jOG5ue|v2!OVz+tE!a+wEE|WAP~Y>#S4Pz%YrhoJux3F#zzJ$?TV>XHDp151rw7&j<39RFAINmj zQ1lmULL~e`Gpi4AbRz4@^QTLySN^Aq=sbEtv{A$a^Px-mK9H+2632mk>_$5x3H3B! z$P_!U9+!S`Me|mSgJw2f^-_2TZ79YF|MIEphUwc=mi@11%klS&O$^9$YCOMEAJhUD z(CW`%?R2`&zqs z`nOTyeiMdICF+kioZh1!_V^$ClEeF+h`}F`KGr%!9Nsu&0$6HDJ~TZ#HODTB-eI*5 zPYd&dXZZk8Q7as90XhZ4z$3%~tO_`x|I17q-1`Xf0Itu{iyTWDiNaX`?>)2ffWNLk#dG&S@uJ= zKQ7D7!r}<{v@AdQhbEGT$HNkfhf!nG7%bVOOX!5EN`WMi=ZbidX{@{K7XD7!t5#2@ z!a1xoYXw(43)~qaX8+1>hAI^{#q-OjfHm<4{;<#4dpQBum(LifXz;G^hJl*_7MmC2 z46T%(0f~ih9*b|)%IZt$Lf(l_^%d)(O z!??Yu9lcj|0rrigi_Bfkv2l&;>Bv8l%`p~!j#g#vu_<##JJ2Nb8Exwxd!GHQutL!S zu~KtopT2eS>E(lin}2WjPgT!G$@2Xo9`QwyH8LpQy*TnKnqTpFe!Mz->s(dFV)ILb zkgC?37g;?u5xvXpR*-mwrlEGh=Uo4~^_>tE+b3tSmbUJm`C>=W>Izt_+9)#>o9$ygf1GNA^YfW{Lnx~i3z*E2>BowULp=WQ^pdWE*Q3%8{S=qiCozEKY1{7= z8H-9KUW(ow)}M*D&;fFp72_A-rzvp){*jSc|6mU0q>bfy=ZbSPyGKWREy(X<(jpdc zPX1DdY<1y^#5(@ijgOymR<}Vnz1^odDEC-Yh=r*qvXHb%+1Y`=i2vh)&@cZ~yPxt6 z+4b_~)f9^rV!u_nTD|~gJQA%}n^Uk@D!MwHVEBc0_FDxJN%!Mwjw1bLft`fq z(jNMbF+;wqx}In})~?2`>Z17xwU$^fWZx^gU|w+-+ykzCS``L3iZRoaM(H=7j1S|A z^d0XD-@@dpUV$~I6-5UM$+$Yqi|A@cM8-3yL{Ce9@i59it6i_K8XBISR^MZ{{H;^< zTiL?eai-1L|7$R|dAoV8U6NI)Yh{Ov8zT9#(W2mNj@(z-y@MmAB2@Duzw`6$DUtB1 z$UDB5@ydkbyu5i>5hoPAk_nTsUm8ox{?iZ;aaa(+=HUpX6&CbIVAyPQtEr`KD18u4Vn;buvd7& zjI8XxGv}VyqZh{(!;_0RDJ_du(r@0Mn9t-H&dfV}h}P-Dy{q|T;<06 z#`l+|zv_bE`| zP$xv%asH}+!B<&tcFK3;3_mST8aAQW=e6dfR^5(Z5lb#_zw9FYpf0XZ&!QCuNvT?W zXeROOsF*hVmbXxxUcX?ua8zxwnddOo5EFI`XP&|YTNURRz=g;R{IE|#0X2-Sb+ zow$d!WP4->jPEu7ul-zV`qxaX|GuzFmP>wXex!C`B=Dd}8GbANFJsN~R_nH~|NofC z_4gv($L4620Tro-4H^LE<;q0?PK@f+#tTQ9Z#NSkFb#4i^M5H^mlS5KqAC>eS3Ukm$uV(H$4$|35~rtsVStoT~aw zvm@6Q(FX5ktm1xRdZKhNrA7%3wavbZW$@DFC0KYhO4lb|aAhBDyguyV-sDH0%KGPr z6O(%=d;Z*&*uy#bxwVg*%IcqytKcNYDl002!ONEer5TKYKHxR*idgxo1~Qxc5OEi0 z^BT;O%11GlMQLGP?#{`%!Xt^;tdqRp#BQs0W^-)r>#AXPGI@|aHS0HIc{Yt7V85BE zeH;iUWUD9VJJzn^W@3XRM68~@A@3tQZ8=)JsiN~04U?IIVrVUv&*E!=G?Gc&zIZaU zk=>`o$jg=EyW#(xo$MB2FFERgByDK6q+QKXI+&jLVXGFRle~o7+$7r;4Wa&wMoHbxm zdmT{GA92ZAE$V9afDkGE>(ur>9-n_nYD?A}J`<@vHBzYB##(k3P9zIgWy3|edAEF7 zu>c$w3%8p0pddsQyeRtINTm8dvJRi>Wkm~o4pl0KMDS0KT>Do1;LKcWX+Gr(;|B6x zi}I;h-p#S5^aS!UXh&HOYsI? zPxkzsaQ|2HdL{KV*FB#=0B33 zrxPc6H93-Xv&-3fVc;)zZ+2^>iujpiA79R%fiLFBd$Kx^UU)D)xiTnqr89ceLONf- zSRnt%To0D{PJD}Va&56fb%L}6e@i^oIV?X`RBCdd1;W@VfFO}fR3Hj127o`7{?5!dMvNA7v*EL{21z9+5FR{lTj!t!J0 z`~x})KXH(q&b{4!cK4}c~1E~{DCHLJ@a8NPO*P@#o6d0$CaMt zl{g=dFeV zyT2!S#$N?bzst^f*9Rll^eDSDJvcSTiT__5Zq43VBaD~e;UWd%=yvBgEf~Hm$6gus zeO>gx+4=kSVDqv3z9E_bH@`9L=9RF3Cv&9-^8UBc50A!1U-V~>;rw9p!u0KoXcWAJ zcd?}B^w;O8yZT-}o)+H9u05l&@^S5~f>`G zv09FOFXs%S9sZCRzN6m@O^-Rt8auqc8{IYSs?9%z^NWD79<1>eiT_TCd`t)nm=-w_5n`Fd0omaZ zdo171N;;26K>8~d0QGEr)f?js<=L~NBl-J^hgD_(x<&EWcD5N?*Mj<4tiSjH{MK4G z2*DlLZMasQF0Mz5@J#q2Y&GAbxHtUhDIMXR_*X^1wC!r_yj_y*%}Mt_2ORkpCXC0p z#0118${UwYtVp5OXb2j?c+42xX~afGit)yWYwA_hI(Tto?z1 z8@qW=torh_C`+c&kpH`)*FD&?DuMHZ{_Dd2ukY>u`9bX^(P+=b8s47QPx{xL;rfro zGCvd4|EkCT!7lV_N6J^37Ll_8Pl8D$Lx3A z7rOt|eyv#$3t){#biM>#OjH@c%%=<|Hl z*~$0uXj!b{{bB{YP<9aJE9*sXRNZ@7URnVDY9}7D3*{IrzQ8MhE-jX=*E&4`;T8L5 z^S$IO8)0*ODnejHR=#2MRv)p2&|FbH--^pul)!Azl(oBp9@jc5UWQmA zO{RzXSJ_RyrYS|`gVAfFIf z3?8CcK$R?PGi>6utS|ek4Vb8E!m?}7#ahxtt}64bPF}8>wNv9%sCMPDlKR007P2bp zE(#BmbzMF^GyywYx(stDRBd;)QKHY$Bu8; znl`KJRK8c0PHBMhL>EObsOni9i_8n)d6QW?UEUe|blEd|V$iWod}N;Y+QHAR!TWyE z0v{ZHB$cD#_MKe4ejW!sz;WBFm z?~`&Awm&Mo;Dz-2-BjsrmyywT`(%up=CAkVXG&N@2t{V(g^cf)x#n%rZkMFzb_eA1 z%P`QsRtbrkx<4|o$7RfmawmBF=3Q=qUk3Z)f$|k6=gc2PW7=KxXL*L&YgzyF&yfU` zeVA~q0wy6-@~J%n%7&ILT47dXcU+>`gW+>M3wSNk{92IvcJL;`epT4< zvhV><1o&mICuIF^iypWvT;Ruv_T3kxzmR@B72LPM@#?|os%h`twjywDA}ni`^InTKaH*2lX8x^K3h zZw`(m*a?!g$ABvmP;!LhV!cpBay%^={Mf&q*ie);j( z^oWIq`J*FdkV|?@| zTTdg7umiX@4%cJ%jlUQP&tGeD{WyO0uqp~^KyC1!FbeZ--JvIL^W)S;!8!bEVf`Nc zo{&sCy0#TymE+)Hi1+U|cy#ca=JodczQXUpSc+wl9uikF} zpzpC9_gFr=H=jL}Zw9g2o-DX(^v;-GpKKJaF8{x7P)d_L6O_Ijtujm%(9`+nY+Xn`ks#xOdS1?%R>L9~VE z8NMBTwN5y}_^hJnqB}$dXJ>5NMIUUG&x+%`5-ssk=1rvIs%TI+w+gs+LlWyN|6h(k z&D4T$9hsL}XJpl(2q2$LZiMC#QIMfMH~m^Oy_l0{A}r3c5_gJB*qfUq^9x0aAf{FX zK|HU~{_iB%s(-b1FplfXhFdLG6}J$_Mk8^A ze_zRyt){ipB5f-Ee#1SkKm6STdVeE%jv znP-Wvn%72ot&^iR2}Z{Td!w>8_=P-|?A@HdYTiGW)?^2siPgk2HVpP>r`J2=w*&UaXbgyqR`hj1F2YM@>$Y&+`hMyJfENeEK)YF=}%>4P{L9!}Mr2 z{c`O;1)(yCD`hkCjuJZWRKhf4QE~=K)5vUxf z{Ea;6jqzrlPY>?whTUV$vw5oFwvja}+~t=^GdZrPHO6U&F7igg)C9oU2rDhFfSF_L zY!z$82Pmsp5wt=cYo$(3>ayBirzbmt<@vA!#6NyRZezQf})CP z(pXGG2CZt{7y%?ssP!DKD??&l2jb&y$YkHf(k%Nyk|JZ&ZGP&CD z{`krwN_MhP<;#lH-jqk>FZDn6-nHUZMDLh*00=F7hvTmRdKe^SaR-+oTQu){iFHBrmoY z`d7~9n}$)0%6D&v!{68E=wAwZe>~jbH+{6>-sr|hqXPzM5%=FZJ(-^VO^nWXCwl0L z*yxMXlP3CUlN_^tu0Afmw~kKRCcSqC4`=uMH8yJ}9|_OEKQ@Z}_w=w=Vv#pYkH!b{ zFGYVnovXdrM-1MH4tXsa=XWviDJyQjwwn#;lysW*H z#RX34HG;JJGGGp7S#Oa&cz|e_hc38*Uq`D@^NoyyeA&nf7};!6?ihHcX=sUx@{5x}Z(Wa7 zEgLGjE#Fwtd)0NA1#Q5Srq}2u$5%ALdvOQ25WB1@rFxzZ?9&%)IZafWK-7j)Cy@mBckNnvNY8E)tv)56nt$3rY|v=6;vS4j4`&aq7#!IwZ;y{W zz7TFF}#x$1UK>%GwPgNWCnO|}U3KM>^a z6@0%h_WxsfFC)HZu)lvk-6Kq3*FGb*Pmn$_SlKt&pB-I!6!Ky*pd(j0iN6tNucUtiFY|#B=dbUYW z_g21pFNl33NF0^;-9s6_os52*)_#!)z%Sx?`|HYJ#ma%pk`=foEx(zHx^-jY*GaFo z3ToToFZ%ex`MLhY=&wond}>CpW%StxGeVxt%zPr&ze~osS^E8I*vaZ?W4$l{jN{EP zuXp3e;2%$?$NKqjj_Trryb|8=b|0%0W4I%|5$jWfZ3hzTD(Pu_ZAo70p*%s&lN7Cq zIw_x6r!c42RaUJ!40#r$njrhZlASGk zykg^pFndLao;!=Ai|RwSjI!uH6v2cTRmHEM7b@9w^#yo8S%ymvBR+r@J37`?D-&kXj+U)$x|y@Kvtf)-E87VqCQ%y?GM3t0WF zf*()PmNAM-Js#|=8GF1@aCc{r zad|L24Elc;Uj0Chd>}`80_m->;+F&!DhKQrU=6<=Jy=Z4Ta;sYqKnt$TEFetz?;z| zy!GEkFUV-V-EEw{&dPYEWE9h*@jjIPZXc_^Z9dsM`pxr!J>7ic=$|p^)7m-v_p$VA zCGPi5P|w$RHu~VvXrEtY1aHOzc|N+dR`tJ^zn;z2Jr_}ZG7rpJYmDsd^jL+(vgBG+ z6rP`+s?xR_BhFTJSk6+t$+ue^&hl^=%^SJHm$plq%Ofw=!n0?!8WnHdI`TO+FKlv? z$dpP{^+76su~w@ANuNv?y99H^!6Akvl}BI+*>skgS31Hj;0PChGI|2zsA{-EY3&tA zwsCL_gEiw@u*WPdJMJhIjXvRji%aMYUSIXVtbcKoilNJSLnRMG?n67SjeXE(>^fcn zS+(N0bPlVnXQd_BRk_U7^FMxVHL!JgM(7CF#D~-i>1S0<+u^ig6YKV|w~AYs8ND<{ zy%RH`^V|>PrFp6bh&IDN*6#1f#D%{3&MRMZS};PEYGuCls&fC3ZqF`ypt4coPU_9r6Zs{TYMA&FiS+Fd zx!)(&{3Ag<#O@Sids^<+v5xHH&e05e2k+bG#q-@RdSTa~d*@iq^@8uMa?DowZkznf z%6VJm2sJaa)7rLS$*aY(zZraA7hUD~BIoD-%agOXw6FHLA{oJ(qls>gUQnm^vsgMT z`u1RhZM-q~dLj6~KUlgw$KD!^A>VgV&!de{C7tSeYieZAPf1i$?L)2iU(vUEch2@? zfmecG8b%ahlW47-GomfhSGx`KYv_Zi8OdJJ1G6)dO`;3L`ljYMs|}tD2iY*%pa}VhYdXw*E2IM<_9}aMHdVF!vU26iCre8R{x@h~3-4&%B%)oLhhG z8KibnaL4S5aBj4PyLfiy>!GlXW_V5aa(jDfgFhJAs;7&t9$A_k+1e`D7cEwK;t2xy zDXuD>RrZr7N&4{0LMEh%yTN}+t?b;$+B3FK7F)!v?3)^1sK;8#Hm2`*88MPAl8u3r z?}|>i4%^KVlVzE35p>!I_UNI?Jjxi=qIyiC*9>Y%Oan>c`J1O{t0(Cm7)tJObLo5%@>(5c68` zkXq?$KKW6#Bf~H~QW=f^&@xyEkKb=S;D2qFy&deoAVw==C}*fo8xB67=UwjF?h?Bv zD}8h12X_=zq6cL6>RDZfMe1ws3$|Y^zDg6j@7a6qgxH^BB3)O-=3JiNzmBY~9oe20 zbgSg?jBNh=?C63$gWSoH^ojYsZ)~I7{&vCpw4N)^2s(C%ewY$|ET=XpNA1wFfgO7G z%;VlMpNNsSv6`>M$G9W*`kY8Jd6s7sw^Tjr$>0|U>u~X-VBzX8^9Q2^AVj_X%|Vqq z{AbhOTZ5AyMUPw?4u5st)h=RZ_j7SZ+N*U%>K2WEZrV6K?b9&7OuXM7yl?lO{Iv93 zHg9t8X-o~Hf&Lxy(r-S%-n}N+Dx=#d>TCG{IKUX`&aR7=K9rtQk_3 z@LV+48{q)2CZe%=yq-~sQoNbJABe`fCVj`~F9?pW$sJJbcvsH+eIGAWBW)FteUSKT zGKZoAc2HZ`vj7a|qUeiXWeoRq6S~pun$6!t3cEzF){N{-4@0yTXmX@#LTrhBL)ciB zrWkEunw(?35JE=F&OiWr2D{K)*{9k!OC^9c#JB^A#IUs`n{8bS884<>_7qww!p}-q zb)WWC{K~$ISd>kM30K4r@R8aJM6V#&H>Cr-(>EHbq6cE?bR4TsAF=bkSE+zgh^fIR z`_7iald)=B#DkAAIW5pimGyTm{=2v-|EWA5UWIyJc-I<#-yVF9sP&byBjP7k`HE3^ zXGW@)L9Ww!08igBR(h?@6HBBAC#5wy4d0->&8+8^t&+H6o4!sN{KsIA=IiZ0NB6%N z4RC&J0c6YYSUqA`hh4v#c;D_p{Lb-w zE4PeqxTW?-wla;?Kxg5A+sSjBZ?zbWgs$ zD!sog+C=W~rr_bWye^3@@SIP6j%w!GrPqpFm4>&Z4^|TXGAv>k7C#{vr^~iXUuWi> zXrEXn-ajKuXutgIlHN}Y(x>LL{qjs=yAT=YtY|E?Fs2ir|!}(Fih>&%|eVDrc*VygFl0b;UQcccA!;9Y$3H z(cW~Sbxlj71@4a4ey-cEJD}aY`PWE_=yk0XCD&N@)G*1Z`JeqFt@tDlRHYAjS#zkx)tz5Ec0&`^?^P?-s}`3ZU#kXKs!2UEs?Hbs^+1c50(LJ7SJ$q7 zl@;Z|u&%5zbclVGUT`&ipq1q0FcqAd4udV427>u7GH^6iv2Rzw$196q6eG_j)eeRs zYr>L?5SFFZOA$yOkMmuPcB$$>y;FrqKdP&+Ye%6TOWG{wdIpbYtjOunL9VHWqSi#2 zQ~o>-P>hWAm#w9#u_2K~bpaTLm7jyWpFj9|b98%TziQ>q;Dlu$6`rpto~&lqbM>%G zPoW?^cCk4lXt&CDNzRZ7ux9_lSk9Y+{VRh0cl+nk$lr-|y}!5e@_9SQ(#;BfRl{2U zGCQ_#k9=m0%;cbF-B`elf|H%25q1sU)yvNahBoiLfS<<#J{bG^NVLFR zy=}MG$%Q%J%q&lvhi4u<$@|irVejKdbKcE4`h|>pV&88W3mkx-Bi|=esIqbY9{pSQ zIgMST7iML4_RVXL%+vewvrRPHcF_;Bqvzxe{uB-Mr(pi^{Ky9mGxk>#t9&Z$aIT<$i;StahK8F?_ zuqa>U*&SK-Q`XV?Be8(0W_9dH)La&Tl@zIiP~28L5p%${YZnc+yfTo*DWKOGyoB<_ zp}zJag#3#1i?FNlr48sJ?7M1!^FSrg=Hn&qS$e3 z{qD|~tkki;u1`fSt=>N+BfTxi?}DU<@>>*g(=ckaJ3kEremvNR|L5}V{#bSyMJo)h z3`1TPl-Orm_42d9-}>S3Z)L<*{QoLPJruNx=WP@m(_Z7#-%X;sR4dtKXm-ZIbK&c# zZI%NO3EeLoV6TjLMnCr5qA64sZ5$r3R>u2w^s|+O>Ve-&OhtXdAb+iqSsa(_$6LYu zlkpYaOQpannb)cocryLEA#-t7UZ-bv#AocMf(g;)@_^Q8FU!1$aH#C|yy4{;+iPJM z3%l#`RKbU{=cC<%hVcdLW}#Yq+sKy)@)nUW(JpqmGVK3jmqeG@=8>4S8W~mdEGQ(D zMZ#Gj3qvKJBpd#C@@io4bh&DKk?<&BxoozmyEvH@vd)IYLOG=28t}@l!#!*i)_E=J zXk;5}9YO8j$8xIPmwA+bhhsX9-hf5D7h&Mx%l3QsOsYxR35`FN$cib z$^41gnmhMH=4O1xu-0Jr>~()}BK~J5a{X>RNXWKRq=$$+0lARl?=aC^!BTP ze>s0UUU+r~G+Yz=cULU(BfUl4JQBTcEFGr1W8|Ej+c`Yl?Z z{%5`K`)L0Ead`3h8556&H*iKQ`K`fg26 zh2jZf8T1`{ES6$cD(k>o5MzK`emdWQ-_C2GbvMP`1 zQ_%ofo0&O|mMLFJmg0SbM+T2Hqk`Gh<3C=R`z|(oMo@i9e!bg~lGlDdFX1&DK*Naa*x@Xz1 z24AD1Bf1>&x`*QlxitaveB$5~Mb0j#?xNI;h; z8!W&q`LCD(51NdQtOdlO<-NoZMdH;9!Y%BSwPz1`Col>PY@F8oFDh58TNIA{tJ(v2 z#hc3#JAbW=%`u;I1-$ScH~pjStM@_|@m~*P+?7%dl=9kcgfdUQ8dp@p1OP zSc&>wT!;5SbI^EZ$dT%-LQ+3{IvO~ic7u>HHzmzBGt^PKKawO?+pXulfCoSCC0r$X+k^sV9#p6z*4 zET1U(YvICnD1IZTcsH2A8}7(RJ(uvvJgws=(R-t_r@=irddpzWnxb8MT{SzsnUWD~ z7=*4Dq*)_iw}IDE@v8<|CUR!JO~Gueut?jev;^;~WiH={&QOuGMvry7{#gCHb2Ntf zfOY!J-Pk_TKc@F~){M__X~ytqVi9ZRC^N8K-;e3x5A@)6>6@Jc%+ngt6>o&Os5Bg= ztu=F%(fuf&&iSvTH%-24qS5b-H}Xj4;>p~hA4R{*V%V|R4xy?vytjXOJ#ADChnhh< zp;dM8$%%K0Cccr}>VI@!X+Pc^5spbV*N7kB$Z&JwB!aa;08gNSwU=^-DFu4CbgfB!$M9Y*O9HW=ce95$h4B%WVZ9kYfv+ye4t z7@=Q`oep4OT@O}Sa_g96G3gYxn@z2!mWik754^%C>sol!I&4BA&aT#|c0{GWYOOF^ zO>Y=w?KgmX!>az%UA0fLKGd!xdhRO4-K_>H?!@n~Z*QGXYdWeT1LC5tIXO8R^UtTK zJrU$c^|SUeHmdTe4j4Q!Sf!m2>$zrD_g$PjUr(XHkyY)9nu-45gr^7ps{B23i`Q@O z*;;A3wD)=Ki1Fhftr+`m!7zV)``}#mYsX;f{lW8g`D9uw7;kt?Ea>>2<;(QrxSQu# z8NY4vm;Es8jxjlUVr-Cqb!7F+*{kM1+b5duH2=_?(p=Qs*i3G3Xg?AjzEUvS41XS3 zT@l&6F~0g!!NFVcf_cpA#m;V#D}NxZPY7FnHq89V9JyCFw)LrSYh~#-JY`Zog~V55w^t6X#px!*!mpbbzK^f37mcuX-a|j_ zW`)oC`CM)BYWZx7%)?6gcHHpy(WPHV<=si?{c0JvSmE>>AvZcH$8DWC*(YtthK!HK z8I=|=4*X%`-u{c$Jr(r-sUP`j;YAOHzu%v+zL?j2nWt-Vm$AEgVn{u^q@F8S`vu}q z)^piKRh-aD4z+_9MnA5SJ|;iV9@DIdgsDd#L>kLa_PhW!Cvs(W2xINbQ?+Io4}d)Q zAE~+{jkTIq+)9K@o(%5T!HNTj+Lgx+jU*jUt~@r4Aj2kGR`G?31Gr9k_Wmz#qI`FL z0Gz=K+}SsrUoNgsi?EhZQ<(^8Vz2QHo;WrG&+u8y2Y!n|z_6-ByZq4r+F;i!A|URk z4H}FU=2M8q8>@YRL@o8JvUBBu6n9X!Z&${utE%U**k4pju1FKnq5O!d5-grz_P6O{ zep}?Y$^>ec)^O~qgC?W-`e1xBv;Aab=AG#Gi~9R5uBYP9(|Xm6dnd}x)-Q|wKP;Tv z8eY$qvA2vpb*_tC{W!0mMD{j`jP8*a3py?6m=t{1diXt){o5(u>=v(pzx`gkO44r? z%#1(lhAH_D;4d1_jy74?RNX@SUa`3El=k?Yp_bQYcsvsy!m3D z&$Cl|cYAtbV5`QC-`QvGRQkOdY{WR`YExrN_ZxmPud23Jsk_PW!ET@K^>%~q+tCEK z1~rqS9jq->sla2Il4E!=Gt%?Dqrs*GvvvfKyTegx1<$%c{yMSH8wb@^5p9|u`+AJa zxHrlFy!JKn*M!W+jA)d#60aMRnb|PCmGvJVzkPI$oR+@M>2~dQ&vOs1i?tmW?2Cm= zOmC*8?eV#Ws%K1KW_q=1M%Ki?f2L;(TSSA54hMQ6>_l#0bacyV`P+_0kM*Cvkr}x! z_`fn)&eGE%uw7TGx&-)G6V6;*uV zE!HQ{VCt``B2k>w$_aB?8qZ(Tqm!rSSbH|Ra%o&E5W2Mbjls0$Gwr_wHC>+7Yxh`t z)}IzD@A($~wknLBx3BEMvHMj6aBw2*R`;9{)La?g@c!`X*J4j!h|QT0RN(nyR@(=~ zTSR(s;C1r(Zjt8ggL5@L>xUn|68wu2Sm8b`$a`O60y84xQ1(>XyDL}yRxJJ&-Sy%6 z4>ezE#x?imX@j3hymIDX|H1KjF6V=TYx0!t9}Vswe4+V7dr++AYGJ%TPvq^M#Nplv zKW>5>R@X{{&m`;cp5_p>%9rRW?s4?7e!cxI)C7*K)yJ+`-8xo#wU&q76Kxk0 zhdurUw7{eo0o1URTCM!M>%$-}VNEPtLn>5T?JO4urEEWDB4$wQC0S>GJEQcF>(Mw~ zdP+N%4HsL`7iZEGuI?zm&4emQJ+1to9;j9J^b{3{m`2qmU?z}m^v0l{oAx=GTBE^N z!W%p_fT#57!Hnh$?f=OhTk8)W&fT?dy@;O3kKJU&fvw=PkB4X5R#wel*7tj^-^KAK zp9|tP2@cpiJlB4f6N7S@J^rei*R^A(){fNj1ZD^0AI;Ci*r!z@_2PLO1wmWp+Z}_d z9rJENBJ7KEy&~1iyfS8M>Zhqnl?@DM8miOp3IXLYy;5Wh9@N3B^#*Lk}+3v zSuHHHCAvh9Gt_K?$QqO>2+ukgJEPh%SNiYHcy0W!tIchfDO7K({luP3xMwr>UrRuQ zt8*h?K!0AODru}9Qdjz2#PyU=B2ctBKJ5i8Xt2-cEU8bsx8SOoI*c1ZG`_+9uf zW?gtSuHq#xs%&*EQBR@Q;1!n38CR{KW`%!%{+rYLuriOML0&}5PvA#3$b4C|d5w|D z49Ch_gYo-aQ^Fb_Gk>3B9&7NT<27b3H(>7D)wU%#*9NGCms)}Ocv^1# z_du6+*og0}Mr_VmtZ7Vn9l;{mLzLlcq|Qai zn`WH5DSO&EtW%yp(UI*du$^_m_AiW%!8?)2O&DVXo=bQ3GCsJ6XSI>WW&;1$O>wUp0h`N z2~gIUC!{A3p0qkz6j@~^Cnj%h_K;}S`WCU_t2?9JHfq|98HisouXfXKP)oXp$1`WG z_&?Z*?z~Ewz^uq|=8Hcij~s*8@I1;2S-QLL_XYjvpGiuTBCI2rsz zW}z_%M-ll(N|IB#I?pF-Uy1u5zQuE7B5AM7XIc}bm*83j z`ZPv0ye7|}Bny5)>%*EI_tFpWow?bqc?KTOV<=gJN!72hr(1&M-+)fu*Ca#IXJGt~ z;0aDa=TGKkZ)~%8&E&Tt#QHYpfW3S|KWGowcYYGq^>*w@wW~TlqEa0|ggjMC-ivE< z+*&f{>oQBL@xCGNT}MaFS%X>MHJ2Ezna#%BTB9}X%=0eR#|7D(v~D^m*;W`pdb>4h5#<>51KM5>j*PX7U0z^nTzU$#Sv^x|(bdt4!; z5!X`%DVM+mc%^Fe>evK!C9BM_BF<5R?JM)L1A%dSxk6cp=A5?@TY64wg#ENJTbRAm z4w-WSp2ua}Eh7;v_*@pyx~blb$gC(UfQr!TyTJG+eEb5(QyO<-i`E>i98&I6zS+(l zIR=NP#Z`vtj;(NmAHWCbbxj5{yNm|9-q8KX{OA~L%*Sr3c7Jl6qxtM-pAsU2 ztR3(&cfMqvLs}W^`=p|`^ofjs+SqC>nUzMxB3|cQ4#cVZoVnHy`JMPz3WOJ~J*=je z6EF)td19xL@I1FQlH55Y)*vHR$xVNQ+KfnJRMe%R=)-Xm8KSq92Jaji`w zAK;x(Z--SAJxII@B3{PQEtQZlBHst=8Cz;QX$#b6q^%f-lGc7cdP7?NMn$aPlCK$9 zxS87iSd2%~Tf| zZJD9wsL1*S=O=HieOrsUUX58;hq)aRq7I+Rs%fVh7pxC%%sPCLId?|(c{&7!zk4zf z{ci1tbD{|^x!K0lE}u!vvK=$38G64LlE5sqmdrc5C|_T=BH5bm#do$h*U#Chj7k4l zcHz9DU!%jrmhXcGy%^1UE;7fA*gZu4S~AkQTv0>DCUaR5R2iMn1JGV+z<2g4>&vma zGj9EUb8eMh@`)wkQLHHTYV{2&^NrUK#yV{ z(b^nQscPl(`ADfN;4RPKE}J>wt1nk1TVkZe`r)qJ*&4{7ABkXokL;_$**sro?)g#d zfl5W6VBy$X`6pOKJCBrNTkD7R@+_A#3+D0MjQ~yt>2`5^014pA2G$9<-hiFi%?fj^ zQ&%^c4exUp-|@}tXu6q|M0>#G6@e7}e$f>^nqIPTC~Jhw2^QhT0%g!*u8UgdZgBeA ztN!JW+@Icm#Mt#Fln{ExQ6K1@p}*C|S`VSI<@1yYGK8W)%m-7h#}GNReiFJ}38D53 zCf+?x_zG(8h%D&Cizc&z%$7B8KR7+v1LGfJQ!YS0F*^E+^I-L49c134+D1vB1uh2| zjDV;OrXyrjNRqI1yh~m|)D(z#@2-qM=|0FX&zw36c;Muy8rfXWw;JF&jlk;`8NaN`C?X-)BRpLs6XF=#oMEO6)|FhS2 zb+B)?iup3u<+WuVnxmrDl<_jV$ILYQSC(MTHwIhsSuOdl1ikuXrGCN_9l?sUwX+@R z)9KY|$#iaVZBh!mvNxmGK64eqru-P0ZGqL_8(*L$Hb572e|IdN7T~`bpV+tj(n9Uz zv2+VQu-WoQbN|Gey&7Zv>;GetdjZu0;dMY~BYun3DxkF( z9Mwbr^#_0E?KbB+PT_m4_Ua%?Hcz|WSf71KYID{41orXrh(e z`{^4P9k9bsb$-hil+Cf*B$tdzF8iEaT68(m>KtTOZ~niO^Pi2}iaG%+sr%)=NC)(N zYtB@PGnl_SW};w*7Nt`>XrS z4YYp3c)(cn!bBuP)Oy(|z#8J&%z=u;Tk2*d(sIeQ%s@R`dv1$==dJqCXA@6PO)SIi zJdPOn38q^9-~Jrd+WA?a$yGbVidDRFd@^w1K}VfXL<&WS_ClIrzSOQHFTc@7U2Zc65+v$2f7MS{C-thH-ad>R!t)@Ls$JNww> zcQmuWDj@ZM+Q1mFU9YWgFJcy*1mf+=BYS7$&d9X$SxeY1HjP1ywS>nxUkUzh3<~V% z-v)F}%Ko1Hg=lx5>{vQ7ZIo_H#w6|OI=7a{-UuxD^U)egwuX3*&Y;fdd^4@p`d#_E zBWu+4;MJDDdhoqjXpIUN7mgLKNaut9gUF~o*a2n~o(ull7hO_xCD`ejYtCM1)n6bD ztT<{2PR;Z?87UUnuM3W<^HY{<)EXB}_WiRbSW6^;xr$cuncZXzP>%Cwys1<9UQMsu zv!nm1;IAyltcg8f{bFs7V=VN9o-d8O@iTjtSl!^c>T#DEuvHy?x8c|)v%S$#YbEWlfi2iI{9pY-J#lmxwyz&-fu93((9{_4&dYO?>y+~?1^_eI17-XTZhRi51zto|Lu z43FXs94B&E4N0&AMsNxEc9kJl3pVN>YX_Oz?MgxBfm;6^tEjpz)AP)YnH;@5a{Qv~ z(zI=I9nZ&ZVHr14Q3A?LXOm*OhY}S+iw7gG1hi1UN{f-0oZY%x0)GVg9)?kNN!d znfXVFNSX7Z4O*VOq7Tu4^^PzvBrjO2Gjo8Dkf>sOF;I}M+mP2W_Yt6CD z9Xy#&y>s=k(dVO${{GX0KK%SxH$x3VfqzsS5WCqW6N#jl-Zhn6O6 zXRSnOc)#j}`wI6bucz~2?e<~6S-E4ijO#+l`pfd#rPnGtJw0PSc9)M8rKT`9-bP;> zMt^KW)3syHS<@DII_Bz_vo10kgN4$}WFu!a!Fz2i(6`Yy+QD@|n5*3!&u+*@rN!yX z$-nUPt0eCiW)%h#&+EvDqu+uvq$M(-JJ$Xg*!cE@Y@gczry&+RulbO z4|JB`+U)&XlQD}{d-~fe*!&)A70zI9>zCBl$^cov`XI?@pzC^Q|D43P_4%pG6_?}) zS^?GzG~&Ir1y(&O70e#4g#6HVFd8UpXk?&#(R^&{Pt$MG<7tQNZoKr8oUs?U?#cZ= zjq{($J1eQr#1b%H(oU*Y8vATo@>wsASPFFS<8G|xek{U&n~e-G185!caW`I|&&gFu zencK<1-yg=FbCNBz>(QNGJdTBcf|nLaxx2C4PkY-%+WY(Le~(hSVX^o^nv6#WN~$v z0P6$PYR+Y`(v;_CB-<#U8qWRzVMS}_+P6YYWpCWz?!=9A-uRfh*y=m8RzoL?&PHel z`8TD6_|>+SH4y2dRjWN#(+Xtjo9pK*mDK$D+1e=4k>B%2WI!84iKH~KgSkC7MXAwz zKMTepq*w#SAggbO#E=w@ThvDsLOG%ppxo1b7r%NjM)1Nea)ltjca^=cd>ps;!m|d0 zFQ%1F-b)z(qu)wZS7Xuw2+v9M+iA!~NFPNclqd}i}l z(I=;G9hjNmdVb>HZ?yQG1NQcqgV+Bh*7Py{Pnnx$+_yl>Sd(YG+*-8@VWzY{?V@Qs zPiwY5^Lh*ZM5%NN-}4A99t?lL`1ClBXrexCAL+ zjlp^ReJ)rD2Jj+2Jq^rNV4MxXri`83L@Cf{wVu{|RnS=mgxE>E65lKH#9WvBTCHKK z&YdvR*SJPCj#UEQpf;Zv3)T8}g|fN+_x?fZ!Gsp-^mde_T_`^=A7;7a*-dNyLb*6A9g!WSY|}gN z=vpA!01?d#R#6Gz)^ZGypYJwiLO41t9Pf%2zVg$%qU_YNay16MsK&gr-Xfxz+WlHp z^$J4^_a*PAt8>0)D$jBdD4)dBG@@tar>k;}=SkZECf1bJ=C_(|6w;n23r}aXPi<%( zx}B?9qdSb1hxOSmpMO@j82PTj?+VOo>rdywF3d&qJj+U;Ghmy?Wi7L6Y0G3S8GQdJ zT)>$1Wn77%IrBrF&m59=;JG7qetZ7!$op1k_wKy9^6HG9KL?4?i@*9H3-k#(v0sWW@KcxaS8Y&!0s7F4{+|5qpKE?s53n60${%mMI7_BzY((QeAVNhhW=(-mnU>zQ3f)nkHYw~nGS64zA`?V@P+z;>YB zIEUQ?qh7iz?^`1UtiY5reJ9*aj^MwXNQOIM%=L zlZb}N&IR_A2;u*SEufWB9i)^7Tlx$5&jE7V+fBVncSJl_KQqhR^2!#{jD z`$cw2_9y1mIoWmTeHVx1uReGJ?YKteMvub2!T>4)&2-s>4!e)DPr`CJoY_mbA9~;J!)K!>uRsDsKQ1c= zU2)eqrLi}=X>-T2W^fZ3>#LE2w}3_z6qbES|ccQ2A$cJz#mr%|DrEuvt{d;p<~r>!YK4I#HbxuS$dwqM{Q{J2$Fcu+!jW#` zIax(*HdYn(IE;LF6`4II&-oh8J-i=3K(F7LA#Fk{1?`|Pff-{LR4c@0!z&iCazKx) zUD_)7Cr=}?g6wr|hv29S417hu5c%}*!=3%=DbX(1Cm-(IHs4O)K+9VciUqf@ZovE> zHNDsfO)q<39-P0mnZtt+n`&ik5sw-6yFRtdpHj#3lz~;y!w&yLUqHJ>u2PF$c_LRA z*-C2UU?zjF)7#eScXV0{j>>B<%TbkQYWvti9>d%KIscFx`Vqc7v%U9Sg+nhsWQ<;q zGRNv&#}qO{3q&46DPe3xPhSf`Kg-|xANoOZB{lJ$Cl($}wxw^Q1&<;9?apaG&nH3R zIAnqBuIs?LHoVb4W&1QFyOCh~Lr%nQtjfG{c00f9THg|_VxDY!@NW;V7NFm1IQ>#{ zOG+@4zrxbIfoOj1tU=a0`!o5xS5s~GZ`iD5)bPAsxDo{GVYLG1YJir=g46k|1^Dg+ z*3I(ihOTc1&Sm?%<=Vd)*J}US)@*qOp8t7R0cYpZ!ro@R3u$t9x`^=}Mejd}^*V@| zx&Y21`j56`#NBegSu68wx0hw?X6Khf4*0tS=r)oO)wNuQO{0b zrhtFr+IeO;w*!BiNk}0&$=g;tQW*t^$ z>yyFKgWRz;{9MbEnu0W&mz{?95^E%=-y;X94ZnLJeY+qPe0AjtJM-Rt3YB>hm9PRj z<)gLxN()AC5@)HywH+fivl}L075~dX8ZnUTD6kgE8_a=N$I)I&t}Ud6IEH&_zYy&K zYrm}tkSmlEn3Vfk-!t03rhiBtWnNlk5{#Htbk0vRQPtSSY|ZCzW`_n1?p!a{S6Kgg z0mcFJmt%itxwQgC99e%^jx2m`eeB@z+*i!mJ4B@UPV5BJuU3{d*G|xX@Ep$xcRtbwe8oH2hO_IA8t z*2uLSpw)xMFk}Rb8)~^bn&=!9mX0xfy^5$7Gz-wxSM&iylX5DgovWV~gOV2ulaih3 zcI>-dV8R%mb$fbkKG(rKNqbqka)j2MnE;b=^jrID^~Y=IkKS0!_M?it7iYCqJ~DoG z^)PeS`DL}P+RHUGwsM?q*-z=a=>~k)VrtsVDRPzYGqQ8jOOh#M?Vg_BM=QnbOVSe# zpeHytm&bSA`MW)+@5pxTkp)@-J^0;;ciIXa*ycR;(FSPG9%h1vu5xcU6uC=xlj9Eq+(>HGfwuC1jMGc4_7{U8$Ups&?xW_ zevATJ`*A<`mm9E8gnghU<(k5t@6(X9_9Y#WO-e^5lbO}_s&TGrho6W6nsKAlm!lFF zW_PK#oC(SUZDVJ#NHoT--j&hP!V~f0U%ys6LEBLdOom^bDjKz%^_KPZ^_JDz;>}~~ zO+br#RBc4w7~B zW%S~~nOk8xe*u}-0y&OZ3oEA3-`9wzSfH5P&Xwidow z`(`pU29w3;dwb|up(_(_4nX!FX<$6is(oKZ3tfruQtrZDnDjS6i>r5;d1oiXru=X9 zzU-U*fg17Ncxjer5m@W%N`vMJnGH}0xnp;dqjVrBaQ15K*PM~qKiQ7|DN@08K&HIgv7U&Wrry8O*_fZz!pa`=|Lq{uE%yw3Qsyo<>9IOS<%;`= zhvF%xufG7UeLUIgpj4kqe;(4`3A}VUP1o>1m z0c85beKXL}j4`?5k-m)5uzg`>;l-pF=DjjmT6V2Aj%yEGGdk^!{UFcPZh0g4T;I;# z&+~YOcF6Uat^_UisI%*g6?0wlIn|f+YUdWY3zelgIH4;?2Lg~rR=@*k@ULs zytH>ZD1ALGo%LrPEruyRJ-aX+NbTria{I3-{0d9IIjHUd_Pg@iie+{E>3No~S9J#H z*Y@v$MCisf^?(65mES$tx_!Q9FZMA1ryriqpOfk7Oi=V0<9CG;YuO)%zqDhw>tNWU z;4Q3^*I)(Alua42)wjmuP67?)>QzL~m*>Z9e)ILq@tL{2_Sdsw(I|gYbg!KZ>?d*( zSGOkU6|nIET?k z*8$Z!v2GxGDA)V)<^5cs}VhoKgGh3 zzl<1SJ4WF(9Uw}&lTq0r+@DWjPsMO`q}68hfH^?g{C0V@Q;2M!=zkblARC}(;L3p$ zxZBEu*O)aWiKrx+1^E&Z_Q-A0+A#o#)- zS|Qr^>Sb98tAg~?W!v-&lqFj7%9HRN9J|@hGKd~muR*&⪻mFy_3MTQGgTC$vA)P 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

dI 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 z zRAVkjo6(vYYdiJkj1dfrb?W}D4SrP%sOv|pkh!eUnbWj=3*#i>A_Y9O&aCfuyo|ov@8SF(qX*&y_T^k+PcCOY?{hsX z0Nz3hxW0Gc?3Jv<9K?H2_9mY15j1;FB2vD*BN026bEhlOB*sg}Lr1GP>KE*vG*3`e zRw>$=Bwuoa9zbKR-ihZ`7+Sl9wJF|{a^L5xk5?K$YAI)TW`?MU1*wdl9Ho+FVjsXb zVCd*I1`s;%MD4K>KnxyjgfIo%NS<6SUn?W55--n|vdI~aMrgHiXTX)BZK}cS^D(=b!K*xX`Xf3{Jm^rP ztySQ?8b_%FEorSe=gQ7sJ>P2VLKgC$qj?q+p^14snXickscOU`Gl{%@( z`ZhD%`TWU}n$;EC*5^7H4P@+pFp^_B^1}`U_1`d_oEErsn^&>_mO+g* zn9hALD$P&&7z=s*KGg#H7|-vS9KVg{Zhy;K?tdOyVlT4qAfME)Fq34>iqW*!SiuW1 zziWRFVKpL6Xo)<}Uq^C3lUaxLF=AsouTYE>vrAUB7y&RIrKj5f8g{mozQ3Nhwb4b; zvt~XUBXje|bYw4jZjdFHbFYKAy7-8C8{@g>Swu$qrN^fyQTzW!`b~WE=IF9194W@9 zR?5Fwm43=Q?ChRYJGlQf`2TKJVAXF+ENE+AwLSDioJV#Kzl*7_MC!tdF7UY(?CuGA zfgj`OoYdM{bD@5)%YQ68V>Ds}D;vanOL*4`{CD_^7M)&^2xTkTlhWKv3%I>2_o$tr z2i}@{x1O{a(x4Z+Q-xLZ;wW+W?uj{Hgs)&Hh}>t^(mD!P+>YNw^?8sZodr-Hi^Zz7 z$vi=;%HQD5wG*Wv`wq?EY8lPqj_hUM&%N!$D?h~XPKU7~?F%Si4M$AiUKT?S&Wlds zC1kKhV_@okI|H2quFSeSmSpAz^Rrh!krQ>2m>!OC43S@Q5GPv)_b*^g%aDQD(|=8U zpL`b0n*|OQfy-V1`*79!`tJ7cn76Z<&)mKF!ScK#f9v;)A*?1hZ>L`%o~SWD^8jJ` zpT53$AKLob5|uc+c7RpKW*qV&T|^`k<2R9LoM=cjl$D!X*@cPRxe?0`;U+zIkr9hw z(};CoKC}q2XeT_0nr@YkmC@#@>L9ZVAT9L%#RatL-Y)5)d^QL6!Z^6*EhtI!aQi<+ z-E^0oDen|n^MT9Rp#>Z<2MSli8aJ_POpDSf);>)m*?Qb+Vl|MR=1z1R$)`SMpJzaI zhmmDs{fcdW9a}F-PfBH@D(EqM4L#(k_zE-Vp#2>pxHt>GH0=)AuENFUJi^r~IW zLwq@%N9@bKtXWj2kJy7RQ+?roErR)+?KP;xDMLykJ8rG#AI{pAv9G7$F8h+48aR|a z5yNdBTC@f<(T#oR&e?0i!yUJ3qg!^Z)YNfqZ8zYegMst^NXJ0{a zv!TKreA&mn8Y)sROyhobLFaluMbPW6!VVYhe&Z4LB{+@XE}p9vvUBD0vacRx2bTRX zM$97Qx0&vl(D6F#(le=@QAV5L5c329EmUtH%nTI)uqwxeia+ZKMEtj7$jE_ML4Mll9@hM3PrRQf9L=Tj;u|!e zm~lqk<{=eJ@EpXVD9zoM#$OVJq6}8nSvcbmaY3WhTKZOFXrcKx=c5|?XpVHZ3aS+E z+Vists(AsrFfOxz-I&T#d5hmCKu_zDvc_IRv~MF;mpIz;v>B!q9KDd^#JRK5MxGxS ze|8A8_ZGCMkMI_JXY9#|H%nRFb{!6 zv8#!7ikYY7^EsMfH*{hDqqerZXJlwbEQiF<4!x|;fmHerxN->h)gM~Z>U{$`3-#k_ zJ7-jh<)L;JC%Z3nDt6Yr?3q(D%>U`@o24j@tPHpxVqJ?EWNe@ka%>}4blRU8596b1 zSaB}qKudk;`x}ZBcoteb#yjKq+aT5_&WCc+8JI(%@=jR)zk$n}!Y3l;Sx?iMS2y_W zkF3onW>mc&FXj3DtktY;F|@)`cC#T|mIEs;Gv=#R?CfVeRqbWhBGyMHQrs?pTl}o& zW;S#h*$`1SV0eVq!B;6XZ|i8lAp0Vx+&kS2<*bD zASX?3#I1Y*$IduS(QXVz`+W?`(&>_{+w77a|K zXe+D=v#O;~)*{Zn0Ns?A88=sx~^*QP)R#s;m2_L(^gbvQetp4X~0@@)0M zFg~lqH^*Y{=O%19r=yuiw)#iDcS5jhFLt#JXpemUISfpdkd zBe1&P`eADY%r<1gj`2qEd&jYo9mLekmsO4MtL*O;Y!4@OC|!)`nH%cF&*uM~ zt)Ulv2Q((l=-XT0r}fd3mzjybV4pm|&)WRr0Gf#tbwHe8tp=lj*6?-XlZo_lp88mx zixD9+*#p@*eK?UOr4?fW^0xI*_HT6ucD2GI_BFGq_*}l+Y=y}8gvc4c> z8_g2vGvq}2BocQf-br>N-*txPYkXub)NMTMmy~@M*6_Z!L?R z5oQGJlPn80sPC=aGS+2=y9DyE2vv|G&nr>w&@>Y5{N=IyCKAjXWa2t@c_ByGryl%D z>yN&H(msOcKI5e?Ii4?Le%7;CLu`cmbv_~bwNu85_v^gZZU#Ib#-2O%!?=$vbUHfya zLH@VS<|SU%B(5VGY=3QEqU<6E=_?u)ZG-lba{EHL_TPvpW)*57^rrnI>VKtaQGV9` zH*>m_b1NzBmlDnAeO5MxJv1k&P4y1z9TxAhQq~n4T``lb_8-K$bE47p=R2?lr}r4S zy`L3yU~Oj4t=8^>&cC1Edccp`0NUHV(Xj2I->p!^^W;hg@ck!Hz{JLDNVGyv*+{6B zw{zH6YcKP1FV=2;!QNzI@7CnJPl8MK2ku(x&;rnU?!dW4)z*GAbJQB{R&QD@eK#*V z?M3-|6ragx#KRn~w{QMWdqB&@xu8Zd^khVA&5N%j_b-8l*F!~%a zjdcP_G9_9)KKCPf)tuL2Y=DK-8=OmBhI%(N<+MSo z(JQmUI37=0#I|q_J5%Ubj~NLIv@43)ctxMoQ|d3-)$a`Pn4FB!r(tFEFK@iX{}&Cb z=5wv)lk(_A_WD||Vs>u%LUtFbhfAi0+=C9l!Pf)h@E#&>nK)6W-WZrcST75b%R_t5 z4~$MMcy*q|S30*2dIxu}VuTw9ocF(4FE@6K;|42drH~=m_351*+IC$!>6pGZx9h_^ zqFrPS)z-K=wSd+Y3v){A?^k7ec1oHsZg%M*+GqdY)ELnMZ*HXIM|DT#Wv!6^s9)fU zJ=Sc^@G_s3EIry)>Eem!q|1=LDMs;{{&xSgj)%BFpAVkU*{$8BeFGAATC45{)$!<; zjWs{BIeSGCME*xi?gh!YE@bdH(Ey98x8~ah|N0+W(W*Ag*U7CDS@eg}ln-+>kqi!( zUMg5IFCN~-H{L1PnW!@r>wkN5u{8hisYY|=)Ky9H@;zoG<7~37T+qPHtHYNQ*fAL% zSv&Ilo{8x3^?jD6;NOqZK6?2htC(h>2R6-r(En3^;ce3wm_QgqYj?(pP={S7E}z`3 zNdCW*2zGaAGj?{P_uoTwFNYyl%`WPUhs!78`)Q*p->>frgc`eAYyh3r8By&2k7)*b z%KTrSChHv}!#sosG zvmFdfzMZbbCf%`Buk#kKS&l`g6in&AX^jnN_ZTZkwC(rr{&2H_!CW%q+qmG4E`llp}O!8*mn2fz` zxZ<}qkM`Vnak}ZwVQtVYqrXAp!6A)0o#+bnM9~%HihlUcccyFgjMZaL-=495qFO#Z z!?7O6?C|PCw4;N@I*r6L`^|^cW#?b}<{Q&n@5}nXCygZ9e{54+e>GE;MKwTW{ss>FqzDM-z zOIdz>=B9>PFgshlrkNX~V;L}*3Wgk%(j8%Wi2m(12pyNM zrav_Ksv!!WkwmYSyl$VA%G5o(XJdB&`vtP~us+p)_&X{9NHQb<`=1Y>)7Lirj{yi3 z9CsB^Vf@U#wMu`(64eEayNE2G{BKyFzYC^*k@d&;hkuBYE=u11603jY?utg&?#|ar z{x``!>3REyG`dPaykGbgln|%YE-7-?&+WI^f5Wt<4%16pBWim1VDdro#8)QoR}ZUo zL~7&#b#Gsk%r0uabc{Ks@7$agf2`fuboo&?%JRLXHGvPTAJD8MerE5lQ*LFI@Kqf-X#jh1 z=qAM)+Ur>Sa>=0E#HPFfc>p*S&2U^A^rFtKpWb5ku0!^c7{|vuGcVmkttI}3q4!0_;RJ*dqr1<74gn|e|`$h zCCg;|ASbF9bxwS1y48;?05ssW9Z`MwMQNTt7J>abyhqnj`BIhIx}fm_uIuV(D|4tW z5+~J6nnPDFe<26W*St3WUyYys2Fo-rJUROS@$q>vtpB#n=UCIBM;=BTxfpkD6ESR? zErfAjF`W0}kgauR+&KN*sjHJs9f2Trvxcg?Et1pC|7N#E@uQVz=kb8m{m=$ug)iF< z8yFe=JO+Kl@c&?g&_ViO_5A?Sv@(PnFdh34=3BGnH+PV_Ow$K@a(~Mu^sS!vCtOHIs|*gIGIq@<6D>Zty-e0%3R_#?I3Xn}UPq!4U|1i%SH|v`I#vo)}pzXYF(g{@%}Z`oM*&H1bH+4L$v0SG0H-6MhDde&KK)IMylMJ1hVidQ{hIB(83p?0<*>Z-u*h znXWIE^;o~P$*TWj^R&z0S6jbt$-?T7vrDh)M6MIJYWp`N|2*y2wHAJz<#J>z_=qr- zdCh=1J+$9yk6C{Ekjprn)~sIA*xIjAA1(d{)Xx9-;;@hxwLWBvVP?N^m*_@r&_#N9Fh#`4WV-`g$g`@Jbq?HC(v8&UyfaJ@2vHmdC zu?IDq&!5rtQGK@_nVTm;xS!AK``_w}BfI93uIbNN**{PHQy9R+zy(|`OFkKPKiwbz`*n4AD5cVGK4&MK2gRH~#><6IIPc<+f-*dWS?D@rWu!{iQu};sH&+FKr zE{LC<`fY3C-oNQ3w&T3KV|#4M@2C+QyPDYb7@y|J^!f6`4D!BoX?t;Vqa(`99`y6L z6N>tom3w9LzV$$wlx^1E$7)qse8cbxA5nL4emQLPu3jg7hd1ijzvm9C?XD0zov*)~ zEPbKxsyjKg<3ZgP^gry2xVIGR>&$Rd(TTl+ zbZdeZk7y8kPFI}QD?G)^yDq324Dp;n((PQ~*sur862AYELC5e8j_3?_fxEBK{J(f_ zb^#~ZV+Xs}wT@K=>wK|&60rOr`5O(^-wxB*7LXNrm$ixZ5*c(_y(ixo}>s%!j-|57zQP$1JT)F<#fQBX~u0^F%vOMaP5|B-KYoHIhlS}G7c%#e@Ax$6$tO?dfwA< zRP@>%6b7I&fEOY+fRVFI!H@|!AN^)Z3w=xL%_o*yvQ!fcrDe0d|MAA&sK zSJHJCPOmX_LM&fBe%3DM@3D3AKW6^y>N|D`!tEKkd{BKBeB=WDJ@$wA+p$|FK~I3$ z{VfI{>#}}o1AGTdfc8**bil-8lcyHvKiZ7C%d5LOduKc`R7|SSP9tkiR(1&{e^GMJ zL%qJ=R}QO-_sB!XETsW1PyT;jw$6SuziKAr|7if(K%L(3yky1ogWJ-b(R3gh3YfYQ-m zIy_5Vn{KOe{qM?x;sfigZFZm270SlzTKM+j1QGkw;a2xFQo6#)KVDX3_GEfR#`VB7 zl)U>HJuc~U-$?rHlC5G~wt>}uZ)bVspaa$P^7+?G{_R4vTx0OZuIf)o?4OG-#Xr=epDO~`yxQqI8ade>d!ftx zKm%0?ibxOXaYiF0J9J4iE}JV4z-Q834Wr_`c)J@mD?9*ugg?8Hb9TM|bqSTV&}B@A zFuTOrDI5>he&a9ij@8Y~YW(hLRz?(1Ci%%Cl>eQ2&E(6n|0;sV9eYIfdh@M6aQ#N_ zU;RF0ko4Q@ckJ=aPw*<7pRC(Ge1#s^e)9dY1o*`pCi`Lr+F+S%{|d?f`t?A)Yf5zb zl}1XvzpUw{S*+!{)?K&5ut6k&<;x77TMu@`PQCLIYI>ow&^@Wxe5)7dIn@%n#TBt5eTdF-SHYC$7hulJ7XUXI8by1750{f*+*6CN=`r z0$U@a1J^#P`#5ok+V$_ct?~F#di8g8^3|sV9yw+N{x!X>MuAOzf06~agvRZhbslx7 z@xCOD`tQ@P${s&ATYFk#hD&o!caQD+P<|rBSk;Uk2r`;7f0%zf{n_ccsl1*Q!xdL) z@&BP2mMdDJ@z4cu#ePFaU!Szg_>cR>zO*ai?~g1%941$#ug`n>6sE8o08H@3N$O`B ztEJuL6M1(_8w-(&9c6Wn5JxQ<ok9*=oT-|9X*=eJ0^G z`UpV(^d(g3xyqo;oX; z^l!PrI%D+d`H$f@#_aHYQZE+>$;bA={N?2@n@yJ+(EW3)>shg*(I#?jF?(xUCP2CqfWnz7;uj)CL9X>+yG-`3{1-<~Qmd!F$V z$W?I6Gthx{Eo$g4iT`f{1SbNUR{(Z!9p48w>Wh%O*N7xWoE z!<>#OjwfO2)S>8O2PyGAyXmT7BXR*ee|XaIeG>z5>;lLqQMst2IYfzs@@}pTJzlAC zf{4nP+Sx}>dHB(0t)+GQTlbkiS4+8Rznj6?Hv z_}r)Uj29r2DlX8yLZ6T;xX;}_;ivG}Vx3}8+FgmXon#jV77!m zdVAyalj#SiW=(FI^xGQ*4}hhI+i%umlOFiM_W4x@K>jfU;C(ChDSLVOt+J1&Km+je zS1%IK8D!i6kj~hyqhS%+<7>L?!ZRnoH1+FrBVOrQUCX6CJG&@*M)SmX(W!Rhe$0VP zfJ!E)^s~CB=M49b<=_rQ|8_u7+eQ=c8J^WVcyH}t9|Rgt{XW0{=0Pe|(Th^YTFrCv z#NmK2dAnP|u;}1xis3|)UrGZ!QiT5VJf`bnp-j6!dArj!?9rwbccFxQY1&Xq_J4gGxdi@Wgi?JPyFK60^fpJwWABcszVp9;{K*69DRVb!XL8@tPi&_9?rosicBv+5f}U zs;@k6_>2mEUdr#ob=K$_wrkzm4@WJKoS>Ec&&k`4*=cn^EdP!DUetAcyFSeeW*ia6`45fVJK_NHOL!vK{`mgyY&`W>lqG#jTIe0=0IWs*0$$xnZ<=R&Y4f5B ziXQEUHqQ&n`C>4N49{;qNB_}IDyOB@M3idFtR9&RTvWLZ9VYK9CV|@Ob><4~Xff{D zq$h|hBrd%Cih3q-0G%&~p;y)>ed8J3(~KGRjlfMq7x>uehu=>x_)U9knts3#oJs>Mn)uJj zW6K9&mRQwSG^_SXdAwXLJw|VD(^}Ne5DP$lW5Z!ycIl4vrO=gXcK5ku?{1e@q%w$4 zq{f{k+q_qIZ2f+*V?#Y;7WwV+_9MrxuhWNlq!Xb2P=Woc%v;oIq}xyE(<5sT8)nQGT-uq(KH9Kx zd|x}p^6J@I_>hVpodW0fD(sML(`^^$mbCAc9&ohLYk_c{nx=rqEotS5^7QKD0o;=R zxyoP<@a#nNQ^Q!Qs$QiPzggoY2Pj**dMgD3P!Axyz!_nGhqQuuI(qmSmBn4V2;`hR z$g{gXoB*+k{GS{a)&#G0WOLxV(?+BoA6UcySvAV{q)m+i7S@f8wT`L!-Ra7u^QO*V zuN%B?RY1Q?ds`(uiwnDw^NaF-JpImg9yp}yzquSXxxR`GNi>)7T|o>(krA5;;VSynq{Z`7mv%{Lf#B|EaUqjLZ+ zP^@)HdXtShzj$f+RyGc-e)Ma0jWB%?zaAJQ9eO&VfpTW#LPRWv!wlxjZPdN}s9A%A z!JBT%_xgQfc>UD!g9m^M4C!ab<@NRX8h7cy?U|Jf>l1D#U|fJz`b|%W@pTPden9%v z2#vgd^*?e1dI8D$tNL3(n9*OWPu@TERQ}f&S`koBb!``PJ$ilVZ>R@_9<&>@26=IG zw;hh2-PpgPSHuJEUQbY%pB%34-1Nj2X?Q!`h=OK>{_6_IMxNR@vk}l%xqSJ3>sciR zOz`wRslSiU%G|45zc>%z^R1F^XZ>|(x}$fn184~z_>yK2Vnctc2eQMp9F*KWIfaUk zo#!rZ&0=`z4RdtI)eQnOUNoWG8>}Bb##+Mnun-pZ+hbA3=Z~oQ5j~#Py3l<9nv|&+M>;t_H4Yf8@u*(8dr$FJu+7se8Cz0FXs<4p4E7**9gnE+Lc%R7}Vg& zGzk{t+^(8OK?|JHvCnIretNJ?{22Rs$gLjTJ6H7oNqvi_Z$Cm~PXivAY~EOosb#yk-%zs`%m=HS?SI+(2ttghqHq`VYL~L#~arB6q^Q1 zL1h2Rr0aEqlz+I0L?rN{UVD4mKe-4ILX-YS?TaITbb8(rL)q_cdA*)tuFH9v6Rd4r&uF??-J6b=e4S0xlKR5WPSZcsJzg@5 zw+K-NPHxTr{)T3=skkbvHF;9sj_IeLF6P~>#gk8l4BOKR2aP6?C6uq#=|)zUB#zuo zx`RgN@nYieGVr;{uehH5o6|S^Wp|u|TLB|q*n0NeF?S%ZhdpylpWZXxI}`zjgw{B| z@e+r~@?piwMT!MT`vv_^8_*Kg7F6=Iq(VJ~eh79GU`4h~&dI-yIGYp;tUl;ha`KF% zg!eVGm2z))iWRNvh`A^w!w|LdC@RquL# z9^8?!D<@hH>U?zc-n#W-e-T^)vHuqNIKLTe{&z#>?A`Q@{JQVNPJSv4@Nn0EV>;o- zL;UcpmIem(Epq7X?4zXS@4B+y#)>!i= zn`0HoLFrv2hqR!vwOYo?0MS3arWOD%RV6i_i+xlHyngeyQDgG_P z&jYk*VX%!tdFetmc6ECW~)Zv-y2P<{;GV#&&LD!?)0LmZzZ48gH0#Lq?#`; z6R0j&B@mwg0-*NSZhoYk2QYhhzIm_m_T~0h?pW|c++lSAw28WZY=Not$uDF5*)j8$ z?omEe-UeR$P?)U>$8B4W^0H%Q14Db8?&S}mM6CYyjWVvN92TrVghvaiVbLd5A8=hj zcJA)~)STK!Q)i#k8h3JZXj07u!Y_|SbdgQ4F zo!j@tCK!Hp&QKpPuivB|zZD+IE8$Jx_+B>11HT-?L>3S0xU7fTQE?`jUEC}9a#yt4 zS8aUA#FmX2B+Fjke+koEJ;Y1(^;(VB=8e4AY12GK9skuxKqB~}R;LUK`^#%5uRQmw z`~T>!2U2oHBY9clb#33Y@5XJt#L5ov1w-Mi&ikc7{_P^NQTO?Zr1nj%2^{}*TTymkUb#E_ zL40fdCH2NsF*Gsc0sfo^0KK>?{j+ZCM;MHQ|hr1?~ zE--!FK0KhBTlW8Rdgybh*R3nDL$sU@&8`awtZ-(pjU9oWO8@9XbY1gtcNqLiGj^F? zF!|Cf^K#kfwe#Th{ZtLC$1htxR`BQoG%HkKi=^2rGXA;&i|fZK|8d_i+5XXk7`uk( z5GY583%J_ECnxTo+>R9_wf8AcdcSQ6}}_Gk#3uvC;xQUiL=e8 z;oo5f@DS(+dI0)C`ej6n3*2z!Fc{vcv8PXu8>|QJC=4HdMV@3|d1J;}7EMhJ^hIW0 zF8<8y;O~o8o=OK_-?ifULDxsVzhk?85=iQ3hx2+kGK*$@*?cG;R**h*@I@A0tq(7M zPV%pc4c}8m;L@(xLsgM%F)pB3<*+`_o{RPIUS$6-O2$S65SlFZcZE6u&~>w2_}6zQ`6I`9X`jJxxUo;%lAZpqV(qOu?_|012U-RDH!J3c&VmuZ zLHIN>G_>5vE#lX>d#}*t^b!1w?$9ysKk_S84cqN$%OvuhS?t%hIxu@zN(bm7H60V? z=EnQNuI1{!^>8wP_xE%fN!Mvz&Hq$q)7P|?UY%F}o*@sR)<-P>hL5g)Z|^<(fWDH|EmmGDQ%z* zK)wJ6P+tJm!@K|(q1a*8#7`#9oceXLes^~`@*b?-v$CxlCcSc+t2Pt%aM#IT`|eJE zQ`OJ<{gCpV((CG0?T%-k`<(_)PX#Gf8!M*+vi-oOWB;hT+NY6bvH4=MFzPEsjPP?~ z&xVe1`bERMSYMN0FMy_98kT`!eqhxsfED^6kCu^m_EE=Uh|Kc z!}GAe&))rZEpWdx`^1v`kpnslPw=AFpRR-l^$FO3+E6tMjw_0WC!X997j)&i>yu8N z4NqGJf<{m?jG0e{th9TwaknOoKhDNu0pmr98nLUe!=NbE2XAuYR`$z_3cj6KH5QV!t5@xXU9))LvUKIx$5O4yJ?W5#lBR3={`uKe9d2$*>h4JT zpEu)E^#Xij^Sfq|;DwEVYH0TdX~2-d8eGr=b4DZsHPqiwos=A?%#o@M%m}F2ZG$KO ziQ|p37Y7gb zYNp&9o(RN`KQl@_oRdCh+U5=K)M6#p`6@x9_oaQaoC2`TcRP zFtR>&4cs96Kk|C9eAW1jy91DRc|aXN@Px1i^!uCY=*!gS`@+c&l*@d&D-b*Cx-oi) zKPv-0_ItrdAGyo+HRji>nLV294pea9u;>;eCkVTO5AyuST4uqzX;I9U{R z9?{s(?;$g%Yc}gos^DZ~al{GL;IN@`TwW93AJHoQL&%a!VrvGXHTK^o|A%&TGf2uw z@nL!UpG<<;a#_NCTdCp;7W1%d{T}^2zcqkAr%xn#hXWkcyJ|mpix_+`G8sSdJ@0|f zpgItX(B7J2bM{e0aLgc=i-$As-*dX_M^WtX2t@&vP5Cjrv<{ z)oN*l9a_n=s>i&et5TuD%jbcpN@2AAc1&Px2Lb}>XY=9F}pYX9k=Z3#pI91 zn)qe$`5(g7?k>`NIG_H8em@k;V|LQNxQ>Azobl0Y=$|@Yv1^xzaNM;A+lZ&+ z{6>`2Vv5^mN2CNfmuEbuqyMO5f3|tz727#=^CVH%&KC|@{ogf*PiE_vZT0Ew;)s_F zGjK(5!>?k)J<*lAqkF>vbEizR?3XkRKl zXt&DyUaoPxxtXv-qD&twU&ho*-~mGV*cfb|G3Vr+(Zj+2kPS2<;>PRBQ|Qj{g5+H7 zqMn5+r|1HF7rh-Y-!PqVp6mpI`3VnSvj^_*%tmB(@68Msd$8-mI#MP1rA7o3_^c3s z>7U}(Z_Frbtr|c4lC#+-e%Dv;cEWp_9d+j`i4Tkp;|2}c& z#CxZ{6Yt_P-MilUGCA(>j^b0j4IvbejInzthU8Y zA2J5!%)TvKrTb`;r@KFP8OkiKCO0&$GoF;ifxOIZ9oZXBEPq-vbwIMoleIcju8K3y z%64wpxz{VA`+7Ry{N~S5NTeJNf8f|bx6mYq*7JkEA>zl4CG%o)a%v@Du3Nn%=4@$LYZhbuhR#Axc*z(>(2XPd8)mMm(oRm_%)@}+>3n2w z%vpn-ep72=I-CEics}-X`=6mQ7cXyQBEl*j7&1KHO-J34v|W{atk@Xs(skMa@SQzl zabKP;!J?p5UfciV{jI(7($4daJOnI2r@+;XeOq7Nb9ngXNzL-jt$E&| zxsc(}*+5PWkN6jj*M*%Aws=R<6(3^iS(6(LHd=Sz<&$Fjbg0>p-@^gm`HKeNe5BuA z0HbFhD~SJV*YC}GZQUVS@J&Cs0_qDVCSE%6zR9(U?4L;M;DY1kjeWGgnNP4)*NKDX zx0*hC8q4m_C=d1P|%TKNKxZmfqx}({>rruBG!+OoRy`}BgjurWb*3rnqg&MC#V)gMg*du)@X-$0JYx0wI1{K>Z>S`Wnmex$C=-s(@dAa#@-1*n~g6>(Y zylYYP3)2EmB>j&y*YE4q!(#8uD|>%v(ql)j%Nof&x*ur6_30`|0go7}e|KJm%5`ib z)iHPunDTTXPyUKN@tN+B@BY&PDZ*xw1=sU;>(2bEEdQU=0lzNO_gJ37&+-MnmCtZ* zy2V*;?Tioh*WEp?%^&$iTI6}@FFXF|w6kN9r8YsIa1j7*!5h+X`V*)W)&uZ${n%Fp z9{r3shW9iFJZ!lUxgGee2ue>E`BIz(`DyoLCpmS3yc-gK#qb&OA-cOPUGmIqoX&o@ z(ma1>|@puOIySc9X=NdCkt1I}2 z8R?>Qb$qZs75gy%4T}G9eeig(eKGs71a&0;s#{)U$_Z z;`-M2jlC+iIWx<-YR7tIaq+%M^%?PUj_voSlJ7ZL_`_!$Ib*-hv}xShKh!n+6TNbB zlD~I8z@Dv6ew9AIbfY@{o71`Wu3p+-I%(aVY~R$V^3+c3RrSX7=26|BI1avkf1AWal!{Cx28AIsW5nveheq7~V28I7gMpFG=VI}Xm+SK|h+ z+m*d}K=j|xiqo;sPNg3j^uRxMxB7kPsE(ohiZlbZ(u*3&4LbK<(=~SAydzzvI~jfl zUqBXzM+Te4eZV8(=Zu|Fc$+FaFs9%+mp8&oTM3so*1t_gSbN<)=x*JyG2WlomDumb zUZy$`!ogHhKh+i3?@Uyn4iIO~KEfjAP3yO*rVIo7l2*lEiZ9Nb`d$`X4nTii_MYdz zR+yf?-XkLj6JY(}6IepH0c&U5#r$>>k>jTWGjM=t3&`I@+TbOV%QXw*xL8A1 zG^6@7-gJXd})`7eQiFs6?ev`Hu6GOKdDiKOHMOqw@}q{>A;4S+e5|?B=5E#SWcM?5r2% z?Y(<=$5@#3V&L-9AvU;r@Mug_=pRNLyjlkk92)rmj2UMVM~my#4(Rsfj2L1xkbJ?x ztpt2tsQ;MplIO#r9T74}=Hlty`y|#OuLhS%bU~MiL!c6H0K1G`)f%*xR9f60`u3MB zHT{Y!F+0>>2gc9zY5fE*?t1tgu+W?Oyi5nS*vOPnZ*)ViszcI`~{aSYmmm_t%=}9#=rRg6;}dxoubZAb`Hx|Ax`CQFo>d z`pYh>G=RFFUDCLaj-4706%May>~%iF|KB|A;Z7%Je4!B+TaR^eq)s)i3Jb^>sp02~ zwJ^$;BtNvWcvohbozXKujDJR}@jqKTYliFmwwbuCd4e0-_nQvm$+1TGc(Mkv1SC;J zu(bd8?~`(YIsl04tzz6Ext+0VuXP|N2@e|4A4vcCUCWV!CUDiF3A~?u%OdPHteuZ1 z{}AF62IOGm2t)m$i;&8z2RXg2nI_BjR^Tarr+fKv^6<^p|2LBt{Y~(C)HKPAVC3PW zUzo1Az3<2sUz`7QSI4+4*;J<}O4a@6yzJ#)V&cCkq-@cQQYMkzK;CqNhcA&{ZD43;_M$lU6Ops;(*!5v-28rnl~_FKcCQ zUu1(RD}VF+!Mf}HHL_y8qW9PK-T%{#iyXOZFLo@ifxePIU%8%&w{-7p+|{jv<;%#w zWa^^iUv)kX&$@&Ej|I4GT|u@Px&w{8e;i*i0IUyMXvY9P!pQW;_nSTV{yYfPgm^#I z1Wi6T^}DbkyX)XK!o!TqmD%@A(rEP4DB)vPYV)LCS30%4n|G(YoSnLR>`c`SdL62R zun*eHn+v=ZOb>mXw(9YlRyxF;O~d3ltOqo3w^G5EGtdsmL`5h~@p?1(3w*92mEp0B70M!xY&T7hjhL zYfqt{_CNgp>aG};aaB0kXL{w%e%Nn2qK&95UrHjJFrTkDng*}>h z3OEpF^w(4E!uqBx|1s?WczXK*&d>6XzZdq`!O8s@c>+h}|L>n3I3XRePqT$x`}*c< z^(6CadG9~U9$%Aw!A$*JdHi2?-Ip~EqA4iN(Oo+>(NSHSx*FppTDU$r{*O4n|I)hn zdG8&cezKF29P(e2_O+A7$!domtThw;#u`vK z+{48RSZAtd?GiX*fp6`~UzEL3lgQ_P!{8t2Eo2{#Et0pH#TrkhJ-*hp$?rh;#JRFE z)&-vwek{_%erIWPcEPHK{8>>lJFsFkU^=?c+t-DGsbeC~eyf9n;^6(u`(q_~Wvq#{ zi>dgT9px$D4vk#`)hxa?nXjnKfhqx9k6BC(UC8 zkKX??2Z`Twi1Nq3XZG3kdq-E$Eqa&tfEfrq&=o*M@H;22p8Q0f*~6Vr)?w~6%ol)tY?~MMlh*v9 zjj|{lpOTAZw#fT}zm z1V3MPPIQb7k0XQcVa1NS^^)rmzc=e6y2pmetu5}#Wa;!0*VRVU2O+>15=p4{+oOGc zBK6sH?>f zhP1u1?>~}Gq5rQLWbuLI|McmfPVP~Cp1nC$_ifn^6j0|6UcP*QT0Z-EY*gH@$A`#3 z?ccaV;JQT#I*8c=6h~O*{~5*p%T9c4V*b=)@v1)4S#KEfqS)(rUDq`y@_k!%U#hh* z9Cse>WT#fIzHGYKj!Yn^r=3sqH&zL_Wp^ekf(3{L>CWT^c1~+N-kGf6iyA?!3pRd4 z-xg<8_w6-RC;H^5=Mja|0Y^3Jm=`{&P7@M{!67rNE33VI@LEsoyDEO5-w-+&7<(k* zm*-=H#TqmaT`r1;Uds)rADrKF^#E9U^7>=nPdK}ZyL|`g$0(K=P*cbX$}!6HsU22# z4|kZ`r?JRsG5*JeNrb&bHco;T7LmU;oAmp^&%L$vs7D^YpxmZd1S=9Y&CgZ=$^NOZ zvod8%Fq(7~wo3UG7bhK<2^a@QcBF45XItm%A74DbFkgRB5&z=;Uz9dDK0R>ojMIAM zsOcQ#+YP73XP^xyd@_vG{Q(4UU!@}cy{-l6tOySMkYSL#to zFy!c`gM=TLCdB2|KlKY~j4uuG>vlyF-{?v&O16KRBwm z{wPoGdtLke%_hX31YFvk(Rha^`F3s-xnoUzCtLo|QJ!xtvQIS!+u4C+8`%!z(m1r+0lc zfF0(y8e)%^53-NTxmHNyD)~5aWh7^e{zruHd4oL35Q?bvLD4}3D}pZAsLr@L%J5d{ zzS|n#Ur%2!^^;_Gg~6{^_XEFE`6C}-SFo|?k4hi7-&p&n>+c%911Eq7>L6g>FnbEG zo9&1FZ94Jp$*o$I|Jg`Gn04FM3D?dXU#DU8BHJhGH?wcldmpB32H$F0;FY7zMYG$o&J{acQ;$%>4jYZ2}pFhahm>+<{;sDUO zdb41;ir2?X^H^(#A)ulS=Z;@`P)t53+(CmiV%4DldO9AOemT6AXwOl6BR(v|YU~jJ z4V=?CFp_k5lo?X>PpZ@?jEq2Dil~E!p(m+S?k59qU)F`^czqpST?a(Zej$SS$F zEZ0sUQt!#zJ~FRd@4VF-ce_gJb_j=tD6nz7`OEq_qgmkH;~cO?GH^$C#jb%*B!XHn z#22y<_ED2vR9pN=UAA^frcW;7KPGuUF7JMEy5Oi8XJ_$`$lE`?|NTC$_fPAJ=JxJK zivD-&XX{qnBWZw#!Xs2_-IqjuIqmfiAq9tpBWxFc`{YLXtnBdYqVIPkahvD29^W|Z zJzU4>NvIuEe;V)inW1i9=^oDM7?0+E|1xj?=gIp@A>ls{^TYPPG%5RRlK<7t`@=Mc zEat7vD!wP|O&=E>=x=R}UYWOXM=`>qWek6pPqIvBz`ECOgU_v>k{*h)icx8Y4T?8> z?yqGQ9?Ij=6dD6dxhz;22dx+u>9>&&Dh1gD+jo0 z>t0`0BK>OPbbHyLXL110z;*J1?&-)dXx2f~(+rqJxv!&>p(V|-oigcO{_{8^ya7Hw zx#P97=vMvMLqi-7pQp3O{X=yIgx%983;HzvpB?}{MOJvHd}jV0z99+b4R{xxy(qmS zdnJG9^W&P+^O>B9CwS$!e0z2z_}~%gm_5?~5DXp-l+fCNpFmJ)7aXcPThYG>CH_D$ z_tD83pL>3F^xK#D`bH~EX8D3g%{+?}k-B1Y2m%PD<-zvS-g>CX>0LVOUtaURM$ zn9dG9-RCdv+AeA4zno6^N%_5RbcUz%FTRxqykoet%ad;L(N6|nLM4*@<{_G*;ahqR zlfsWv!=xVZp}sGhwp?p(yCjJ0u}rvAYqm=D4wYT}@t}*a9kHBsJyg4`?%Qt}pD{<{ zY&xo24dzk*Vw_(#NHl0R#d%^%`W?&5r|cfH*5DoUe78uN@i^7G$pJzIWyy3c!k?9` z!ur{`|Lu^W0u&brnx-$}GIa#Ms@Y`E>1`KS~4?Cxa`8YU^FB{|^A|R5$bXq1> zIkxWT+rjE&Q{?v9e@K~px*hEg%$n@qd!k@0Aa)p1&tD_k_;vcWu-mePd}TQt{B!lZ zi@K+?dJmJBT#Kc313ReSB016uS2O$PC3Q!2G@L_di74ZJq3Nhoz z9rFsrSnZ9G6Zz92c*M?eTkHFK`Oa@lcI?S}N{^G0|F@?hpBmOWYyhj_s^R+n-b)O> zgv`r|K)>yx_K=MalQ+J^x4^tD}q9*DQ4!~T*6cx_QM>ANXA z{jR=uN@qE~sN(8$%QI%2)xC?p)Ks6{_kWUXu2@~qXL~Mxep{>A&JB;}Gyk&n^t1lD zH|=oSAn9jzhd)eOZ|c7FdxUsmIEehQ4tPV?4mN6O_kU$$XFtWK;{&L^UoQXt&-p!* zN&IxN)z5o8l79JqTIf5SL)PCeKc}RnWMt%elc}J$}Z%U(ai$s|e)#>kb6v-zg9Hbwwj^u-Svmi}?A;-h+{= zkfFbpuM$`$2jU~z!2?`=#?PnLo74|XWe-G8Jup9ChdM6QuiuMfec9ogCj-Z&;qY0$IN((JQEk;Vt7qNNY!QjH8hDU%(;#XGaTl?NWciQm zZtrWgZ`|F#Gx=Ja&rJ&~${X0O`1ji3j`2_~%p)=`?4A4%+0%zXHzd4z2;upiYmEFc z)UNGyIdLBCr-!_`I^QqkTW=XEzMyl=Nybl4GWX59Kdkf4%`2GS*-uOE59{5%^8$`Y z{trs(<^B&EUVCd^-d{T2jh&C5K|AWiDg$s=<0Qhrsa3g0$2o4sxiiknqqsGnVuKl% zH+K6qHhA;rW$k~J&iG>?Fv>R0X+Wxku^VPj_W5@nZI%c`@inuax!9T|({z=ciJ1~j9+3)YQns09O zutvr%Eo#fGDZOp=mhtyVUGbTNju0@;Rj`vp&EuyxA7Tamz%$|i*`^R zgMWE)*JKuFceNy1#jkz<>VU@`JVqRF#05kEGxPOv2K5TU6;cC;FRWH*vd6L$4^J$b z`c>Hfy`4{&+tJpHeJ(%W>-x0lW(Hp|kI&3ATse;l=XaCA$H7~$yBA~-13=8L%c34A z?o3oL?qo5$`+H5g;D56#GTI`3h%ve3F+hf;<|HG3wo$bbqA8s4eP2Xz%7tJk) zs5(tOCXOGhKzCoUI=`Mzpc+S(fW0TRq>|OwFCRDXxXwa;NwwTRgdc_v{kJ2LNdB-v z?r{)~=-T!l&OsxwXE?pQ2~5C?`WybnrdTDqZ@Aivl7nBQWg%0$CS!->Gw+qPeLS~E+t zcfXFe@saHN!YuP4o$>e{OR~|2B>zXHf6h)P;P<u&n<9c_l{<9>cE9+@F%q zyE@mnvyqOOpn zaFv_7FGs~0hV6eoxl{wG&!nE@*YwwC(qDK#S2lhyVo12|g?17#K6Z(h4O!YJuJ3=9 znP2a?4|Sfecf23uLFi9#Pe|VnTWj(O_w`-fAh6Eaba*~Q#c^mIKJSRM!ocv3S$5Tw zyith2A+0p^UVIyR?Bu~3K$CS)6+ce2);CKBSn+ya>WgJhKrAI*fu1=!6^a5>%D$<; zbkpPk;6$tT5IxN5d%qjz8#iq19C>#d?!TuGocdChT}7X|-HnDF!Q}s;d3FoM<+sl# zevo|MwnhGG{IGt;9ze7D&K5-q8^rsWsFL`dlk0|yJdyUgrZd`!6y~YV{Ss6CsktDiBanPk;u;pq$L8)nR@{Y?+3wWU|^b1;m|l$e10 zlh=_uFk*W;Q}6*)6^H_9qwx$f=yn?A`H82^yW^{I!}<{qK;!fj)on<&@z7qy02D2_ zqEotNSq(_uRe5kfYxe{*{<@<6U9-(EjMe+uJ}-kuW68PVy55m=d^i7U**q>C!R&jd zR`luC_2-(W%kzSv!|qfcG*R2F&6?GEZlAb6>G^ruW{tdjamMj!n%#={FGxBMPx=oT ze1IkWHLq9a_18K10f!I%|IulPqqFEIZ~OEGx-o->ORSk`k;r4`)}!r?@uBzT*v)DKi4bJ50Z^p zAoq4|e~-I4*r8|ankfH%eL4gq=#)Y7m-ab$wHm%_I*hW&nR5Bp!~5Go%b3%29n>&uL*khRkhM4e>mjtL!n=8XHgVt2_u!4v;wnbh^C z-!{2@9)M0?Dgng)n0{EkIsxhGy;iS{`+VsQxOETvgWCHWV_4S!=-@he|I1CBKJm<{ z%VT7Hp|e~xXkjRv`oHTNw=X9D_D#}NKmnW-$I#3K-eL0 zcGKW@!++=qm9#u4%L8%$ z{8;$^$*t(yvsn85Y~47%wXxSxNx#iK>t6YqMsVGbx9=uBw`4mn?K?O2KmVNUJLmn` z{_p26{6`V-f*BX)o2%v7Gt}|Ko*$RJx7+rol6!J{Lhqg)2VkFGKOv2)GB2VY2Wcl5FZ*iLDpuCEGTMOS#cFds6+Et-#ss+A~MCze} z$8%L0;l{38Op9%zg5Z%NfGd*yOZ&N_Pq6548@ysZ2ab;T2Of7uQZ8>V&ni<&PeAN( zarmzgY*-i{--_pm<9UiH8B^i~}_ z<^Z7uVg+1*m9za*{mhzJXY#vKDz7eUjnkm4zY#gFF@QV#IE^NIr~41yvc11{?C#d< zZrqa{s<-SFwf*82OhBH_3;P@{@T>9($oxjV$1B1eS~+Y(zXHGQ}+}rW5?K^k2!pYNR9qX7R?Q8kF4`+*J_05x#`;$WF=H;WS^En|c zut$%h!Ug8%vwNJIRyd$f9Mxy%_leVcwxI96JCE(r&H$GsYrJH#CHkOuv9!;Rwey}h z1|KbF@bOmq57Kk`_sEZ3mM*)lPv4b<+fjuDmqWjKkV>2xGJ18NdL#{@>+Ka?{ex*2 zEC^YYv8ST_i&R+ZO$L|e!yVJ=ys=N{&0!9#T1*}cJ-xX_`gV4^q4SPhP(6OEAGzQW z6IwDHhaQmiF|&4S)N|;Dj?Y(ttnfrUA2DC+gT-Nsc#9$i8UXWKF5vOxWxM3VPGGYK zi6_nEd9xlm9d6X?&uI-n0Jlm;#+_B=|KtELh9K^2?6ZQuWT1keo_0%HvzZtyyNUgmEi4e*YM8zv7b zqJN~j=4YE%-ZGm8kvlI0WmeZXRxRNy%Bkw$yH(dM!>Svdx?X!3yr4UxzhE7D8?W0v z?VSCZl@Gg0_pTS4-H}%a+u*zEtcEA6qIc8QMjWQIU6^4ni z@jiu_DZ1x1$i&;lYxF6wHlTp|^Qb4%<=SyX1Q@<_fT)56P;cPQ@x0XX!|xXL&WHxE z61-aSP8N6xVu{0(J=MNEc%D8c@zQ>D0=%T7E$Bx-?qx&c-=F-xHEpWLgM8-5e71^t zs}ChhcG%rJ={qQiJTR-gdwBfr$?p7K+pq7xJNbV@{^Z7S^BzbxRn+{X$m07+{hh7H z)3aWx?SESQzkN~0!u);mzgO0NexAQ9;IVoA#}C&3^gR6&`}^RIEf;t|pE)xm@3=m> zcYeo;`Gs&c7WTY64iYz3Y^s>V%jETbJEQ^fyG2@!-+gm;u2xDVi5dX)fwJ}_-ke|3 z-Q)N1nRF$_p;60pWiowV;~>f>;TLr*x#+P{TRrCmT@6dIq~qR|WrrCWOcL}3VDL6*$?EF9^Wem@Z#yklW)(zhX8C|_6`SltpAq}qzCNvtJ+6~ zaJ2vWe~K0K2p@M1Ts043)rp(y`0-eF>8s6*jOxYRF>h~VI3C-%A20qN*^2a(dIoj< z7>j0H?e;4D&EBi{+qAoQexKv}zqscZ!s`yT4ijk!dgP_u>2%c$xO5N~aXBr3#|B>^ zdk6MVLAIdr#6je>iRbkMI4qA{S5EV3R-ly!_6h`?K2W8DnZdWG$qw&bl0EupynNhV znKtYp904pIItaVWdS>(Kd>U|3y@FKx^1^r;qC9&=$Q|(}_#6v*ecW@5^eydkvXpcb z){1+?S@~(apHC%=pA3`Re%OT`=LB+SJ)PTX{$V@P?vf2%lyojh{twO%KVZn%y)Wrp zluiC%=z)6uH(T{R zHS%&oe2YsuH*O-nNK!U)Rn`5^{kNf89P-h?5dub z&kN()xNL+y3)gGKL-^&y<;h=_2GECO_Fx}%3?}ic>9{M9UMBWH+-m5&Hg+SG{lt{P zG5YrOOREH0A^BY^+b^>}d$8|ffz3nq^z?d0+Ch|${{tV`WRQIFzh$4s2*CT_VdBM; zE5!TzRl0f1Gt#wC4`>L^>>XwL`0TI?)xEO&a821vjD8)dSMOe5-e+FjdZ88U3d!q# zWB)%d+rL&;#O`gI4BA7tlZjRp-~RCAM|BU0#I4vTX|g}ZJ7bkE%-4q9o413SC3@F9 z!vyFGJ_AgOq?1S1*R`|Faz;A;@y($6V^smIaBSKDK6gqp`RUfx*sT(ellP|^2yX%s z0`Ze6)S+j7*K}~-<28B>zaH;L6d~@ETg2Ugo2mwz-wGY0LjHl+`3vDF&&@+VG?_cB z5&CxTdxwUza<3_(e_>w#r;^J3le{_gGubB{pr`$N^BDfEcb23*_DUmsIHuhv^8@S$ z^v7_%{~ow6^zhSJRed&e$;30>rO(Yzj~ttoSK)I|=RP#~Uz~hH{K@&E-rqMJ0P#C1 zO>x4YA&%%eKAO#%ZcmB_TX~mvRNf)~=)~?@cf(71$dsSZj6fd6$$T%J23bxym!*Bu zeZtc&>2Eq;M25?JMz7tQJYLXu=-cDc1vfPE$2Onx>W6hqzJYm`8L(HG%p9JSUNHF7 zBR@yKB}b-T_;}c%(B8#e(W$Kss4`iXKZ3-l8-d}Gb~7-)Z;f@`i@QrZnd=51Dq}A& z0(ApAv;W6_=;}OS1xI$JW4>7*IuQg8`tPS-(z;jgJ{1eW9uBI2@!@w)PV8^~+~l9^ z;48EJIQ8~Ehoq_h(XDW+-u+(ptXD0c_ROST*T$*z$&*vhm|VZ;T~9CFJnZo8Qt*nZpFJnOHMuy%V#HqM7AJx%vw`}`?$@vHK+TYvbz&`!{ zbi&8_&Yr~pm^zEo3iI+2KHh6@YbG`*mioVrjRC)Ans_4i-IZOHodAB9=6+8SE_PU) zRKxujh0q_9XTNuPU{Shc?;*xGtO|hB(hbLD|FHv(ip_Ue=h!04@XHXs>zW@nPc5wb zrFF+{IhZeexRbgQxS*&?t&IP%bsp^VMs|$O&9XXM@4@p_^wSD+8Y|Tg_S3a0Fu-J6 z*n2vMr(qPuR=hqns&jjf&j8mweHcgj`ozxW8yJy`(@Si%9Fa@{&jrHk9q8^SJI4i` zjZZmdmJUeE+tEJ#QZyVKRO!fP_3il%ezZ@OZAoe#Cv*Kk*a;F*RQ+7 z6V-e9t{uQP%W6G1*p0F7XHn<0p3IUtrvK@JeUeuhH@F<1gmve8iVRi!LFL9BtE>Q; z-+UaW-IY zUoY!bC_mpF8pP)i%j+RP4n}sdiX2ri;+ao3kB`)yz%G?r788Co$@dLJ?`^B#&W!M_;)-?N9UV zZ)l9h`-Oy$BR2NRGlp2mJT$VZLlHdg*szH26%#BIhxn4l35)sU#s%5RRTrpA3!ak?=mWQE7kJ%=dd`4U`J}m#woQ!q7 zzG*iHTAf|7(+PadUn0wk`Z;h|2V*^;T#`x>c!6tDm2zPE#ahH{a!n9Fm6vpY?6FmL zVbu=Ud|M^Kf64CQ!t9WQ*t1!G$DNac5fj9tw=d4-#R9r#Z<4R9mj(unz96f{$&s6M zwO9}r_xNhF{Mht6rmjwcCyN5q`K^=eZ=dH6`Nsjo1hgmcmhl2MOXg?wp6Vc#0Ba7c zKQ#m|o%qn?&c!D`Y93g8cgxEb8}Vy-baws0Xc7a!^VaQ|O1_td4ZXhq;s1OBeUGr0 zRRHU?qWi&1@(1j+v}qRVXB|f!fE@%jP5wXMc^1_lM}|$*eeN)py2YxvVwtfm&CJ2+ zfjNWB^Y_GA;sVk&)(5Dr8KW~6f~DsnSeHwN=*;ZX(c%OCCof{;_5Qs}=i#0Ez>dmh zo!5%sDY6Rq!ZHPFfUF2}epc)B+TL;9v<&uv{w4Ab^4B8WPA61<|Tz68?5s_gZ-YDhyIB^abT~#KMk?Z5DC1w z=O1a*?IrQom}eWec4iKE{T;(KUJ(cG`9%P@KZoSmFX`L+CH<%L_r7`k#|=>i-v2Ra zfCKu>0Ug_!VTSK%zNeb0$65oTbsQKdJ6vR5BRjvbkQtN{IC^PZcuf>07H5+_CTEGLIYi)}q;T2+%v6qa@u}%)U$mlRDW)U?w9v&*3 zlMgxW>nbZn*42Kg>b5#WIAfKlYdSd}eUV^+H_iIn+rzFuFo2mo z)=S36XX*ks3LD%m$yfcu^79L3rZN1RF>&<7T2l{&+WfbXQwq3(v;l|^1Q4ht<}=i1Fft}pK# zB;2f+>5~TE{P3h(PK0Yf0^ra!oUULjc z#mM3k`Km2}OPcBVtwB{I_@}O)#Tl7@W7Y<`EVlrggharScpz5}oEg%+Rl0eF=0#<{ z{>0;MIQ9UugFED3*Bn^jh^N1>h)X{$`vAb%S8I<_nry5{x+P}yzp@{zQ$F#CzJnVg7T|+I1P|=n`h}=C7Rg|eos;!{sQk)@v$p?M zX7Ek@=x4oqGW*tI06W|A)#oIsqnOLZpOs(5EiRr99wK4euzDd=vOm^u_E%|pIy-FatKShCaVPA zN9T?FJfowk`@OiM(DM8Y zBcVs-#W6E*l7)fyBPOa zf}4_uo0HimrawM)&k)J$2ddxS%)!p{1$6k<`)iG~gAV_80mcQE7nBcJC*Oa1;w2ON zO}?gF#m@$|)0M+Lk9*|tmyhqPm*uHG9@?Ojue_yxt*a06kG-fH7+mlL-Ir^Z+f(za zlQC}d3zPrtyB|A+&*;Z47J7l~9A^0a!Tx_L%MGU+IkGf0HVz3k`(u6?KW1*D&IXv( zBl0x$*cdx?n?se#BV&hmr)wauoCK3SYVLY(_tY^&h0U=8ghjVHzGx{zL%t%X;3qz3PHzczAb-4KdA%qet9mu z8&*W$c>Q_)vl)1I5(o3skNf>S$p79+-jQxuAc-B2%tt{Ta z?4GfktB2;|H`1>1)m9i**>7WZuQvUn$?fvumrc%j0PAGu?Fc5fH?n&%gjP%kjBG%a z0BVJF0)zdZkoSL6(b-p;697w zbm$WQPz9GrpXOkPoZ0GO%XH+ij*Nz^Am4Ic<8ys0K=)_)KGFZkWH3*xpE@3Rrr$IG zW{LG9z7+SInq2)?7JH)g@PQ=RJ~k}+-dXhbCWHGYorm>%x8(bi>4bMA!v~}h4)4{E zouuBLllersDh4FHV{d2+=!l#ueH5IZ6KF zBwU^!|M$?&c|b><6Ha(muPy4ePZW!;SH14N$<@6*>_mH4V@dkPE-BU`YfkpmBwbvV z;K|m#j;6OZrWn)i7pkhV{z z;~zhmHPVYly+1w91Asa6{~(X%-_EG;3j09gsLIdL7P98cwDz|T8(+DH2zsZyFrD#c z4|0wJU~d9_$@$Ozhp^KKw1jAzfBlR)a=1JBM;t^|5jsUb7G8Yy^y8De50U(`f0J;X z{qzRgD66k8@XY=iJAA4A(fe2R-|ET!MDPE8;;yM>Ll{+M>Sljy_bsNwg@y299NgL( z-J~nEqo4iDwoZ2C05)vZZrv5?=K}*&$@Ge{eY%%EH(fB|o6rF0fT&^ZtpE1?Z8wYc ztN#0PD`DhUjF=JBo-WV_P)`+_SLM$My@H{;VCc314IC{vOa|*pFQ&0d5cY!*C`e9!GKwOvp}S$H~uZ)XL_D}FrPASM~RcZe=nboe*F-8!HtbnCpM zwTkZ}M+*^CJ9@!zJ!G73N|$08K@@qE&`6%u{aFazkk`s0yfujy*Z<3a0)_;mUa`QUejl4QdR=q2N?Bq1`e5zdlyrYR$tDxf zF~}dyCv$pkk}BJ{e6zk)c-Os2hOy>>%^7?~L!&Y=wBh5HISbWep@-160euO9--c?-Dd!iAsq>+ZzvllX~&@B3W+>3=R#cXjD zd#H?^Bu9@$6akkRIRzvDa|<7Zp958LR2oFYa8%cHZD%Eo5KS@a1&xBZ;DYY+cX2Ow zOxo?=I(x8=YCc}wGq3M5$PJCKV-lfvw)k2OaF=8ROCH0IiCf4;eu?( z`uWt0rf#nez`lKYevbXW*H6MX8~gxuKil@YU47LAsrR=d;7VEl>4{fQ969;HV*B4W zzdSB|BiTE-D)P_EyEF~=o8m{@1iP5MJXyAD;fDD&DjRV7#QF9;l;gC^sm>pEbe9|4 zynBNhY#0WzQhGz~Q$_Hmm(JaaAnIVi{wir$ix7Vrbz+n#M{B*{l z2~QtZ3)}z#wV*Mg$$6mg*@b-{>I<8vP1FXEYDg2@NCe1Bu%DkQA7~IvXl~x=Uc)$u zEzazFs{3di5`4sPl`6tn^^045yfeOn6^}E#e@Ad;JH_z{gtN2&`xkao`XPxeDJjtI5ii7%n zZpZjcQOTW+6)c9Vih?fb_;w9CtQo$tXW~9Q3;9AB-7zNTCBS*0ZV)+)V<-TbfHlY% zj-8dwiH?3UKrH`=0vu6)hy(j;jM7Ke8K#-cjrAq(;26F$=6K8*B-kuN1n6z~KmH{j zQq77ivT8_G>}os??mlEN?U!+X`d81f4eR2ud@}Hs9y;N_Iyw1!+$>+la_-!Z-2v>0 z2wB4h9t$wK*L95;63HLCKwMe3lMQFAH@#C4z+^J5`^P$2cUnM)4?Tf4?3w)E z7DGNjw-7zQ)cxdiP8>P0{*-P--%iJ0Q>=LF;Lp^^LC>H~{MZp@B2QK%UuW^*gl-!up{Xw=|*)hxI|j%Wm=+ z7q?okX=LeJ{C=L8-YX=_r&&?`Cm=g#v=Z#>16`95kj*vY)*Nq5tvQq*Zp_0J<(pOO zl6l4Zd!`#MD>m4#^R1n(-mu71ua+74pSnWu1hK6-3P z4*+(N|9$K9a;@GSJIgy-D_`z&`zNicDwcFjw>N7#chQ5e+_8rG;$B_a@ys^vp52g6 z=^G0>w*6=1?_ddI$2K0roTOF{SUDMyhb-S%AI1YPD{|T7WvmoY(IrX|JFo&)67NL* zXi-NON$?6qp3n-N*w5)2VUK5bZF~T0g3hxl`G4{{aKlBdp}BpMH5&OpnB=FY)9!7= zpDH7}ZV2j%`Ni)D$z>s*)9P2_D-MSFsgTzfaGPXGr!w91ae--toqP72R?AHtQ{I*R zmyLpVof*cn?u_%Nzh6J#=@0-l|7#c7>jSdkAo02ZsPm%%wyDN{)8QRez{~#)`@eZg zx0KH}$|}e19oEmK%>eEr{w7_2MeGmVKjD@bzj_pGl0_dGLGl=Cef0SMhqT-11z-#6 zbV3WfwD0ZEYWj1C<@!An6K&V}`j3vzMw=UG8lOXCc4lXkO&;?zw2<+{v|N%D9ymy; zn3~6C-)lNs{|nuAM;V`!%;E4ZNe`&yQjY^Uks%iMu?$BIx}Sf+^B=k9GS+4j`V6rW z7li`))<*yXWcuOAkqf)u1^G&{aw^n5-S>9RhuOdD z{nu9g6VG?Ey*#;kZg%sw=8wN5D=#7yKb=%WwtP9?c~hUwyI&#M-zX{9 z)r0-tI*YF>089`IX!gW&dY5k?`q%Gwi;3OB{x>YUdrNoZzV%&^g}rd_AW4i)?MsU! zH%*>Z?n5jw8thmC31lC{_peUl(+%PPasL+Govt5p1F(%3^qq;kAl*WC>^n1K1AeFZ zkTsJ_7Q2}rv9tUS9xp!|Mn{rm=wZB&TcZuLS|lG{n_JZ+( zbwN{Ko)`W=Ik=k#Pv*iQg5vr8Te9&_N&2ph;{S%z+1>WvlNg!&Pxjbru=mjZ52Ph{ z`XBH45yj~XdglXuLiYa?{r}!_{%`Ny-865+U1uRY%9Me&E%b(b~yv%3v9`4SAU!~Y&jWB?zyp@}}CoFwd zU%V?K_;e$IF(tx=1F)k%C<6FsD8k&lmrcTzPjBWh{_slaNs%}#PwtkMJ+EhGlK+JR z2J1bh&%y}JsQF_V?8_l0<&&wk81n+W2zQ2`%^Sc9!oSnm2WCc2*m{2cnC*dFvi){) zUo^=3;=ZS=B7efUjNWBEJEwcpdzaK*)w?tfJku^xG9GXzI5qvmACUW}nQ%W&ZTudM z@3wZUU8n394NN)lv)xBu*biUd9=cF-T|w-MEyC7S8@4uf*j971V|w)F;mG_KcW<@1 zzw5IfYtLAJ`el>bWdB#o?PFkf5X?rk%PN?B z+K%6PA*>V%D*N~BzP(8t6*fiZ4gU3*!BKlNcHvj;FxGp?omtZdWJw@B^e`=}^CjIa z|BUr9Vg#cfN<+$$9MQ~LLvx0_o6Hq&!adIIHD?gbjg|ph$7;duoZBZa>Z+gzFay;j zmp0zGXlhL`kaU7#1&`0#V=2L$=pZb?&lYR{DJ1+GJ=5EEne^rJ(ur2XKWE+Fmi=FA z#vQF8qkV1cDop;plJ0|&#*Ze`?@d#DIFI~8Jq{S6flnm;vH)uT_exqnko*L(c8}zsS4C>&W^|5*zf2^zAt$Wyd#&#yZmL7YAWq}Lgdcy;86fW=hy1QJ~6^tm4+HPln zIv(3foZB~b3sAYHcI4EK2j3aro!=*K2sQs}a-)~82pRK-_mBI+ri<^lNjC6mw;!a- zUPU^DY~E_I3xH=bfzL_<-_aei_{JVj*4^oE@Pq94h11`h{9y8LpAWlx;{S~?z(#3= zt;_eT`ce76dibAyp(`itQD4i%BJIkM##nq%lQyW7W{;QOE<0 zD1o@t9P$NZ?;sFz1M)psy;y=WJ$4&~SD)Q;_ygtve^IYp>r4F@JVK?wE#*_~Y&u<^ zwx5Rp?Uc9k*F3e~x7*crdG)&euQlVdot4Epv}3QAKQE%+x5p>5!@K7@>#n_fQu%@2 zkr|*7-rMs}_8c1c@$|%;KEGdH`^SnZ)*kA&bO4c!(kV-gE9{bG)jyuCRc~|o|3}n) zz{^&a=ilG^?3s;pkPe65dldxfRS*-5(U@pVVvI(O1x2ucU_mr$V!`sa(UFey4$^y< zrhp(Is8j(_P<(&iS@H9p`JBCH&#YOq*7H1fyYB10pL~*=iamba&zr(_o+y+2NIL$$ zWc;=~5?${uEMstG|DOsbvZKdi$@S0EWp;zd(0~eAE5@GJHSClAwe-Ww)iCYZO8%#` z)hqK`MbgGtN7Iv=4Su>imqp`Ykr{r2-Y5Kc**xdvGeBZtapuxWkWm$>vw*tzn05A; z&ESC#o`ugre6Y3o8yK9tMmFEh?fd|qBesvv(+n!cdZ)*gs2U>FxO|^QQ+0Uf@Du z|MPX^T2s4BuM>mdnd}dl$C^5}RRUWWdYv5B`Mr94t77iNlh?h=E@1q6)_s*CL>g+t z?s4gSfu;I;&90cPa4+@&!v4hsu#eQDy>H(y-4S&*SEpqju;4zGgnzW3A8akrt2}!% zI#dSYUa;y1XKne7u)1%iCt$K71Ly!$$!uW_ka~Oo73z>vQKO8I@A*{n{e`3f!b4wJ zjcg4q!rNEZhwlS7mYw`^GI81D)xjsV`k)SYL?TeS1)E$4f`jt3m&iiDwR>0hy+OaX z44FGWU;j_lP;Q^~-=&!C@X7gkS6|OZSTPBHU-G|qa{aHx_5V^H5FYrJ&h*aoh0MTv z`~8-Vd3UeBt!Mw3hQJAUOMkyUE&N2${i#{)6UsZ;8wl<Fj?@@_uvp!C8&qx3bIU6qnew>%Le-_rxT)pm%i98F&tI3Q$F|DDMI_*A@5b ze4Py^v%f|2eM8p)MIoI>cWrv^S-0epZTI=1!xC)m#2)nN7bltuVk$F3yL_ZMCCSiu z-pSBqlh1AEIJN$`VbDJQ0u63g&LJzHlIx(})$xNq7cD>(X&kvGv8UOF=R=Qqg(7~; zEcJf;KD_uNyT?zqLe>88`f<%w4DcMp0kjO9=&$j@ZTU>khtFZmuQ2g~=k^;;j_tcs ztKc=QhAonEI3RiPy4^GF2x7PQp*!%};b!-S%o%Nnw(dqOv)*PW6=gmaiaay3>hxko z^fTdl_WafJLkzG|(vJVf|6eYhpz?32N#=iQ>Yt{rn*Ms9y`{Uuu(Edv-Y*+ER72R; z*p5p-F7Lbg#CyR~Ci!#~F2KO-k*VA?U9fa_sb`5^-$N9`*MSMj7})7x!7QPE0Rt=Q z+Q#aj#!c0g?xxT>`}KUZc_7zA1)VxTojyb)7+{zHd@*tf*FB`4GBK=*d=Y)m4%pMx z>KquNY&<^$pGa0?;C?_Hcss5E)0ow;izO}?B#%FGMACmz+8ompC(Sp?^oktBBSTJ* zws7UggmJzhX?;g`{!CrdHfY=yh`)VIXvbR3x0rqI=-U%JdOmn7>c@|Dj0Y4Xv5qCwXV&pDTG)+! z9BGB48x`|O{-CD1Y~n>(P5R0m*5|KDFR1K;qMgvWZpZ`pX?ozsw1s>BE02QKzzVbk;nJ%9e3 zr)M?jEhtixOC4%g`8k-~kgv8dSMk;uu)<+HK!$NYRc$yzYtU+5VmMl}Xb zz1kpl7|yOklYZ>{0srY35gvbCen8g>+;#o{%wy>ObwD_TPOvPAvme-n)|8KU&mro+!)V%$+O!u9Q?_#lXj?UK3pT69w@msBE8dFHF zT22v;{N&6(B+>txH2+6G-|-<6;J z=EnNL81~nuWAy2P4IR_Um8;;bR&^TQ|O9h_PeaZj>u9%Ywg zb@=r<2HH}(p z@7(>#5sGX!=%FhxU9ejB@m$g5auaQ_Wf8Ew4OQIi(}M=3PvzRkFAobwZ=MfIw($Ds z0ix!dnXT#KrT2oL6 zwL`cF!(KmXL_XeeJXmNCPAH4=y~Yn?T4buv#LeM;tCi=tG+8+-%lSZY^DV9YpTvE} znwYm8b1qBHhTWBLU{n`eS@5j;+ z`{V`elODhT`uqBGU7CdIudN%N?z&bZPTXl-;gNX&cCwKX8#){5V`KjWxr%SJ&d=+= zs%iHo^P!6#Rs`K361Xlaqhk52&N<}LO3*Z=o}FGXG99{?g3s=#e?AO|M(DZzta+v-m4c?EMl+ z|C-6V$Es4Aq^TVx5wW-e%P zTKcQas+zw6VU_j6)EH_o@OW7JgZphRNch*9b2YaIHYR-j!9EQ zK1PmS5muRb#4nIRk_nbGfXvY(yaQY!9))~^+7~tm;vaTyQ}dWF?>bbN z8Od+AhOmQ9&-VSI|2Ji&vGY_E>UJqx_1WHEusD9m^{dY%*B?$JVE()<3lC4&Cw|_C zll{;3`@cHkqv?hB7ahE%k-VaFo|28wWAB`<%eWktp1HEuFm++O18c+#t7_1pNDZ=T zeLbb=3Hx-M+5<8Im9y*gDXoFST4TSgu80?UXfh@9V%4+wcsUsU`{fD9usgb3f<+x5tH?KPS)XdS-yVuEgPUxOq zpG#-$ae)>~7vKV{mrt;6T42Rqna%(I^wfHD?hT!|H=WME6;+8VL}8+0v6UFe>i%}C zXr?RI+t1EETO`-3ceP|%#ghBM7F7@6C^f&hKcX8EfL%;@GE0Sm&&dl|tvGn2G~>_H zuJSPu6Op>un%>6LlHE1S2)A_ zJC5H^JL}{kj|({(FlC+se2PD5RjARE17zE+G;5eIij%r`@9GAQfeuGvNkmI>5aM6+ zuMfnBJEzDNGC`AmJ&Ctlt;&Bs&%i0g5r9GAncQ7Q{;iXEUT2R_mOX!a2;YAs>F??!Y)<(Z_%%m#haweO0T}^o zJ9srbP@fBkzRuj|w$e^cztMz7K<7*`&QD?zU6TCcYxBf-JTfl2Zo>ZAc%2&VN&cVg zPQ^Fy)uEH#37w5^jdy9ERA-i7J-AWx?ZeeT^zrHT>u<4|9Ts>kqAc}XLmuyd{*rmn zGfgM>VPCkv)&(5gCq!;TA7ASLqhzT6iAyBau(JSzMdM+%a1TwdR@<v3QLEV+9j7T_C0`rn^r|6K7s4&cXo{{Hg+ zUycFvktAQ$o?PI+rXxO*-@jVy{PR02&4!b2j|1ajKOOalbPvW8S!X}R-A8o|`_`*u zpR}2EZI0nQ;_6e&@ZFZI^95Df@oq?fsy1xao67^-P$Zx`_ia5pv+sn0dx(iX*DAWA zEAeR+_|P|%d;BH*ZT&asPQ4RwX5eq?s%Tm$oes^Ic=$Y@?{l*55F)iNJO}!|;1tO~7>p8~$8Q{vU&w=F|5|(W z)yB|Dm9rkALSDuv8pr*5hacg}c?Mt4pSm;jfBB?B-TQR5k*wPhQ}sK0&qA)1jKlfu zj4daILBDaY>8>}h2H4ik(jVt$Iao_LxEgE`+)=%TrFvGmgRhKR}%Z}Uf;Ll_syPvxYv2=BvG~=&tr@#) z_Z&D`S+oS)fMvlZVc3`M|Dx6bH2PCr)zGtwraOOv>e4i1?+0D$kS#u~YsP#T zs+uQWZs;G6pO-O1-Jrs$lkNID(w=MdwmO5$hAlm4jJc^Gtv znU;UDN@x$C5j~1Z{#wULpRzaDMX(~ek3S;j_}|WWX&&9Pb#%j!n=gE3@hl!@9Jah& za8=6;`($j8ENvgA{;H%$uPnX61}|WpWJIs+bz|sW&^=)&x;ES-(a3<#i!gsxkH_t2 zJ~6#pvTaW={XL-mcKfss*s$Z@EAtH&%=;fr?L2ka^bfnbpHHk3w#1Jo*pAU46YR%{ z-Ng?lav?Wh7a5%iRQ+Hr@7`6bRaCj4R>58;OBCVj280JZcndn7+1rF(QyHuu80Isi zaN8IFKW@x);>N3!Nf(QMvJteS+LyWp+LV7l&klKf=o3`eE3B~|RI>T9xw1RfhUyMk z45%SL-{<9$%^>thPb`QPeZ!9$DtchXJVFsAUYJZG=BVQb76`w~y8BL7__@yDius=~ zC6>)mJW|ohe@}eTGsjXiECw!S2MVC|xLX#c;K{d;SV zw`K7^khlNI9-r;iJ=3E9ko|vCIxWEC8m6;UdVN&rZV72^h(H_<; zEa1~Uhe@ij6KTu(i2mSe{0H$ji%xo3@Gtc#R#)AS_#QuikHA9~DIeH(i|yqB;kYcf z9HPA%#ESU8-%a+RpO~l^10o_CX{aWp$$aO~hlW*R4{%CkFQG?}MV<-vApb>%`YVm* zEoD3GMZR8kaoh+kJdup8Tl*{Z8eR{iZ;fK&HIfLufaTUV?;Sh;h@^4s>l5(6&-EF&5d;(x zD91>b(De|jZ*~Q$`CtaB(c~V7{il3_-uObF5O*t*v@FYZX@I>aQUBh_`FkcFz(U5nSRIM%7_sy1vx;@_mJ6jYceuJbKbtoQL zQm=Dpv-A1MXv@yg2;b^2M|`HSQxl9qPX|MQRCCbme!}kYe}}kT21iZ5E=!^cIWaL9 z{Bwx>cyqe-@Gi+dnUT30a(DEJ8Y7lY=Sg`7tVABmkWFGgAY!hJ?~iqk?;%En!RzBB zVpcWaUA%lA*5S>=@5B6GQT}hqtp7}-Jm^nZbUWkX{Nwt@-cKUzsmasl1?aAcM}sF| zKfU#f@$R0?FC57=)1o{$C>Y=5h{k-BjybeFf#)d#SZLz^>-?z)kiCEO1LFtydrm&U zi&MAFS-k7g%|&ILeIhQ-8yt`YTrql>PfT0$GtOzXEj01kU6VYfeT~-W=PR=VA{LAv zm4UK^B7gBeW&?H*e`nJ)gPMk|I~LPU54 z7Z=hFkB9epowXkr!|;7`JosV*J_RR`YZ3ttbw-d)bxzhCi?51B#kuHCEJ5S27a{ZvWxpCN{y2|GA;^pnvQ)%)@y{-MwB&^+i!HD9Z8jn4S$aG;;{&CjL* zuFeuX*_ofqe*H3=aBb&ZtkwB1c_VNu`&Q^%vw9W^9*l$Z`aHYcJH~olIvw!S^wG(! zQF8_>Bd2sI&j@m(LdO0Ia<9Bs{5{NkoEq6gjGY0wRfz#<~BM9$V#$Zm}+#xM0-N>Xh2?>-V;{kjx$$hS9e)*Y=r4H|Gc~JSI7MPV3_woqvMpT0> zl;pm8BHegE>n8X5fGwQW$5)aSkQem)wXKj{x~H8d_nbmY}XkUh_!O; zWSv+EqI2EiWcMJwW&@_Af21t=ptsp-8h41`S!Xjs$764Z2vnNFl=+9UGh#R>kSr7~ zIc(l<(*rxjz^TW&>ql>j2PcO_D9y&Y>`^e}{NY_K1RQ_2T1KR|z6x$Ah1vCAA z$L-x!!`%5+Lj^HQ$oq#GV7%yL!BhNx*Ku|-c1GWNRDQXhowp^&8zt>;DaQXuI^YvY zu|1St*SM`Z89_V$zEH+cr*AoxdCIUrjJFFh{L$#j(KVxUMz@X@8*e*)`}jTMcZ|O} zer$Zv_ygllkH0+r_wnQTiRa=w!}Jo zJBvL|E|$$Rnr$Q($V#r-2A>+&Oxdt;hFAJCP12h&I8oD2ZJd5cC;ZQy#nvUVQA zZ(EUkR{J30X5eTV4OLE}%VYb#xufG|?r1-dQStvPd*}nac0ZS$=zzJsVpnkg{%Pvo z>5KB|e%ZQ%3msKFc-G`hv;j=Y>#_oTS=qr8%W2<}k1_1{r4EQMxy;1dSE(d(X>VT) zXVJmdlNGUhD+^c9(Q9Te#6GLFhIVWecJ97jD&jqUGDD&{v6orG=@6Oo_J-;Ze|uMz z4OB>mNWXuGkCA69zMKR?mU!<_D7jv?h;4y{zr}*=75H z?3bQ6baeA*@$u`%pBV2mK4g6H_=WM>vn$We-~Z3f{`2e#v%AjjH~XF056`|Z{>k`< zA0p-dV5NGk<$@b$UFk zo(^y&+q43Bh4Mq2BuU|c{ z_DJ&aV|GcO+8qPZw@UAAl!WM;A>S|Rw@ZLXfDf>3@4nc&z#Bk!-y#KZ|AcaekKU{|XcPuj+qh>W5SRKIi2S!^^sR2=UQL11*Rl za&)Wl?EDFRR7C^O5PNK2l`WXB)wga}H`MQ~ljd5txyD?a+jom}=)1YCfi=4NZCgpZ zc2`&o>-I@K5H@I?hzxW5BXJ$G@x@hKfYcy~u7|If!$xU4(h zKdcev{Hf*{&+O=4`*c@E+M)bIUUA_0&$|kiU!3+`CL6I`W4m%A`r7>N_s0s@BUIpj z>*8_D=<3nJ<9{6QKR$JQ_xPppt^K}eeBbzq@de{E#%GQn@7Yhr*QOCRo&DhK+h*TA zyZ7wwv&+vuGCpX$;P~>2EPKnuwQck5y#>ma)5FM@Iu`Icoh6VaUV_0pZ9&D z3*V!1Xy{nX`tbbK3CSx!7zS^T|As**j@vstQ4Gpgg-F05`4$7C0G|XC7$TrzM#g-t zboWB}Xv;T7uSt%1{}?f^YMgdT5^!g5{)d==SIq-pP2mKh<}EvJy_jdR9w8q^ z!z6S*-JQ;9g7rG7Uj!>ATsL`Nqu(?>EdZs^A7;r(_wY;7vucqC?-DZsey*Y# z<|}I=DyP})_aZtnlSj4=NEhaoE?pR}`m=wb6>(ah5V`$V8i6M+&cYY{&_n}^kLCMV zWwmVwv`+Mo(7}m3s|bK9%W$f9pv(7}yw5-3J$$UI!25$WL4!pUybka4Ok5$0kE!yF zW(+Dh`2KLnAGDqx%>Lucu9@sF)#{h!*Ut~aZ{@?xH)~Y=78mT6KY$gW5=%au;eR1pl_GJD3w7?1ZqWaVPs8xAx8g22emc-k^6q?8H z#|qfJbs;|06$hNxb^JIjGPjlU z<`{n;hylERHvhaV_L-wUjCLQtZ+z(Zyzy=0zMDg z!{2qIhrvk&Mw8bf7g3z zA?_~2IP?Uk-A`_WVK_hP+0d^@K3gOw*Z;9bSPji*8q1;2%0ZKLFjPvY)RFJHBp>zg zKEs-e2?ySf2vJsU@CeMNxQ*Om%i?Ll{xHf8=o@ifPni5Ij*ur57pOnep@3Fl-C@ht z8UIlAznFBW+3;QBR{Q{KZ&(TJ%lEP=zfM{gToDqf>kT z@bveYS;-g50?+NbH|;ugF30*&xA>Z_f43g?Dq1F+ZeL*go~_%xs1mS7)=1W$4-;9v zzaRzr0B%q%%+*~#7WcsH(0hSY@c~GZ?jGN7zTP#FICK53Vsbljejtg&Ll^s-gTdR^ z19FHMNxj%yr&QJ5m>c{~STfX}4`2j`9lr6thOxyn(0KrB?tfYzXJsXDykv*$3#ntQ z+@i>kZjfyrj_38=ndW@CtnVV(`gM}{wR^17Sp9u=QO9Kd9P}3(Vz)*Q3uMEj-+riD zhofzurMSH@SFw9fnDIhY(4P^yKVL`gnAiP*eEs8lTsFFYwCH$;@n^?ZjvpCcH~!rC zz2nWsPmf+2EkB+f|7vvG=!ACoJZf~w=bqQ<2qLsr51Rx7o7w{BN!5*LLLmAn`-8&hfoT&UD!G8EX8o-lc)98Eh!>Jop7_2~__Ld2$w;_lFlC zk9$@lt-92A!UScQc_UT>&su&MBZYqot>N3t@xc_VxuO2_kUl|29Gza${}8A0-n=`z z<8IN2JYN@}m6K__xB=G_)k9L&N&4q$t&kVl6P+R9xNB!K2Fr;pxIv!dOkZ5g)F0%PU7dW$f~^tpp)ALAHNYn{y8LV2KMlu&GWP=u)WLfVQ3y( zWl7(hAI~o$`8p!)lB}qlR7dgi?EW)#Tz^Bd^XKsQ>5kI*|3B-^%iDi)H2?U`+4>)5 z?Jpi59m@abZ2F5y_D!ST_3YWu{~s5}pIkJ5T=M@v<^S#*U7XyX)ALiy1)iI4aL?$@ zG{8%vKaZ9fzhV5Q{D_N_{l~`}&i=>j8)i43eX)pO(edY-!KYde=f+a_OEHKYpT%(e z)mu^;)pjxk*U|jZrUn}3{cV)!zY%b21B!NF@MV;N>It|J8>P>*l zCtBwR;^qxqora!w*xq&!5ZCc~`Df~|aYEnMPquK##0_4go-a5m*+q5x z_iY&OL+?Q{04W;w{g4-sm&MqYvHfi45I@2gc_#YB@+2^py^H&di>ulTs-a)@>_ngf&FgL{#DxiVvA=U+Wm@#SRB)colXwo+c9{EE!k+T{<Tw-C z8*=XufBhF}mQx#Po#gBSctbwMoYtp(y<9K6f5onKr99iE!i(oL%fBp(yiiw<`6GLw z+7T+SboaS*8KyrL^)A_6k%es=qsJOI%rBV~v9=tljE%@0&Q7;M%<%%?FnDFM_I!94 z3~qoql(V%b10+$rh&_%6f+4t1@51n`AQb>&I-G9&ZWyPkF!FEB&<6BB-lw0iV0MA; z@sY`Tvx?+Qc!|6{EChX+9xTf?~cD-R&U<% zv!lmGkER!X*5ipDzbfWGrwIOpiTod0pU;bW<*c;8`R(m>YF@zUMFYP{S2+HTB7#Np z8Ezb{GXB?)fS-;3ZT7j@CuhGryL$1!V&jv`KQ7zOLYK!*7(q*gg%~DgL-Un-bY%S zCpO+Vcyfh@G|MWiFkvv)NH|+y)#&S>no|F0@jo;euB38Qe1VaHnSnhbo`8OdEwM-C zbK$@&sk3?oB7|)OnQ#u)LtfD*rfbIXeLI~h;Apr};4Vv!Rw$mGg6g=DA%gD;_@v7ihGypVB^oc{M#~Asy z6BCB`HN~~h_F0-s2lF+$ul2gtb+YXXbf+`b6Fi>g6C<$w_)5foeX{Q{<0Q;F5O00HIW$-D?AV8DFzpph=aPFe3UAR3jR%82v|sPyjbMVP z>r+=I)*GrNMTEmy<&$9qqWK|5Fz~u{6%r8~P_#dE?kD{ND?m<4Z-o6O^NkIGU&?d* zT+faQDY?Cz`3p%0v;%)*-R4;&yn9kFR@yWf(FI*^2Pkd-m)WvuBKVAK%g}-qrk{7b-NJ7TL4{QQCMOh#4KN7PL#lRW)O#q*zNo~&+~9YUqE zlfGP{aDBg3CwT9(>F|SE)8B5+WyaR)jzi?G_i+i-nKbf&*y5mu^Y4==Xu~Uz2nqRfP zxU+KnD(O|qu8W>=HW#StB z%bZh_^qDOG%E`VeApL-spH%%$PrYI4)ah@{tkryqi}}oY{o8eg#>29(w#gpeAMW#! z#iHlsrJdj7g6@p1U#089Sk&9gb*`9KZ~yt}{QIT*Yq_-F%3b-INrHMmRZTL0b4S0L zxw`qc3z$lw&58&vZoJ>0<}|MCG@hnzui`FRiH7Bu$lpWSc;);SI(W#<4?eyQO!%4m z^^UwHZOxt!%rcr={KmT5-D}^8&Vl#w7kNU^LACyJcr=o{4rEb|$%^E6414_elr#Tt zn*OpfZw8i(h)@$KWYLi^t|o+*R>*yyK8_hX~mN0*MS z4;4HmIX`V;{lA^YI3oZ58~wha{NTkQf;aTw_1`qQDlPE9=+`~Fw$Gm3r=Li_+*VuY zSEm8y&Ym{=r`hp5Czd6+cD(8ML)i;Cq3iPRmThhB(0?(G&b6R5BA)}f6*e{a}HiS<9EdB^|3 z;Ux9eiPd>TGeLe2%2yD(4UE5i!ig}$tsgz#WQ$<^YKW{RyRVUIT7Tg9i-CCw@`pS{ z*8=Ic1~5}qOpp?FK61a%32~~|M3q*WOwrd`;eSkLZ{M9SR`maeqQcd>YyC0A|Mt;R zA;-_x3t-)jg9j|%n5^8oSfz2KPkDx_02j>`oY{9nPSm;c%=L4m4ds|seObH5wH6od zv(L;~ZhEb%{FVs!U#VVTH~=da11y;JpPf2zYSB3l)D0R^pcvyTe-CVE? zWu@ia)PGzYE`9w(3p_GmGP3MzPb7TU|HoBh|Ih7uS$-@P7?@puR%vzb)xD}`UV4OK z`rG;y@Ph1bu=41RW)y});#J#S&|(=n)C{kH05s|3I$|m3WW_V_~K6Br(Boc2)XguJc7$5ZqCCBDB|aeWzKu zDF)LEji%Vw+PBjIJa5(h-f^PmH|SMXQT}JoWL-u`?88IYtyli0_hGztPur<{{&uYd z5^{UjB*SoRdF0o|+r1;q{!Qb3v-&5O)BoS`zl@g}|1^L8^d9F;?E2|R{Yl03ccur< zOuCQkab5C$+UWa9`yE;MJ3;_1>Yba?1ec~M?kp=n<}Zyo^u7FoYesh$3;c1kbUB3I zkAFBjJi2lc8_TP$jGq@FRWZ`j~PQ_iFhA>bGi0|K;tR$%*y zMDPgt1*&Lt3Kl_a-e|4Xcw%R6(5q9Sf1+TVbo)z){P{jZr7p{KY~BEF*%f(bTa5Od z`P%gB%Jt1(yuVO(f9Xl|4+)$N0X$>sLv!e(>pG{bHH;jS0gfgsqdOLCOa|X`rZw1^{4gk+{&1O`_U#y}Fs5oYg?qscgvhC|O`%9z;<}DwnMpz~En%RY? z^Zb4r_ZUlzwVYcAlJ88$k-Z;mz~G4-oQ&?>>|=4#b4FXIi37SyamsOhjwi=|)3xJ0 z%|9>iyZ^T?bpIF8sL`jT`GU?f^cEdhxH?41_3DoGi7bXHA9*PJ9{oJUcX9@70^KR9J)sZWu_cmBQ78?8TnSNXj!CHY@ZI#(aRloh`+n|@Uie_Dv% z(@FZNA%2%6&DZwMJ!ykud+qWh{zs!TlJ5JG^efT~=k?chy?$!P-V+9JU&kHUna(I< za7}0ZRi3~r#~&FlH+#hFQ?qmCIdArw@l(YqFNXr2RP6ppD`1;6m0G~PCinY>^qQD} zM>}uNlT5a$uu9m2j)b3=}P-B_O791SdRc{RDc{Tpd^ z7C%RI29I7|$L<^~7Rx_${({d#=!c!whW@OqB&|-S^%bM%kDSaeF9Ci-Yv7V%?Wyn3 z0SPmNhQTYwEPzGee*Ac1c~z^Z{yDhMy?^2>4*i6N8iS#Cz|G}=R%k5NOb5OqDd694 z(9G)ifz8M6@tS4R^#YX-T%!@=Gr@!T3i^JplSi;n2-*4F|G<2PQL0mR<>Y_pVu`D( z$Mbn1^eZP%i_Q5+NFS!(qRIZU*?yh>7wnaKe@s6yXPrj;lF6s>S?M?9tCrz^Cuf3! z+6zFJ=BndOedgV*F&t1HrdSesVEsXmAcV4z@IrAZ zmZ)!5tM^E<|C_SBP<%X2v#Q?#gv@A&`K|kPn^Uta6Q&XxhemX?+vwdf>2_-rWdq;X z1LJFtD*yk!`MUF)oe@8yr zYY+8vnWBJ|W*?n>R2zvUuwLyAtFBMw$Pfubg2j9gA$Ed?2+y}J z4)39(0qhVO>1^IQtp#zCj^AWv$eYUusFm4n zqWSgD6;;dpV+LZ`t{SWM#d6B$x0dmpT)*#U#pLVgK-zJreb%Y_>LlyMng5=1^`s7X z@uYvrbilCV=XCPF($pKLw+dN)A)mp0iXP-G#nv!wyDSa)Y#xCAbeAUcS9IPh(*jo( z>ps)$FP&to1=gW-y{?~q-zohs!gc*RgKpI8FurwK>w~9&@5A2D-n=U) z%OFQAqF_CYn_gWi#)cRWTS)x#mClUK2}iJYAb;}6GQJ1p6+KoS1RGy;GsJPaoI!GA z@!u5orL#MZ%#z*b){Tyx+&607L;Yn%*6P(=Cv&a?l)ZT52zP80_sC{$RX%z}M5=SGE%VG-EGlcn0rpqvUtJyn{Wu$6dQCknl3ER9Q7mek5O-Q%w){)K6H=74&9F&e+9hjZ|X!A6%cy$p~0Y2;|GOT5+ zFI`^sSYT5`d@Ls>=@1Es2d#Pig~+$+O{_rj3{%4X8#0Mz8umzA9MoB0aa(_F!z3l8oIMK{n+_m5+JN#5d$qlIR+nqDsiK<|GY|8)Rf zI{QDG+Is4!>95YLmXC0JcVxE}jC0(7egN*jNMh(LWM2p|z~wzI3IR|VdQ*(<#ggDf zlYi(1E+g!chLg)8;VX0({6IL@uIT`p%vfyR-C_c-m{zn?h|Who`KPWLhuQd>Fvy}ICs2rbB@ogK3k19E|-psgLDrZQt=sIP#3(RD;2*^zbVMAZ0=ACu8vSI z)z9S{s{9fGeX}t*yibb**pV;wec}q=K=0~tj}bdhGYsR$hTyYr+C8n-&n=r{td}ji zQ|o`TMnM)w=M*gO%{$7T-`E~oG#2Yl_`JJx4nFl>6K`sdVo+f_?Im zr2LYJ?Z0Xg8QeRX882Lp|FJZJoZv})=GUG1{B+7MN3W#o?iEhakf_36Fcn&;Kic`J9HI6^W-e1W-1{=k0F2TDw|Yj>^YRlK`P z4>n|Ok?u>yhG#Sf7(sF`^12@_4%@%=DLykJB4IPdKh)Wm6&v;ekiQWdLUcactcnz1 zbWkkvFaCot|Daig?CAd`o6q-Eqa?44fl34Lv-NUfcT@|X)tzIa^CWrUvI=s^x=Y9u z$XMtp_O|{JN2m8H2VgG{=)WBRmJ1CS zPwhRm$ef4E;N6jA|G3y5YeAovlRE?4Obx~N^PP1Y)dl3V-Z{BrFADd$sw2*K!v-@|ZEiTAkxIeFB_woDlJT4gjAuQm)@kQO)Q>}n2Ljc*S z?YeS&fAv0_PISK-Z`Oa6?ql1e++J@o0Oow?1+Bi2UHF?c-A28>Qe(tBf&{HpMqr+7 z%VVuKJAji|DC{R2do_~$KX?vnCp#@;0MCWz@X~mItOk3ns~nz~xIqj65ghm<`pEDp zKhP?`2*&&$u>0@yt$M=AGDC*#TEtSQEwC5DSzVJHC0zprW)1W$U~70Btcx7w-J$Sn zCG+}z{AGg3!+_+$us~#fu_GWMx+#bT=mL2F*qQEt{GwIU9m}T$o(y@rC|T5_3|m)E zJi5kCE~?S^E`z;3KB>JRmj3eP_7

vC#hMe1F`(1>^qAA0oKq)TLAV&Y7q4UeRZv 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 enHEmqL< z;`eau=Wyodwam{UnXR`rwp%urLv~BVOj~JGFAn1vg|6JqnB^kh!CD$Wi{t4DgzmcL z_JZ`-b6dPk|IEJIq6lgX{e3Z=9_XU$;1#|?KH^-i{d#6m4Sbf3^cA=bw&AL%EE4^6 zd?vi53y_g+IWOeAiWZnmE%){5I#`U?$N!67K*E%)@zg9_$o93-cyYX+%7y31#*g9t z`tYqfOFid1D}-bnh6p`WFNN#3Qo(+t4cJ0^uhiScL|@0cVxt!;kX>EGJf#{z?P&h6 zH#)R0&sRJ^kESnA+H;DI48zCj&u=q`ZrzWkKZVGp5ZZ1zwZ#3CmC3pI&fhRg%@MTZ z|H}B+1@T&4y=oV;CG>7GL#6D>NHsDQK{h^=2VfPUYycUl#_tb-*p0!m`6Iq0-%#eN zEPi>z*35r`ZCBcJK+dg@(PMU1&zeYzt6?{wQZCNj^$CaFFWq+So z;q~%NR~Y;2J;>iuGt}k?xqMcMZ?E9TdQZIs^+dHylNc+U&r7XRnx7VU10O^siMoo@ z!}4sN+3$D*t`^vexa&fAvELxk_8c{m5A}#fM0)D7q$cvrp5@!uvHkDj54^+wW;ed% zy}V%&78#ND{9TJoTfbpH1gnIUcWargUYd^_TRXjmPebQYc@*aMjOS+Yo$=gszLV!E zzj_bR+u&$Z~nl^`TriSD7<-j`*rCP%jGc!_MN#h zb%f7e&cB$Sxisgs-nLdzD{F*o)sH>?#1Yg6-T3XcU6F=CT+7sG4Vm(a#P4nJ_$#5S z)`Q~RhfIGOb%=k77bN4EUq3}P$q$twFWeSyZcNUyoDDfE@d!RlFHY}ZC4!UUY1sLJ z#1PM*JN_mLypqVX0!Zhlpn}h!VeC(49fMZ+Dy~4EUf!-Ng1K6tYYFP3%SCi%$?-Fi zG0&kklea7q?Gxz2eoD6bP`^SvQO4pRjwb7=EuY9B(vN7!)-r^9q3H&36*uzST&LXF z#eM?Uf(jfV;^{|@W|`);<>^F~FQA{x$H&PbFCkj%%bi$#sod*@UyL=sIFsn=nJia9 z7Rw{6M(maO-zsgZJnRJFGp@!c>T{+AijK88~j*`7ZcelUXT7rhgYG-^0vzbM?Mt@fhjf%v`*d zzj`x*dhqtg);5c5nGx4Ui^MnQsVV1vCWB9j76Ef^o3U3elnF7v&{0oIDmu`eEo9Z` z7nncPI+_9K#F^bwFMAC3?+r3|6~QUGf%Fw+&5*TN{0-!UzKiaR%O{7E1?hD;@@vM> z1!OrGW(P3MYROKpopV41-^h6_XAUEHYq}|K)oa`XgnbH?{#XQn{p4q?=gZE2e3{-oYQ=uOac*tdVJTI zy{_V(^_F~sat}g2!5##n*?wm>ME>ygcmVzJ5?l`@U<_As6{Cm;HiLTzS-p-n5uxDOa zAJi4FtO6;5Phk)2;_z@PBkgsu^p|9vU`{5Ud^Ei(y&&C_JehPOck~gp&13PWeqfxI zVn@eeF?w;wa;f#n%S7iP@mlIjc~!s*Kac z$sT4}<%wzi8?dF?z3@|zb9afV&t)jl;iewBas zs>XH~pouE;%qQ@qOUF;r#qCB|MYn?WpM(52!Ov+-WaGbMJlR*#l;-ATG>hKpWy#xj zwNBCgz_VS9CfLl&{EHcwEy%px61VcQCz!T+E5}mjTK_$pF>ENIiH@KJFtfX@xRW9zhPeg0bX7h zYhMgY_&a@h-;Gv+fZdKgyq;OvopHMdxxW?ZxDgvDGhRz<-z(8^S!?0}`m=ffM(SF+ z+L?6gziavH@VAy*`){_}`L0B$EzI+YtQip)Nq0vkL=qY^j%o;V@8W)1KC`$ZLHc$R zuh+omZ^|k{G5PzA(GKpT6W&ZgdJ>cYcbb^9JLkikyYN)3JidcG+7sY`hv>euotW+- zJf^OA0lRZH=1ihzjI2V@nxWU|TT-5GCbzPhPZP4BO~DPDqZ59ki_vXd zQ@}K>{#AeJr?~#0no4O`FR0(d1On4B=sqihtRJk)OcNdK&Qt8l{(25gnV(m%uX8t# z{TuOY`?9rJPRGHVWM9TaU&QD@eJlFe1+8!s-oY%!vHw;DfFvY@Kp+r0qJYwi6lo$&5L7^<2?8Qu z#YPjACMqI|<-b0&fA{}=?vtB)-#hQTGiT1;d+oK?*=M`VlNXW~=%>GY=IO}vr{5+y z`6`LmYvdJsPR|o=&W`l5b`|(fX7_yfyS>zl+PnJgseGIhebZdaGJ~XyM+*3%iT7xIJimrNsVa zbIh8tymfQO;(nPGg@#KT%dQGBWrJWXZvi<2Hmfo zW6d*9XpKCh&*yh_L+{7etdq~e2)ZH|V(tEa{##zMM7-0oId;{YZ$e_kFSD}z>w^`7 zxVqT%U$dk5Cc!|T&B!dBvHDn_cikJmYVCjw-=2B2K(u;xT)~>E=jn-M+yE`)1Vbtc$}QneRBgE&BM4H|I-XVjB4^`hTLBOy8`fvla1F@A!o6 zGQWqlJUhjM?2%WnWqNb?JAT2=yQe3XJRSAnn!)>jTz{L6tsD~j*MCPxt|{RPAB$a|n|kj(&CKl1bw&4+?wRhAM8{p*lbSo@ z125109-nbIFKFV8Sk%0k(`)w?#eK7T$swsK-jOTOWn9*84T4TVezu~Ka+p>Kr;iK8 zUQ#Ek7ubnJl;;gM&V3bUD0WdA*>P;scvA1)C+FQZHcm%qeWP>my1ePw9+e#y>)NYF zMA#8ZB3;L(1r0nF-}vd^m+c2L2G zB4f2ta`*LuYIjXNK`p_K^gBgsv|VZoD<;~nlxp!%_jFM0#@Wy1zGi&0cRg*nlAnpc!AkHUE5s8lmizil&NDgp{MOJ8!CdP$cV)%a znc@5AiC^8J8=G!Uo5mNsFWkq1@vJW-ZmYxSsjdg8PDE6C7#J(`umsjw&`enmsGpF` zL42n{~mE%q&=(ex3)|Kd+bS zLJZm|qpn_u?Za@f&)xHSt>b}jY1#1D@_)9=j?H3BU)B8hYaYP<+A;(AGi@!eLlGwf z@SC;yyX4$^=2~W?`tYsf^($wk;poKU4-K9Q>wkIj``-<%KX`s{OEaV0vHO1a+wO_( z-tL?r)t%b&8dg6!R&hkX0@0egV}s&O&l=#L4sDX1I;S_E32HhjoWMifjhXGor4IE@ zw4z(5+IdsYN7FN(5RUPda1Fl;7c@C59zHd=I3pvw!B)8HVle5O;G2Ci2S1nB)CU{` z8@PKb3T6G+0#;pXp6xWCI-=IGbw*omfiL7Qy_fEgpRqDYG*biFCAolpqd3{h&-6Lf z6={d~yV=1y-^m^RDfOErlf`V69BInns=*tnYK@J;Zd6o=OkXZNdzHFDpI29Iw1-tU-3Y zTpy_yPi=kq-e#7G%`BOE{UWh5cDj6y+8{P1i>JioB`VIs+{@=E7=5Gu`^K@fWpaey z?98}U-XRB2ty?SKSIf~X7e}yW?i(LaJc4e`_Hz?=_=j4%U7DXw@*X*bzR}y{s8tfv z*UB|ne4Y|F2O5dMzLT<0bGt3SaTO%E~-%XBtTC-*Pa=no?B&TO@`rU$( zKbjr)-b%E8ZK%uKemkD)%_vI#9DehTaAuP-i&X8f`x6r_snOYvy)9|l;Z3Z)$i8Jp z4zk5}RXt9hE4yT=QK`)DnZIn;BLuoQIMsZo#Mf8T+Ig4&!zcb*Wg`-ZiJ~CZu=?%8 z2P0#%CuM}62p(TM^}Pw{&^@bS6tZDOyB#U@sWwJ(~O_?i5?XkJliTRb+h za(uy3c@2v%La)(BezDbVO)QERSUP`Y#p1Seu~i-d0^l#?_NsPf2g?=V>G{+Nmd;q} z@Wvl(p8s)$KHd2!{bUD~NBB&Y0xLmR$^R?lADee&u3)X4mH%0_e~S1>ilXIm9oB$W zmY|YION4KvJy;_iVBy^R5;=qWwA0j)$wHf~G5hR&RyQ z8{uK8z4U&upV#)$>pz_5I4*hEJXxpvi_GgWL4YeI#{WH*^Gb5ENAmBfcz_Y{1b>XC z^yWOvbMrKE``hbxXQuL=Xuy_(4z$3n0IqMckF zzQlmx zpCtc3JCXkn!Tf(2+|iuWPDvjBPWPW6`KjF<*=Ka)=DgG}9?MZP^Zr@A^{ZJ@D(X0T zTu^}33Mb_2!l;_IA3QlYy4kW_vb#7q;NI@0?u72Ca9LxT8)7jR<|=l}jHz`&=O=sE zBG+(oeB|Ld|J2wS6vW3Ft;z~8Qao9$bM&g63it)n}8DbiXP9xIZjH zF`t-59tN873Lgu{ViN2@I3~}}&SNTtejAzNWL$PSIw1FXVxIE%gI!*ZxBpX+-gVJ8 zd?~Yaa-RQH$)|oCe)E_4+aR4A-vcX@aB7bd=(h2b`=D^mO>GKbLD)znL z(8q)7mx>iGmfu$Hzq23pHc=egzEbQA+J~y`(Z-|Ui84D{-uUuipoO$WIhvoWR|3}%y3cVe!*T2W-$m*efN3EBm`JoN+ zedWAHC$w_x7ZTweR?qXr-Rd*V2NWLpOy0RtY<;D?h6z|PXIMMOu8~)8mUIJ4^d68d zX}O$d+l(T?W}2dgfS)i?ia z)l%jS3-h;F`I13npG?NJaJ+?F>?1up^Q(A-tCJ~=4-v>R=HQ(lkrwxeRI~@dTZuu{SF-LJv@P2 zfl`j5Uwwa%e3vcI0#e3|OSHC&UX#ePM^Y*AerB-#dj{tW zHf=tTI?R{5pLM_Qei60MeBEm8LCtlkE_^N51Cwu-vHA1RhPje2W{hML_9vehJ1Y$k zjISf{hPg|&U-=ETACoB$V7<_%yOt}7+AO@30?-g{ACkw6Y?^n9^_WpzgtpD^v`F%O z$^!c&@yXldnaKb5?@^nlgfYa#$}(`cXM`EJBiz6*V%aYxH@Gs-`Ov(dj(*k5nc9mH#*J!WF_4=#86Y@&9OF03yW8UODyZ}rhNBeqa@5Wgt`*bp|!=u$&t{s`0 z>SM_e{@X6vBLn+~SoN@GvIJ`&woJaTPJX63Ua;3peki`-<*@%pMWeq-yKp*gUl)rX z+iaA~{=Ll$(Sekmm|7XyiuDcJ!)87&6x7*e`*_HmSMEq}s(>gX!T|azT z{sFPhv56kz^KW7z2i3`h{H8Zmso(X<-XQlb4_Chv2XJxwWyWogSGUc$Qsl}}Jq5Ne z@>u03tHr0-LWg-rW+-rY1t&9n88^SofWSw?COa-dDzF zU7A_OIEb~=@8FAl^qOJt7NKS3n5hC^kYf{(qe6+f|hJ{>OqY<~yr4HBS~+9LM|0qD}8tAZ#`@4HNF zZ1tQ)v=yU`2j+w~v9~)5{#=g!Y{qS?d{@_(%bTTq1&>qRncTTphMQG2sbUL!a%mA4&s|_9d`B!vl>t)TIuKe~#cqFL*@qB+U8NfI5+U$0}tbANO zx~YHX=s98WmutFIR<9gnWAt8%wLhC3Cw~esNzEK5(9_z?X64E1+6lrD|N8XB@Gw^^9}~Iw-N~?BptM2SFViueMeA_a6m? zo*L`3d&cy^66xu1SvxbC{y*~dop4nLv}ZRDWli$anccHv^M_|X%VTE7#%Jf>k+D$> zfQ}?{^L2Fmfc<%>dvTjo_LK7e%%F=`hbH6`-jm$y>iCxbB(L~RklGRL)fxBChIjaC z)GHqh9@!x^(`VvQ@66bKH#qsaV5*rx6Z#KZ?FiFA=(S>rm71^gKIWGQ&MWc`_AV}t zP?VB2h}p(_lgvEG$a$<9Ry#3z^n-indvzammW}f}?@2Ks57E^~cYz7HBI_AtVAZQ& z|IC7^xz?wH2472bnkV_;>si(HbTH5rscfAT?~8-LZt8wIE@PxSiFJ!O5C{Y!r>T)Y z%L3@-*uSjV>PL1Ve_tg>VcThUc?C7LP4hc0ot;qZTJb3dU{7jukUEVu<_=o7z7ylW zRs0&xi4tP398r5dsqR<5cGZ5!!1%~DWR~K-jFje-H-x{a1!&4(ryc&EH&BtF{-NKj z-p$ZyDOW@@RTx?jp1I!?{4d)@^pp{#iRl!Ld=ZR*f_8ED3tWte?470wrx%u6+T{(|TAtZ>=B}r@%z^9mtqs% zw@ywrfivKH9gpP~7kG71acrV9Kl%312C1_h8V|S3;K|tj@p=80Z~&(cK9g1Ox3q_Z zr+cgWYc%~Ec6+r4H@79Zh_}24+1OC?iGyKBN-L%xX{}wLwKgj@=>(>o$8u;Zm3?BHM0Fle z4#7vTfAx7|QaP!4w|8c-`V>SY!c~W?TXtI z|jgdwB#I0Uhv^{C07$@tDDaSqXYwdvt1w zfA3z6&l%T!A#0>pY)(l{ZHZ_o7RdV4cZWV453tu@QvR)x>_d)qdd_q}=71OtJC_2$ zx?o>;eDR@n9>SZ{nnojG4dm__$6{T~cb1|lMOG}BY3)ddOYj+u>4SiTKpP0a<#llJ*i4h z(ZfsboO^|z#1_cMNLU+fuDENl3BKnC;Cb(s!^>usOd!PLx( zX}P0ga>w?Zo|7kkR{Y%IxyRFThvtJ_+>glrdJNdVd3@eod&O;^k+SAxY-X8Ra#;SU z0guk{_Olq7S6P=mUoq%*z2I|B%x5`TTr$I^WaN1G9dcFJ@nV47?VkPhQJ$EUm&d+g z%IlNEKb}nf%Di%VUOz2Q;~TN}XA<47&r^f=f0^g@p2YkYV)wTte$C3$mEH3+7-667 zjt|ez6ulyc{&QwV-JN)YciJ*{M6o9KEM{J2uhL}3i82&Ym{M6yDg0|UuG*Cca)7`@ zcwIfc!_&iPLwHy*iZ=7xr>Q6Im+|>>;?PS&AC0PKe6aPRQS{xExc{Y~?Wc#<40|%Y zSu<6SYr^xr*8Q%#KH9UT+r68w4Hh2U7t0luJgw;&^U3+D+T4V^rrZ9c{KNObJfhyw zdFC_n%!l{nnU&v9&zDXzu+gO6Yfj2Y|8!`lthD`Ab4fco8lnHj3p~+%srzv{CF~zY zVEw@xxynoPly1(`m?x_bN2Q<8#_`to#`l^{hh-Lt0djq4$T~H{fH7 z&)+`tSJhdM!KxeZpGH?_a(R^ViEr`)_HUf2*?5%o^SV6~X%LDJG&98pei%(x6w!dL)^waSS_yrj^tMz@w{EhyTozqNF zRM3Q3N4{lmy>^1Z&hrMi1KH+Ed7r3{wOBrgW3hN46+7C!b#lCS8w=MtDNlS(?)}uh z>UBY^pPGB-L2Fkx z$`sWy>tSV?FzA%bIJ4^5jM!=UM}vA$u0S<9!Nef`EmODqYwqvd*#1qyGh3zK z#aUT#v1YLTi{0Ca!dIjp{-W*f&G`e>c}%{nrgqta;??_&J+@!;w}y8@Mj!qW@8{&N z*v_eWf_eq<19SV)wO5H}t8d}(JI+cx+-dO7!S|alw+Du2d?T#j@4IVK)!ni^Itqj3 z2fqkLftSw-mi|N5BkUa?ux`{b_hz0^O{&SkNm%9TA;5b=1(X2d6D73DA+HP#V9$&s zwDh^mWh2U4!U2!~Ud8@oR>!NQ81Jn!-`C4e_yPP4o(4-hx_|zo@-%kK29S=yJYY`R=`?Zb+(GzGUzpPUsR5; zsE#OBd{}9?sAgWroOq|#p~=f(G{8o(W!^&`4X-Yce0%QHGLS2;aT z`^;GNSMzmg?ES_>)4NjX{83*Udno+!?Ws9I+CNFv^uGM0@7*0E?k40XT zb6l9QIybRvZsrhld2D`?Z>gr?la9+QJ~p4uUrfkd(9c*;BL~qVLly!JOib+gaYjQpp z(mN<~z~0m}qX)&};U?848KsI8{9h|s%+TUj?973+gx{ekdA*s*{^hGGHtIBLSy(KQ z3QL3ahCT88d;^xgyw*=boDPj_$|t{IDt;4PF>r+Ki1#=%Mfd zf9;-6{;_5^rM;_pEt-Vq@?7jOdQ`6b<)LL$g*YO0i+6*|Zj7~HSY-mm;Nz9>MsjEx zKfc!L0l5<%#F$gD`x*1>75cyRGq>$kSSzNg^5Q$Jj|Z?XVy(--OIcZApLEKsQTc4X zT7|&cVrUe`8JBB5Dfd1r_d2Qf6?!)E3N!lgo0A!NQ}opj#|u0VEc8_Tz#Vzz+RV!- z{T$;7tQ28gc37mV8kNt+5iT2RTq?Fs`@c-Ae5qsvpU%Jed#|u)URfotFPxaIo6j=& zUOq!LPu-5*4~IfWg$$Sa;hB@;6Hd+78M&u3VtJP&$2lPubzbc7ws^er^ZmXaC44>K?+Z4% zJ09_wc#HevGaiUS{6|C2=ihx9nQN0VT_2xR)>x~AoBb*(%YUQKy}#H#6UF(=#Mav~nzAW(%YLDoWAX}}uX?}S zOLUr>`%?wfORG2lwR-wS{D4TnM^5bL?}Uuoth|T+@EuctF`Sw6($L(RYrS_cx7n** zDk`Dhq%QDI))$TLX17nI4m*ADPEd?JPG{!nzZ`|YsOT;a3rFxoFx*Kw6I^B$HC~z; zQe}`v601dVvPDLQtz!qUrns-+c}ypvqlJA8j3X2!53YKkvB$s^d#EZdz{|?wffw zKKHqQp1%8oi>X=ZGWPFnM_xqrs{Vzgp_`yw6C3UBymy|;F7cD&^4|S&4z_hvtn-|V z$GNe=D`Tx+kM%#3IeT~J@4cA=x5iE%%+I%Fj9`pgf*h_*&Ubb2!Q71S)OfJnb1w(vES{zA`eX7O z_!oXo#w)8B=Aq3ToDsfJMx@ise)(+tDGUNH;_G+_sFK!PZlJDF89?ECIMk7@T?UT> zu1X94>?b}zq|wb2Pt9}7Zs7udsnvZ`<5#~Qh1pu+(8q@BTPIrnA16{?71Zw7rW{e!dT;PX+P|0(nC#8|jaopLdGJnuTY|6;4t^4gL48|K@p z1$mk5c2X=_&RdN5;Tb7;+rb&R1M_`C{sI-_1m^Vde{O8QvIXOLP`>8m$u2th+F+;V z6RFc)l3b)4@oM^s%;+9Sf5FjV1ePBBAU^D*Jf~}unXMHRFeRRCsrZIR^Mqk$>zQ#P zcoJ%gy)!nIGnHycb^CL9#SvHol~#IU%Ha(%s@7S0MrsK3gLp0(0E~=p#EL;z)ImG} z+>cvT-KQgfLgaVq3^F|tgwl$4vR})Qxqq?i=sup{2Wx$SzNqR2C+Gey&)1#(td}$2 z+N0rHgASgJ9o(PjbbFrBg&D~MbB(pyX4%*>YhNVR|Iyg|g0cTa^7ZNHWj-0)u8O!& z;`lQ8&axMXt^3`||7COZl6jTtXyG0Ks2*Yys1KG*4)FPmgbL!Oxqqq^_by|ga*;pi zO?^myqj1McZyS4{=Gi>&lW9-{Q3J1@(UgPe0<=c1hyrTKe9}7kjRJ`hftM2ZHpy?i zHBUaK_X~2+@GM>E07c;|;%RTU2DipjGw0clx6jtHTTtju_7~4Nn9$3A0 zn;f}MzGH)T&WNc0?3bT-K!{uv@iVNChubH!4WEx=66-Pcs@O8qO*2|}D>e;b8av7W zxdH47PneZ{vj4^|d577omv-g1x^~QtZ+j#?1^13R^7zEa6$j4;HC>c3x<3rs#Ax}i zPnYY}vNHE~-JiNY24%03>i+r7&%+Epo|!3+8k0MolhH0NX4e02{l~?^ctK1D#--N& zVEtrcUWap8@)3DTQ!;|8p?dDxo9w8(GCk+zVXHofC8HPSWhz%bDo^2tRAQ#3*T&yc z8JN^P5)?2r;`iM}Sv9+RdqK4FdktQWpFcJ4yd-(r0`XagWgXtG(bYZ?4-Pr27a2!c zJ){IvS=nB_f#e3Y+8Ih?t!gfID&IIis}1M{h*>pTy@#)^UTgSrf2G1u#mCQhmMT13 z=jpPD(Xk0DIjq~J>cr9Lz^ePGm~nVU5yvkFurCRAK*lgS<9iHRoxfw(AZkJdqbsVdvm02k^J#VzcA5TuO zKz{Zet{4At2i6iS(*OH(|9zpnL-i1Iuxdu6*7stvM4%mWU88bmEL|l?#5*XjsJg>h zI=bUvw~8H8=&^Zoea(0nJ%<*}D^yEXBFIcAn{bts#rg%V7;msZ{L(`4MN8zG=g$#5 z5Pjqd{Z*}-qpV}3K2qluEv=A;FWBCw%&;^2EdK6{+fP!f|8>SqF8`Ozs@L<=&ysK5 zoqspRt6q?qJtd<}pNG4VkILeqnelll_=eee5cqpgt=DiC7G9k$u!Z)%#^Q=; zYBhW2nr9@BxjD7T#iE=!GPXYzM3*9l@ z_u7xQ`=+|T!r;;1B6WH^6E#ZNIIS`^pY6&7YPGN0%d8xsnr{uW`0j5LbJP)eH+vWN zt6n2>#RKSQrs54l=qN7(n46ze5xfsF@HA8zE{=L**Yp?qW^-)2PrvryA7LoI8(sG$ z?a!m*_(IlLUKg)@UOd6KQ^nmpRgGh#X4+uzR-ym~LdGRGg1zj2L?OsS%Lb`TN@>ND zst3@ocwYPWPlx}t+CaWg`-{?I&;Zk}T9K&U4ZW8B*zs0qut4=H-G^`k5U=bJ3V|lA z$KEfaJ!Ji7pL)MS6JNJ;4?tS>?6r2*tdX>d)(YEp-i~)NuT?9^iTK?e`F${P^>NBDK7AnO zl|qebg=MG}Y?gPKAr#%bx_B?IP+i!uk4(A^kIy-F=|{_29~e(&DCVp18JY1J^OG`C ze4sjd=`Cc;qxvT^F~`7BM<*-3CEnns%;$f`_WvF{Fkimjn{I#aPmS72#6L!x_DnFt z*W>+f>-lS0$8otDTsVwowJ9!J{z-W*E4Nx=-&}`%l6K74sqIw$V!xN#W0u{^`Bm8D zIQ*hIvt1;xCcF(qA^PJdu#C&Zo)?OzfiCEFSC8E;m`J~9{^xmg|4_$RC04yq-p}3_ z4O201&ZNSL#rSYmM(7;4K>qfrylbs|8q|j09g}-ICpp2zi3eYg5BzbyexB(6Oup`n zW#ArXDRWF!q$J)ZBhDp1#xhL9gbpx#s`P zl3T5l|M?xLYkW}eZ_-a|&%udv1jU}NUsv9aHZdf(*y>^-XeD9sCJei)^d48;2 z&R>i=e7`<_p$am;#`n*Ae8yI_9>y}e@ORW&71=~6^K?SyCp^1P?(>k0 z^SJ!P+p7>Bkoz6Z4Y{uCT|Z@7&? zGU8tiPHmRY%IEP}w>uc|-_+FRX5W{!+9R^V_@>DXF3R)OyN6v<@=wml(D~4ysHV)$ z2+hu4kH}vp=M}MB#a|Vw>~(79VdYHhUnd~y46B>`UbT`#aHamAfFRmw{>K%Lo@6T_`E@)$DldK?;6Jmq0$vk)|i>>v>E2vhBEMkGK?r?%t zhPpu0&Z(N1oij43rHvDnjq8UPcB1_k!ykSp80gVxjQ$>P@O;p~b5Vf& zC2Nx2j2H0r%dm;h1rP zwc>!bn6;}h%GFnoZDSM{j5X`{y-5E5RHFCC61`>qOT;h8;g`;rwZH72kDx3pjiGhb zRb$;FcmKusqq8$tzm}(aYwqj8)Cq6T|98gLugrCSEBNok-dCQI`#+|)U9*P{Z)`jO zOWr>-kWEj{5m0{3ct~q%?g?);E~6*nWB=r4d*&MOIklT6eTOWs7-JU8GkESYe#(6v zD$OXiULCb@ex5wrwSLTMC)oo%0BtpWHx5IWAJN2$7JNSi*6?l?a0E>N?RqgV@GG_S zUU??hMNz(Uzw_epiFhB3ML!!a|8g`kUm2|0Jkm^R*9*`0YE*Uq%37X7yUVlF@T$@E zEHZc?qk2p%PBh0o9n*iQQi(0T)cH!?44QY-v*HpZz;D@31OxWd3IC z{SK|t0#FIka#C{A4IPtDG2SX+h4rxwJPU=^@i_*IKyP?>&bNR5_QhlaPlxY+bTGTw zD!t(DPR;UtBia!!2Gy+J9o9Y?&G0!{o%zemZsM(i{en-P2XT0J?Mw^Bf%$N6GcjM z9iyN|3K5DH@HZU7cbySba&4~Rwmiw(dQHHCVL9=6cjoEd5JY%Ou>KeF9+~6Z{IBk- zXD$>wBj>ERQITp!JOh=!*>-q7O&v=AJ#$<%7#(}^{N%Kw^LLyajK-F&7`LY;A6+QF zYDMbs_`uSgn-x3f4n>t>@A0L@FvIWW5Vf^_dwfH6=&H^h=Ah0VW+lEE!(VII<*hOY z3Qb-{bb&ZToqh8(?5njzGX2ZaJAL0|e=o+{Ka(!~(+95%=43bKyV@gC(|F{^qfOQg%8x}Tco$kkWsagg@VV<*|RcgrTW8D&CXa(%P5)a zO2JwO*x)q!E3Bh!UQJh5UL zXp2sYum5;DFl?TlkhccaJd)_mc3q_)D~1y8fFSf6@ELSVRXJpDu1SVs6#>pkZN*%! z)nyR6JWEZ+Q`9kD9g!`lyNK4~Glqxcb1R#N?clh>;}gFcpKxhn{Y@Fwdty`9#M*9) zh24|v@!PSrYvT*f&QW(Hr{+OQt9xF?@`gm@uLLisv(3$!zMK*MQpWqNtD-fT+`P#uTMn(cK+Se|J^6tnZIA0<1Wbi zDR$+ea0q@_{7`GyF|$;TV$QL8GYSHz)h4vWW|Vku-Mue;ooF^GgYht)mi&u;!}!*E zfx>jW_1-yBZl)@jgU|?S6n9Pm84edYp?ckK`8naw@!M}GO7}1RQV|PQk=bq8N(d^t@leL1cWiE}* z=wVi8X9k^+JA_>^Ej+0`4(x^onPX zu!cD$o6?oYzR(z!T5naW4k+g_t0J~%V;5BKb;o*|LOUvrqw+U-*zEqP(`6hJ`#mM! z&y3Z6Ik@SfSmoCelP`!zy*|HPmf!Bk&llwtE8{N8Q8cqR#Hz3F?fI&_%3oX&+rBCP zuFBu9ix0UnKdIEq*)PjqFO7dVKR=zDtDlx<5zl zktZYL!Pe}bGl|>gK&>gM9x$FPU73n~<%0AJKGoU$5BZrT>|KtC5wfmQ1yH6S=THNn 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

qIqY}#GBTgbL@C?KN35#*CLu(ru4+{9j0 zeKx(rww9O6$98vQ7SC3h_11Qc05mRx&PeH*V@%;|n!{f;D&~_$aKGi@R#rWxhOH%+ zyldH1a0=U8+Ojn1kppbOr>{tpb>SNDesq@ml-(yf&tHO$=mr`D29aCBwt5{0V*e=f zM4NmpXQ(pZa9bNSugpL!omwaEI}qwL7;--7d>NQUNX$-3UIe{{Oc&1*lG$oo-= zyUYwS$JLL>Lv9b=Z%X8TN?scu3FY&9jnt0GZyEs`I5D3T378cmFgMS}^lLI`O^TLntM#U6GW^u+eO?khLv@*;VWMOrXQo4m~V*;>!tI*w%jeyznJ$b#4`BoN*|NM2&TsuY*e+LIo(~IDat$A|@YW=>K^uu( zSnV=b+@Dbr7h;vkznHggHI8NH%7(G5q`(~)(@J}h2h2N<2u9(vU#-x>{#*47&i}H6_U${`b#;lkBjU%C_ zj4aIKT#j=8{=z|6akQ=VT3IaCG+p6dyiPCBH8g}ZQZ|iNqA3>S9Hiao8cF)5Vo7x0 z3F)5j%jDjkngXzk(i7!p-J!|x{%x%O!|6l&ME0jz6sx~V^X+`w>XFznk?Wz@X-pr> zzkE6#&5De|`YL>;M`HN^;|Ir$iR{Yz7x$l>|K}vSuNpwk4^2>!fT;rwf&cI49ht(# z1;P`vbEYZz4O5KFr$$8!^mG0>i5*>(ir24apQVY(N8KmY-LE9e{Pt9zJdmo7%i7uP z@nHrZk3Vy4WXgTRIqU$x37d>tvYP67>03I196Ao?E1#CGCU3>Avghy{V+qw-;bs5!9*jR3q6J`U8kk1M^;M)#go4*E=7(t@A*85$K-qhX z@-5g$ckCNg?aJFJ-vkPwrOc+WtI93<$DA!0e513m?CiNwEzSeO;2bpzrI~6)VyCSr zd0J-FSQTTzj(b)ax}VJ%s&5yJOB>eAy9@pz%tn`(RsYL2wiXVFZTw1NXMc-F{Z#Ym zc5G@Rw@R(mv#H4VWiqngnH@WBO^xIM$;mn{aoJTPfmnW$jprL3d7K@|gyCo9XGUap zY$S73UgaBjpXJ8pPt1c3zyd(}qk|0Sf|-%)W%GQw{Lm)-oMBpC5f3OHVM0Db`gsX5 zhlgVdvJ7aDcjx}@>227&*qq;P*3C=3>aP-`crM+T`2$nB1KVfQ*Je`lXi) z(X16|b5|@JuY;^P)^!;v^5cAJBdzs9C_Dw;K`|^e2fR<_cgBJKESp6r1x8W94Nve2jTe1KAF>bP-*)-sR6t8MF&Yg4_?m4a5jK5RqqKiuv^|KFONS~ zmfjfRa~I}&%Ys-1Vu+s~WNm&softNXAN}6;XYKz)a?Xss|9z^q?oKw}1xd`^qCLBr z*<6v>?0X`!qhpsv>`E5l`zevtnUU3s-p`7pliZP!;gLCZLf)Me314yW8oyvlWSqQ@ z$>09sH(&$h1TGuthyN$!9nnFoAPpjpfIBD+LPO9sJO<~VJh-ZndH27P0q}C~ux4KS zP-2AJr|RT|)TKR^9kt%kKPtOveWd+y^O5GYXuESVKGx5!gH^)Dn?*R4hP4uDb!&*0 zEp%6YIZJCsNgO|c1cs6nu zM@8VRhgvmk8c!H*W@`#Lx(7@>51YKXBbv%}m!AzEyK7zu`6kD-AjUwv9QuV)*c{x3 zJ9Uijx2mz0YzA-CxbRWfTM}0~i+mS1NfXkkHIgKh&31;e?W~bFrSm~O{xag$D_Mt! z-~niRQ68k8_4;ln0^?@tI(P&++}dLI=;z%Evt`9 za}C%WS5{a;&Mt<7T#A+#G9dqT<#ZZ;XUF_6%g+_50FsAaD}|PGS0o%>hXd$QnhwG@ zN6-;#RCdOgVqsx7u@?+JmPmDxmFD``2V=vNfYaD09)#napMBw#sEuH6#E@v_W70M1 z_1*@F>Q8OI9=!jP#MJLfTcF1?$g< z^vUG$j4V%xCCA@+%*@fecK!hw7tLEP@~g&YT%Io*Ju)uu;PxPY_y8X`J%3>bV1)XV zIDpJx2!mhY8zaInxp51>$Abd32>+$e#7UN1+w`SPj0JOu)e`E%e6bs0(x+ z*HAuo#R$um(p%zV<&(fM?$Fw27mMY9fLX_iOjL(mSIvia4EZN9SZ#hYy+%vmlB{z$ zfPICE$OL`p+TddA4c?X8U}d{jmb7-JRY$|4Ex9gCrgo|&k)NR7VZY3YjI zv1-sR*{KW!*G?+vQkLGg&}8o1?gw%QX*lmyj0PuwnJYWs^@@PF1FSjCAu1?i(|5Qo z*NF$@HChqI879QQvBI=k_3xo!T>-6G-lK6WTxa&_s)|d%S4O}}Gy;W4&C?D!9`EAb zASvjO2BQ(nhsT$c6@k6@aIUWqqI1bB^*AE^O>RmS@ABE3ctk3-R_SgE-oGMM*)Iq4 zf2+S?|CsbeS+PAbc>kFb^~g)%FGaXEH8}j${OQiNeOwYh=5Fhvi39!iG$SHC^KySNTc}| zbz;w419lK=L$=sVYu2}sThhhmTN~CPeS(Q13s9xi0Mk1HhOk0d5Hd$L$+2}w_E|%= zjYVPMWRb|^seKRhIS?21Kg`Thkz_WJbm-BK(=0U4)3*LSFim*<%8Mym$9GkURvv+M z>Dp*XdH5n`B~$d9bFhe3eq~k1PE3?8CkP`lj*(!?;hsl;B(`1LAL2BT# z+BvkkjbaO&(a02HFn)BI*}xE!R#A0!*1iGa2{c}5C*Nbv=t*+sYRbo^gIy{A9$P|F zRji1nfHU|}WsiA_D*b3VXTvIZzxJH9BD^BLL)&=Y-Lq2_Pj&6^gtg%cSS=dFyw(~P z@4)RJooP6$=G^s40~=1R z`?1|Pd>%hf9*+;#(*<}v@;N_p$bJvYHOnu~C&zD2UR49!i~NtsnW_(%D4(dHe4&{G z3-7a}87D9&vOPA(iY>|on3z{q$WgR|PC^(5-ylK&MNG?8ObS|%B~VpGD<(7is8p=( z(~M5%x_uJMxNHz5d^T}{ZTlB@D|e^0gyt<`?>NC8XGM zU1F?K_TIXvYGA$y3rBmndiK!g%LY4#Z-7=@OCbs?l9aH~@B!I?U*wR>7p1eT!^#}B z;>y;^fLHzExfNcqRno`?N4$-wbS@_o{A>jw{J=Cs+*C3HC77uUL)bur$$c`m>TR=!@jT zEwY06bi9GGyL>96?)u~kx(-*&g7cwR1vc8%v*Nfne2J0qsz+(ILS4oKKJbn1-Hdr( z{&7Ws=wNHmyRMS%6eTEJPbbKXE6XAE?MsDNC*76Fj;CtI*$0lEZ;AB>I; z@ESzHcbJ#IeM4~v6Z5+Kp%wF^yP%5VLMeO?pB)#za_jWL8=u~|A8u!KcXS)1Ug6pJ z15c*M#5=Ng%gpYWR1z*q_qSiB%j}7RHA{zLdSF&FV}?nb|E)n`d|EJUSX>STm7yvu|E$ejcuM%cI{u z&&ngPLUC{O5*-15l0i~Kmz0GlFW9Hax%&1(>KJj?Ombx`;0~?p>Xd<3+Ae1z6IhGl z>kAXnDDKkzyC19FJysrjaVh01;9eKxKIOXbqTzja1$)RwmFI6fHnE z@zt>3G=$t4V?ZW--!6IG9MW>MuZo4*o522G{B*f8@PYqXOaA*l13gr1rg@hY-C*}g_w&=bvFWPvNb-4JP1naW z)5&qa>?1k4Jt+NBj>`zmk8F04)P7{ggPgLzn7i2nS(dFY&ZnQ(+`Kw{@c* + + 206 + 00\01 + 1.2.840.10008.5.1.4.1.1.2 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.157171626006094822772795196788 + 1.2.840.10008.1.2.1 + 1.3.6.1.4.1.22213.1.143 + 0.5 + POSDA + ISO_IR 100 + ORIGINAL\PRIMARY\AXIAL\CT_SOM5 SPI + 1.2.840.10008.5.1.4.1.1.2 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.157171626006094822772795196788 + 20040912 + 20040912 + 20040912 + 20040912 + 20040912062713.470000 + 062339.242000 + 062946.132000 + 062713.470000 + 062713.470000 + + CT + SIEMENS + + chest_abdomen_pelvis__w + + + IMG2002 + FHS + CTA ANGIOGRAM CHEST/ABD/PELVIS W PROCESSING + + + arterial + SOMATOM Definition Edge + + + 1.2.840.10008.3.1.2.3.1 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.179475577869989445825322252923 + + + + + 1.2.840.10008.5.1.4.1.1.2 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.297042649168128363219752116592 + + + + + 1.3.12.2.1107.5.9.1 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.688401930884469382984667769886 + + + 1.3.6.1.4.1.14519.5.2.1.6919.4624.688401930884469382984667769886 + SIEMENS CT VA1 DUMMY + KiTS-00136 + KiTS-00136 + + M + 052Y + 4 + -49 + Days offset from surgery + -49.0 + SURGERY + YES + Per DICOM PS 3.15 AnnexE. Details in 0012,0064 + + + 113100 + DCM + Basic Application Confidentiality Profile + + + 113101 + DCM + Clean Pixel Data Option + + + 113104 + DCM + Clean Structured Content Option + + + 113105 + DCM + Clean Descriptors Option + + + 113107 + DCM + Retain Longitudinal Temporal Information Modified Dates Option + + + 113108 + DCM + Retain Patient Characteristics Option + + + 113109 + DCM + Retain Device Identity Option + + + 113111 + DCM + Retain Safe Private Option + + + CTP + C4KC-KiTS + 69194624 + None + ABDOMEN + 5 + 100 + 500 + 0 + syngo CT VA48A + PE_CAP + 0 + 062615.760996 + 062615.760996 + 0 + 0 + 0 + 0 + 350 + 1085.6 + 595 + 0 + 151 + CW + 500 + 264 + 220 + FLAT + 30 + 1.2 + 20040912 + + I40f\2 + FFS + 0.6 + 38.4 + 46.0 + 23.0 + 0.6 + 0.0\-151.0\-504.3 + -5.0\-151.0\-504.3 + XYZ_EC + 53.0769 + 8.67425947826087 + + + 113691 + DCM + IEC Body Dosimetry Phantom + + + 0.679\0.714\0.746 + SIEMENS CT VA0 COAD + 0 + 0.9236 + -1.6565 + 0 + 23 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.179475577869989445825322252923 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.927472659782721902556191020020 + + 8 + 7 + 51 + -179.658203125\-325.658203125\-504.3 + 1\0\0\0\1\0 + 1.3.6.1.4.1.14519.5.2.1.6919.4624.240499823560899143234666603682 + + 504.3 + + SIEMENS MED + 5\0 + 1 + MONOCHROME2 + 512 + 512 + 0.68359375\0.68359375 + 16 + 12 + 11 + 0 + 0 + 2419 + MODIFIED + 60\-600 + 375\1200 + -1024 + 1 + HU + WINDOW1\WINDOW2 + SIEMENS CSA HEADER + SIEMENS MEDCOM HEADER + CTA ANGIOGRAM CHEST/ABD/PELVIS W PROCESSING + + + IMG2002 + FHS + CTA ANGIOGRAM CHEST/ABD/PELVIS W PROCESSING + + + STENTOR + diff --git a/server/tests/dicom/ct-chest-lidc-idri-instance.dcm b/server/tests/dicom/ct-chest-lidc-idri-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..84ad9adfb6ddc6c06e5b7896c1ef45ba15ea6750 GIT binary patch literal 526466 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

fqH~A3(u=ITE`CJ`*mfE` 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�$fG+ikfZytj%3rt@yn3sh4xz%weo+AC`1i7>@{=0mA4snLLxtH zJ>JR_vz}(Dn>qWN*=xqb`&5LqEuV1?S<$of)6x zsiWq~Q29*vC3naJ8s-Tf5mU{je|Yj^Y0ojP{|XrozawmXr@|TSoA-EfQF><*-CkmC zFY13ZG@ld6`7|0b4`0nUwt@70Q(9mG-iS)B!|2Wy>39~ZcM{UwR&<~tlsDi15hMJ- zIrC(fRfc_r@=y=i8yJzqeR;*wFGSY1iNN*5+vTC+fp)`W&Du({Umkvs-mgcPQhv>7q-5I_PvH|?o+p637Lw@ zEM>^+lVq}!T%S?0XQIQ`5SD+Ene0T54E~Su|CSunu5tzTJ8B>gJ!%G*#s`1O>^^}8 zs)70&VZP_(1zctn?-|W1R-rB1ou&JaqJ>VyCnx9L&E1si%I|-nurlEQ`uj8M2&?T0 zzA^WRBeq-Bsp)#R8}-G7daxAS5W71{}4|^en5A2bb{K{v&5(B!l+Gs9`!-Kcm7iR@ew`$ zB&iCU5q+*kvuK~;n&>n6khT2B*q08FKuvY7I`dabt5@)L+QZKEvTXKL8H`oalVo7z zXR@UKF7@J$CGioni>#8{#K-<1FA=Y9B(7fYYeaRN(K#I*q{T+x=`bGx_H5lH_zbKvA*pFZgdSs?4?KQWVOQTT9pfh871h zXL%QWBx7yhW}2cH9Pos=?Xfr@!4Xk$;u4tj6#iaxjBRG;-(^YU%y%~51I=C!TB;u{ z(1T{JYt9B3NmG*fBCR!_W6(HC-9cEe!9~h!p$VJ zrDtD7&-OJJ-D$cbS^uUYITy+);-@;okzjDa@p z6qSIYXW?pb*-P=`&*Xm>?e!~uEM^^Jm~4s7knJ+7@T!;cXnKg_Kh6Gc;dMp+U#zkg zA#dZd!*XXA9FspYwdKZ%9JrF=Wn7*r(+J+*3AN^bI&;P^%%~fc5p)d;g4Lm==dhapT zBTwVso$ab;LxE56{vKf0Z>J5Kz=sD#1EStoKP&weq4%fhqznDuL$rUnCusp2w3H?E zW_CJT@vHqnZ^{fPCW>?#&*CH=N>RLX1TWw(&Wn32gHdLQhgXCx&gRk7HIiZ?0UN}i zAIw~wJ|Rk6Eh%T6`P(gQLZtUH(ET2DsUh9iOhhO zcwip>i5^$g+3Z`AQFOsLukTzt>H$U$SorA8@JJIp^aKyV3SM$^`f&OMFWHKdkv+)f zbZ1$nXAY$Ir$?tf`3kX@xd-VPNvB;P*XUuGdbE*sanHBJ5Vm{b)$TI`-yUJ*Vj(S1 znP(c=Z;^ZUW8VFC0{w*JV?E<-$3=zeALUGxV!axZyW?nwfl1)fYf)hwFW_!*{bK%) zxbY=^ClFK^iykYdqv`+5AIYu=l9VBXPK)n#M+CH>XRYh z%SgmwE8}Z(tMhm34K^-+M1G_E>bXm4;^_0drZ6t_A^EA`=#xlb4J)_BNy>?Q@S4!s zd1U_v*NKY%=i6T~TvX;8=Y3;$f9$P$5ek@N4DbI(`#%isp8zR*E z*H69VYRGE>1a^pjStOmx3dLUaulNmJ@#JVI=XiV<&l%CDmgILI>l6rNq9>efG=u1Y zoiyOP?jIeJZZb!k*!m-q;hyyvx?!9robOe~GyI|_)!)R(?y%-i9r9Xi&EkqP3XVd?0TLnB5sw`?H_;hrReLtsrUkv@DYQ;_Xal0tt-<%V*?Dx|E4b$7i z0mjqEyXm6HtBQKcAy-kgaF1NAZ~eEO=ALit?NMj3CmV%wQKe@+3Gd}u7SLW#ctwR( z)w>~qvy=94)d!@%1<7kbcU+O2kv2~&q%CRZA?D^Cl#eRhjU3UGgh&6a$jXoGpuVmc z95DoC>!SPXem;OcULe7pjjn}pB}we^c*zm5OR%de_BQHiW^%FfM$$Yh&H1vt%UFx( zF5AY)-uD`BPD>@BsbcR{FKlhftxO@RMfs)^bgsw!&*C4see(hAYn?GSr- zqnTU8<~Ak&-Se-{pO}Ar!I1oRxw@=hPf_7oZ$<|3UaV-*b1sOY_ zbI4h6f7F#dyD+=5sW@LJzW-!aza0$Ff(LSlymtSO@?T|N6ZW>VEX-E^egv76<(p54 z)q7Syu6dSRqWf6$hz#ECvohHpG|(!ejtb<_b?`E}p<4Fw+*E6uy?G~PVZ?JC^%i+w z?WabrW$xHqDH!Gr7G=6jf~Z)s1^T(teHze%gT$Zja*dVr;ubSjiB341<*DSjb24k> zRg^RDndA^Y9)Y)hrfa9;qBCV%>@n|a>44v%uP)>_qB;>5exXo`0trU8VDt_9frNJQ zcNYE$Z?q0Bdk8PIbyfr18lHdD_5POSSW9}kqhn;+1|MHcj+evNEqoVykE1SNpS(3X zJawmCBENKc-eepd8Dg_sExJ*DMVCYui(>HXY3Z@)`N`Anc(z^YMA~C7{jf$raF0UeX+Q z{=wdrpf6&dYO&-kcc0G|E$|AD_fwK~3Y1(DA{dlLm$&j}cNYYIojBlTy7)-6jk*A9 zM2xG7Fr9(2$Dwdt|5cS@C-<+4izJ7>roW> z)Ta&2e`E@GMDIR!b=ujBehpByt5;*R?`Pz{8QXXx>E<5cd##7=*BWiYRVQUCw?_XGF%9v+;-OQ}!(x4Fapu33^KUn%Z* zBP{T`PckCIu>Z;7RxM$jQ5)V z=*|^&e80grYx!k!QT1YI;2gSPKFUw^6J6k9?QaBIP5{xD}b4 zjfQpT`wz+N0KC}7mA@b-(W7<+RPi&)Mu)Jd3)0xNVkhAec3>bq6PX|L-DPZ^j<2k5 ztY1f*E+TT#0XFi-YI{Zf*@wlZX6kD320nUJ1(7{@H>$^1E2-eyD&ng7^#2OlbR}wE zlv(UKTDj*aSJ}y?M4nm5@E9E26|Y7Il%afqp=79aIG*>qfkV)(hWz5FU;yfty|9VBWd*7+1$*f1q|$C0QlbQ-T)$oi->ZhE$qXzlluW z>bvqh*2q&WfDv}f94N5iCzRl(6@i^20Y)hJlN$;afEGG(%lIqAyW}uAxt6 z`Wb{9))ykN$uLhBpDq-uZk~2#?WeKzf3v<;6yGl-&2u4wtkulzz8fb>KM}(3hXSp$ z*XQ3*(6r$7f(r|#=T2h>i`#Y8nl;=5m4}afH>4jGB#V)k_aJ~ukob{2fT$;Rv(NHb z=Sg(Q9DDt~CGk_m{l@V#p5+G&5(jAV-&p@D`vyTLW33VV43ED;e?-3Dm3ZSHw0i}z zIU16v#V>qP%&!Wb_>3M%j47hOhwTOX6*{<_4tOH_L++{E(rh=iLmtfzk;n88D*@Zo zJpC@)CD+={hM6q>WSsVp{mob6via7TZigN2wD)APY>$eNPQ)9xiL>Re4G?=ari$dW#0ycQbsj4mdpkyxq@Jk%lK*ZK zB`WI3W+>bl-DkNqg>0 zwOwHrDZD8e1*O)*X|wUj7IGT7WAEU$nRexrPwSjHnkqV26Me#_#evCe_kY)4FW` za7S#y0C~k#a7DtleB_gta z;+K>0+5PBr2YD{d!rbarL9{=*OB{vk4vP<$bYw+ntr(p57rNn07~$OP$LM&!V?WK@ zm;OQv&O(84?z)xCj4IUC9~8>V6(VJ^YWI{84uf<$(owHQw{zJLCDZnhUN28w(`>y) zO1IHzQxLnjyP^#^WP5byZD)f zrh)pRM$Z%@iHd&_D`{Xfu`1Ze94$&}r;pOBp$nq6!vJINMfDKVR$6!%e6D+ z$N-A`qh7Aq*?s$?R=+|m*B{?(!)1NV_ET~^wz2tx+24wCTgr=*t+30k7oT7bnfZzA ze?{u1*z@uuoA*KXlKcS$MT)#xFg*W^+yu6u6kXerhCQ9#{|ozi4*XD@6voc2X0-BQ z7P}PbyqE09e%e2vgB`s1{k;9jHao<#)z?5VFnWSAEppFLu5J){H#;$RYa{b>D*i=Hr!~u)tGz>z}Cn4>qPd>+?L> ziQZC=t5|a{n;ZMTPD!TV@FtMuw~mRc%*0zy8|#SVh4krku5sTX0`Q(=i>NYRi~idx z+W$z>G%Y6j5uN!W6R#3HJvQ@xdTP>#e(O#$BIX_aNr&LJ6|~O=qq>tlYD>Cb(G%>f z%>8La+H5}D|BF#|=h;MOqo;873eO$=D5sLY0=i}woMrfE8o=BtacQOPsB^MWKga4mq(zDI%H z?m38rM-7y*wDXake7XO>H-=B}MSa{68NF>`$koZw=>^FQ6pU4fHje7;nz2_>c-x|j;;|MKNt9aHQl=e^6Kgg^%~N_g*$eeWp0G2FXv^A6wR6e zg-?_RH=SJW6y1xOOOZ=miJ!eR*P>uW!Jq1Vv=;Y2jg(Jv=0&IzGIxPkYefj{5_5g6 zxxdEuYh>%(41d+22a538%8;&BJdI}P+Jfb;OX}BHKmArTpv`}?`X7EkZTjH@c6L3_ zp%rv8F!Kg|^qY}BVCTYZuKo~NUWo%hWv8AD0y`=5y)MQ4ad;QvdrQ?e!V zi>hHTo3$9le|$}pqPZwxv+Sw4L)kgGuj!8R_`D8XcF+!hJt7Df`o9Wn^do&)jed(N zfY&ky&Pe-%!!yFl2#X1%ws_yP~*CDPMD+#wH)#1~fY~5#~@Qv}r({St4 zX>}`W`lM!Vwd?&pDCcq5=NyrwKv)Ch|f=zrN2tdVw?PDF;DUjlKgEa1=k`oa~pGtJ33=$iCfa^sP{AxY>+-$oz!(an7UJ}i^$r7I@8OH>Zt&!^g2sOje6x8|Pc(PV1+r#b8{ zs`fMquaWIany#VWo5}=S%hGP8X`_?E_k}TnBjM#IbKmA4%D*`OzFZAn@cAM#OUdx* zv~2~_eKl{aEZzFB*}kXn{ly}GvG=zoU2qW6*z3Aq!uf5)@a8+Sz4`3QuUtohqL=P} zUj6@99H0@6G+WHzQU1eB^?DYwz0m`Fk@!!JA8>=a{%S0zTKBC^=Pws?yiBD3WT@jM ze6U-z=wa4=cebfW|1r5g#Pr_co7`f2A4B?`v#HFWu`-;Wr&qR{k5#;e3vkmpWV{Xz z93ZaHH}kkNYVeC55ltQpqrR8W9eYY>+6^uiVws>IWk>yYfY(o@;mP84GE9oo!^_pzTwrR{{lBV(`tOgre4Wd3OyCSW_!0~G&b}0XevzO!2(at<iHEHbJ&#ke{M9qiu?W7bLF)gck^d~r zP%DS`s^PVN@K>U0SY!YPGPo6fD}yg?DU1Y_F? z!kKw*$l{33i$lmz)Xlvw>5~2vF5HJxpUOOz?&Cjwj&2{2#aOYpRNSTq%eq)Rq_jBU z&1kgTl_onodOZa48X+$7Jh}Xq&Yx$l=FlIJ-P^~Vm-^d@_WPBVd{mlz!g=6TE_fcyl6cF7%UWelTY5f0mmFOh+9b3?poX@bLRFKSu3cmG3-{Gi5 zbVXo;rL@Cp|IbXWfbo~=(1M+hn}V#M^E72IK9wekc30 z41iU30KH|;RS6nkBHrI8K30=we;RvQRn+B1?=FA{4v>`C2b@p#tKpzxZ1gg+{|aBf zyPqGd_|3h;kIHt*Zj}Sn1a5f2=(c2b*&Wb0`*!ZM z{3W#6Wj87x^t#Etn zZ_AjEE6rbY<;l-}n1*jWfV~V^Zi_qfl5OO6Joz5#IW9{2B&AuvefsHjNY;6-F*q*p z%073B>Q#XgUUh6K5?I%GBT_wqEWJc77K)#w$#qs0m*<_HzHNS+u}}R~>+g(5c37j@ zoVgOWT_ua;R=&v)xgEtt1ZuKIJJ_VVpn@WF)eR893FvkKTM)7TsLdIj+_Sj!SVujX zdCT2n@AO=EZtC7`QKu(K9Spk+vW{byAHCLs4qeNa*_R&Xf0SblmdPSIKbeb4&(qG4 z@fTggyFgIUPra8<*7;ix&WUad#dtp-@)p9s8|B?G&Wt*ZBOD#sAD{T98R>0H;-`}T z;oi5Q8D{d2#yh_#IbLCgE|Pl{UA?2$OXQJub><6@UhG?Vz-udw5}rzZBbfvPT%LSn z73DkBZEL2Z{%q_kUI2}*q+QpESk{B9w%FqlnKw6(*r=sgBKy9G_iXaDNW^`I5;yYc-Sa^=5)rk1h4dqoMSi_9FNo1Y;+?UPyP8#A*x}uyo zdofYEH>~ilqXFi7MWz1{R+T<-hZeGkUj5(7|9t4{YY6->4bYq~@GI#oY5n&JQHBzb zz&dE}0T}RduSZybkF5-}6#?ibQV=^rYqH=uW4thXX|8Vmskxade@?Mx`I>daSB);Q zqj9!4;JNuP<&MWAm$M$L=*Nn*#$j5Z9$mHv2gcsRm+dgFi<_cucn|phXkJsvOgEG* zOAezGVAPe^$j%)tr{$3K?3ERL~t4L&E|>tV&a z#1S61%jF(=qldj8J9LYfm|V-|zpOg{5$XJ-uNAF>FzFCinoLLBL08m*P{-i)h_SDQ z&5pO~b2Hh0jtvdXce@pz{B$pVj0%N^Np(>*&Mrwd;QAPUFIYcgfBf(I=sug?WYo`z znVp}Op<7-`4v?hfxOWYl^1WFoVa7(g%2n**W62-*vIb3gi8#qcR!mMwUQZj_7v3;) z3%{?E9FsXDJdY=Gi8bWwpvgDH^A@rH#ZbPqxXhVo6{|t97q}7)9>-tC+CNHfMHQhc zXjauRM|+wtWNa)j_XYN6e8PrD#f5(K@DF+UW@})wh!nO#vjaY#Wu^RX(Z`x-e+xVC zd-`HBo>X@yqZ2&ym$cX?)1EuML~tBxYE zqu`_G=z{j+W)R3!_-q0#^*KFooLT_$NB;v0be3UVUtO1W&_X}4 z{q=u!{ioco~S@e&8fCso54bQgY=WP`W&(5t- z{o|1J!Or#!S(orL&$_@bxhA>$XoTD8lgK)&O`lxkZc!O@sXJe44qlWuFb=vnorM`G zR=AR#d?`~YorACMm0NNaFFazb%Sgi>v7=+@;l5}YReB<`_Xt#oOrPEOCwc*X<=rMn z&!R74cW~sUN7n4?deXiNO)u3$v}Rh6?v|amB|SkV?)xOB5&17eo=@U$Z>A?YiW@Xd z{?OB+r%bTuJT%SwCz2OsCf0yHeztD)qKN!SnR1ylb7k5?to>1b>wRMMuO-o;=Xe<6 z^W@lcaT<}${k+3#&EQpd{%PpyX1bP_op}ZS&S6RBdXgFJQoF)6%cx?q0&kV^?k31( zsd!bFG$SXydgfHV#Jsdr+CmJpbkYx>S4@6%zcZ6fbYqjGf@d49BSur-ACv55$zpfZ zC-$bd!;2%$?ixt3h$;=+aMeCLG=G%+vm?_Bzvj^BD2T6wwWsn%_yW9t0^NNQo4*g| zm1Xlkqs@!c6?fs)km8d))38j9v`Dg5Hk`}{@;Ss4?eq-0(B)CH7i;m+pLdz>2IZ|w zCP22A!mt(b`F)wL$r#eVh@EcXHH35x^YlOX9o-(r&;n7JJ!&>bm5*4#n@^Vv@J-}B z&GhUU>m1|Zj}CA{)OCtp?vq%8J>)lb1id2~5qqe@ryAwjd+hK#vJjJmuIlIe&*-Oi z#@HWT`4jyML}h#7q*(vmDvr85c{-Wrjh? zk>471v-^^(kI3gN9{JDK>W7f=ilnAKiAZ3CcC7Ues`dQLj!zbwy^3zV2J)^*8j6#` zu(tQe%8VKe6=1MRJmlYbZ1ctX>XVX>Nc%)lfS&F@IP)L`(1Tu>Y6W2H|JMFj**D!C z8^eNAAcv0hRv*`WnN(hdJ3pjpq6*97cJW+oL>GB~ERKyh@N*(}m*e4b){LUR{Il6< zxhwNG~Ct0 zpW5n!uoJJ{P^b_0nvub}fE4HPm&gCR%>M)y{3P+8v)I@I)-3V?r?C|6>4OWcEzd^N z19@k`bkVydtiwb+@&kOZ4DWx3`_AD5l+Zo2L0T;x#)hv>x+WhaH>CHexmUx=`aAr= z6WHs&hz4vUd4VyiBu~0y6|t!5j`@4?EImB;OtRmWT_g4;2@mX;puIr>8`v3^lXWJi~7gXVJfL`-5=^6Sp+;_5r|NWdQ;w>qz(^xGdYZIx#i8sI5JoawyC40>xb}GA2IC{?1}Bl^4-ave?&Ko}I>w` zQG@Bf6Gy3AzMGoxrI>Yc3#*;bkYXdAJKE{yG%dU!&YlJ6ANYHkq8uN>4-ow_$@9+0nobFsHD>_jw+iP=tg(MR$L$($^a*`bUTF#W?LMSKE)a zzxcl_3Ax;nYj}RYz;)B{T`#epSMXD;vPZ?S+NxdEfO%Uz+Bg^HlXhyNt`uH};wqCj`~G%C*3@+@aMF1j4oW;ZU$L~V`>lSA$par({1HJrt+mOPV= zONNlY<|J{P7+d|k6VnXts={(aHQ8F3`;w@u|2xewi|n>W)hWhb$MGFl??!BQ6Ibej zDp7;0y<;N^AC-pNqSIIY9|G%bqLT+&oqyRm&7C=jmHx(m&COQmp0$1gOT6v)AI$pk z=pA`iePDpEc^}K*t8H|voRJU*{h zQbxA@jVf97v#!5~4p_{#&Zk%BXKsVh2a5rYhwT@!(Puz^kylfm6s$7$FNwW%}4dVz=+6fA02flsv`j zNp?B1x=EG7)avi8#RKq@({2jx#t;Z>m zeI5HX7L&6htq)B`?Z|=|iGw=x{FVmJ6otDVc5ciw--jzVCQW8_BOKK|{7l`zPDdMPfwN*wPH`U&$`#qjAt2x(gOrL%(&P?Ydikj5;Xe3vJpiy6lK#Y#}y^ zOu!NNv~|)seV%?_1}8osH*^;JuoK+^XPseX=U247g#53u4zMHhDXH8c>U^7M(*^vw zKSiX@L-mUEeJPgU27X{u`rsYW>ubD^4v%H*0I!@qI`al9ost}a^rJr6MKISK8sPWj zM%9kh+k^dQk;JIcb}$((%5aLS-R)I1QzQAD)Q=$FeOc%a(XXS~_*Zw=ph+WIqmemU z;hTYEF!mdMC&Mbb0ggh;sQ(qazannXtT1jj3xzf*OaD(q7_ot=Voru%I8bmefD*U>LD^2zj)q_H}E?_^7Pdo5f zYmoY}73Kft&D zZtwr=`zLY51ou_}oW%X+D$k0(EhKwK8prK^BF^^_j;Ks3_gS;Nn>O0ON7<9}DB6lX1r7xv}bmJWX#Er%g`cS!@(>-X{KhklwmK zTP**kf)45)_uwadC|X!LcY+=i8_mck>7}gohP+dgGa&5WS@V;i;7xqoDt2C`wDB-D zbEQvK;J1~qV;M)v9)ljwNXm=XMo-tZc8VW@)_!Co=EKGj6PkhQ9clNduo?A$29W&7 zAnfRU)Nz=E@}qn*(SIHB+jabg?V|s?eKLf+_NF5?<-M1z;9(CA^li6j$X-Oeq7r1} zp!Tr}xFU_7?d8RLKZV;Tr+v-rg?^4v+4j@4GS7dmJN9Saz9T7-OBic;5jQ_Fd4_hl z)GGDOYImJNgY0IJ`sH0I!?17q5k2!cz8#MnZ%k_XCNkNh7yS@;>1%po4NhKbJTDo; z7V+KLe7o~u{1;)&t6+fj)`zxRk2nDuiJp%q!mSaP=}$W!f!Cs+bku}d%u9$qhL^BP zCmDCdwBO(r+{jNX2QO5D;G?or$?TT&;iR%!*vBWa8?z=vRSCU1B*)8tdNK2D@)f#7 zowg;U@U^6}G2QCQm*A|0>BSITSmxd+($tz^NAG5nx(_{1RPTC?1V?qjPN>x#eX{UX zWK2eHzt)9*K|5MMs`JLqquBWnoe0cQ??dr{et?q<{&U@*f7bvH z!7Ho8555)!n8YJ|3zFFFiU%`|-Tgdr{|zrKIzYz$kiQsx0eUsYM~iuX_xRly{)j#f zSCi*=`3=A6VDg2UKquJ!KPX#}o6H9|!VZC>@_&XJA3*Wao?aa4|Xm~)^ASEBVW^SbU!?_9!@(e2`sjeERUko z-=v>+i_z}0Vt0EI9dORFPG6htKf&g;GUA8_@K#iz+X5ADVQ0IO)2LRtgaufF!=jsO z^puZ^@~iONK;O-Cx7e*xO;rDlG)Z58GoqJh#2${5Bd}5Ya2_pkyVb(ilTPeKR0J80 zd*i$Tb`d{7e-|-pyH&tX(#wVre+h?Kh8|7%tCp8^d`<8r(5%5KH3h7LjvnLQhJO4Ex{a^oISpO>f z7KtCeDME2Ov@qJ0nj7aBcfH(tUB3I3#T~V1p1rb;qb^4^l)e%-6h-Yr)&)*u*Vd5X zI~}veuF&Xcvelm8o5=q_sPC8NWf!aPPfy<VtdXl{Ch&WUXIuV-0^}q(l8n$_SUvV_wW|_Lkg>K$Pg5sg9oDO zZ?8h%ai#lCbnT-c|6O)=O-x@(yFej<7#ESXyRGXTaOH+!Z^R_>lc*`P)Vofu(9?*v z=Y5$xFXCC2tQ?=+WX*nj+7z1JLu($DDU-HgA)}w@YC2#&jq)p=8fs)yMa*(y5r^@4 z>~CDCid9YP3U4Jdjcg2mWrYleza|BAK!0N%%Pvj#b2Tq%9^G`CI%8v8tE}%^rnBL; zN7&iGAeC|5K9Sx}d3x8<_={lhYfyTV+_EXG$D?Ten3&IbI4v?x>Y(^Zu-%iM;7Bpc zBiQ@8yt-Ra@iebWEZW~`m7`gQUoykeTj2dQMv~!+O@YtmdYTc*2z$EfW`04D+i3Cm zy#E2DcMd0L8MHZqpSK}tNr#8$6`30C>EQ96I&vAK_S#ddckJcrfKrj~G>)b?!YW5` zv%iKOk54{#WYhuLXg;D=cUPPdwS}HThLsPL&3lqvDdU{G7heI*PVCJPvdEwv-mixX^?+EVi7G1{dDhL?xz>F2LA2@-G(Zu$^JF^oG`+MM`*a1&{)02u(;7v6S`vR8MOMZ; zFS>r*WA0C-k3aIa488IWWIPb<%r^@e^}aum16YTiX++aR9N{Cez_tHZ^52=}SYrKQ zFKsg0YGTM`h0Mh;$JHdi8~T4s^H>)a(fE^}c#aH^@5TFCL4dJK@F=5<{Kkva5J|;{ zA0XRrW{=j>s8VjO_5TXF!`U_RgFeW;pZ`#9ulhs}uq(IG6>~kqrL4&hRuCKK&nXz3 z|CtQp%2o>B%iWQGQo-oly=Jma=6JTd09P+ZiFveoSl7AaWd<65O`4;E-xlxp=hYSC zIwS36#rtp8-|~~Sbb6lE`g!vD_TZ-JXk8Ci%;xz;{#PIGBg1qZISn5m_TYD?3A)o1 zk!>;&w*16*@5|%uXqU>Cw5y14L=G3S1wZ92O)gAdO*Z3+v*Z*0C5g&Gy`8ndxdZUx zG`>dfq@{@8-)YBlvb8cds0DHZTv#ttDpNJR){4XZo-L}}j5UHit~!(Ti5mK&jAA_Q z9Km|^_0+TJzq?_WsQ$6vh|5{QXh8yY`EHf7esRx1^v8H!&`xsyEIe?mwbFG-BN3z} zJk#oCJ@Tqb^5b7Y^_CFGCjMgNajl@)&xTm{lmA+De)s_eer~Wbn+G?1$kJD*38F4c z^qRY|5XEKq{pY!A#Q$p25*;(or{$7ZmCMjmQL+0MlGnvpJJNf{$Xpzd^q0+5CW#8| zYhk84)2d{@w4DQ&CT-EOC*3yJybVT)Ic#rFh(9uNVkh_7N~ME^V1|IhD# zLxI{x89qvB$lQQ{3-*QU| ze#-w&y^ylGa_WiI&FxheVLwitpJ@qm-;bMr#~1I=@(o$bsBSYA#lm+RivqpKT!o|y z?B5Wz^2O*cOJdj87*sr3*3QIa7COg1wAf)Aoid_IP;}C2gR{o4=dZPJ|38W$y7jOklHtGpKA*Y9xiOc>$=R;RUW z^lmKa0&C*sctHbbpMO<6yv-Wbt)d6@9J@`dAW-oP-_M6iS6X*pB3h+8HyvA995)nGl&b8iCA$ymu4F^fu1`-lg*P=6WWN2nZ1RgO`ow4LeUntAs*d%rb z?a1qs6r|Ur$EOb_W65v${Yz<#o~(6rF}uf(;HKu}SJ)^#qDtoYkGvXm+dJx+Ru=*K zQ;hX@v)2(X1V8j<3tr^e^+DC>;o27^Q=G7f^;nAT(~K?pg@)aT6^dCjMQca(hxk9E zWjfLd-;(;M1Q~t(Ryb}4TK7>~WUzUSeN2Cc zk19DW?ZNBKXB(R-;A4N{^ZP|gE5d={i)|IHK?eA&?3h38B4*hdCYDCP-zF&$8`~+Gc2x2`iZw>jZK&4~r3OQjU!nbR zcJH*2pA#|t@F07V$8IQf5{~O8({mXrKTkqi;j|5YA_qN}MD?Z&pMEq<*wi;O$j>1* zw7m#&6UQ8FwQX&BD$LbS%zP0K;6k~9lllD@r)y;gCgNM4SX+!$#L4(75JmJM+>DPm zzzG}4e<>7v3P%3GKHs-wm5i3X`wF!1t?@7AT|`FQ0^AwCZR9xi@O;CKrj-##{_9lo zyaWo}Oshm3Y8(sIS&Z)mnMlVcvB!M|jS)Lw0^zKrkA9IuR8p41h;)tJ6%XL0qtWvL zvV1b@vc+1@PDrmSs&3&!Mje^RR{aS&i@Hu3bbp*YpK8>X;=1rxE5TyXC8VTdi#hga z8X@d{^np4TPh3p{9GQ6qx{p1XC9KrO{J%ohipt81zGUB+l{#=(FLisj(Q02C?S(Y; zBUTKfwtiI93!QLs@-xrsHW9?An^FrU4vJ$&XZMvf-9lRM99r{X9!}Iq`_ml0$U3(- zbN!&TW;Ad+bZkv~)<(;-ljwdFwIAD(@K1fy3!S3lXGB>$@=PWR{xyZ@s3oBg<&BMYKSwNF>$>pcub^jRzjvP3@1(RnLL3*K);cejH7ze2yxY=0YCrj-azU2FcGX_Eo)!Os6{`L82RG22LH@IG2Y4qu5c zJWB^mVja#V{nf2P%yPx({`;G8USWU8Zg@W``ETJ5Tn0H-^JE8Q0X>Do9w*^v=>>ix z1aPq!;1gniRda9WO66ale`4+zGXD(z%2_GhB}clAk(Sc^a9e)2f~{izRn-xAIafi? z^uHAx%6~FfK3h7|%!+zc`mMz8DxC~N>&_@O0Hvdf%mj3cy3TXq=WVRya-0`6@ke>} zXV)XH_LK;1%I17+Uq|$b+z3q^aNKCt{RTPxN3l*F*^VwGKK8E9cjZoY{C${rrX74Y z(7118YG(G@$#;_fA6L2ap|lU$7sG|)tqEt6$N`y#JBH$_Ko<+W>*@F5q=hFuj#e)% zHvFp0;~Hu4v?)6oRZ3dnqdi8v%XpUKz~0XMzEGdVs&{y&14#alo+bKGjTfVc?qHc@ z1WjwF3w{g>suv!n|B@6qxOmNm$Tv;5r9Q}(&)AMfmO-9 zXx&8gCM^0~D>1QxeYKGm!1w|t#o8#alYb^#B9e#HMozVgpbVRG?*j0JvQ>Y4SW72 z92FjW)Fc^&GCf==a(TL=df4vhrT9MSA7@^>xYuAuO)1nAn_NFfw+#2$5XX(i53%=b z33`SWi0bd_VVqS~eQJ8%cIi7-z>XpH8{zL$;Np3#`XeN%0kr%L1h9<0amx>TM>+k_iOoO{n4r_YkvX%xiUR_3_bh|d5YYu%jE%H@BF@`@)dsm^Zd4j z-i_l!*K?=OMDJHa@!$Ej6}leq?!Q|4|L&7l*@Mfi34P%lS?h&&@H^U>jn7(R>V-CyhIiI#FMNb`P&2L5a!(2gbQg%xAr)<^S z$!z<){L#5P9C3$z(TV4)=m{H>{-`WiEx&g`&-~@Af6d(P>~S)IAIYy$@NoWzyo)>2 z3t5O|WaKn{KkMmBTMOlF zFbXb%3ZlpBTHLgXzPL&Te;t+Se#bYl-ZL7{?8Zk?4Rl%Fr}}0^jnsEDCuAN?k4*dU z^hS{XiAhns{8u%oJ6RLl$|8)#N4;p3ur>=tn}*{}2t{OQF+F_(R9!YxLATHCFv

  • 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
  • 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 + + 204 + 00\01 + 1.2.840.10008.5.1.4.1.1.2 + 1.3.6.1.4.1.14519.5.2.1.6279.6001.147549101770122056857403430614 + 1.2.840.10008.1.2 + 1.3.6.1.4.1.22213.1.143 + 0.5 + POSDA + ISO_IR 100 + ORIGINAL\PRIMARY\AXIAL + + + 1.2.840.10008.5.1.4.1.1.2 + 1.3.6.1.4.1.14519.5.2.1.6279.6001.147549101770122056857403430614 + 20000101 + 20000101 + 20000101 + 20000101 + 20000101 + 20000101 + 20000101 + + + + + 0 + IMA SCAN + + CT + GE MEDICAL SYSTEMS + + LightSpeed Ultra + + LIDC-IDRI-0580 + + + + 20000101 + YES + DCM:113100/113105/113107/113108/113109/113111 + CTP + LIDC-IDRI + 62796001 + CHEST + RM + HELICAL MODE + 1.250000 + 120 + 0.500000 + 500.000000 + LightSpeedApps304.3_H3.1M3 + 360.000000 + 949.075012 + 541.000000 + 0.000000 + 156.500000 + 504 + 80 + 960 + BODY FILTER + 10 + 0.700000 + STANDARD + 5.787642 + FFS + 1.3.6.1.4.1.14519.5.2.1.6279.6001.173480979711457247360986415860 + 1.3.6.1.4.1.14519.5.2.1.6279.6001.237215747217294006286437405216 + + 30811 + 1 + 126 + 180\-180\0 + -184.600006\-174.800003\-127.230003 + -1\0\0\0\1\0 + 1.000000\0.000000\0.000000\0.000000\1.000000\0.000000 + -127.23 + 1.3.6.1.4.1.14519.5.2.1.6279.6001.269849279208588310379687197292 + PLANAR + SN + -127.230003 + 1 + MONOCHROME2 + 2 + 512 + 512 + 007.031250e-01\007.031250e-01 + RECT + NONE + 16 + 16 + 15 + 1 + 63536 + 32736 + MODIFIED + 50 + 500 + -1024 + 1 + + 20000101 + 20000101 + 20000101 + 20000101 + + + + + + Removed by CTP + Removed by CTP + + diff --git a/server/tests/dicom/ct-lung-screening-nlst-instance.dcm b/server/tests/dicom/ct-lung-screening-nlst-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..e5e2d1d1ab9c1bfa5e8e2525a16ec7ec1ad4870e GIT binary patch literal 526502 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
    agyD&79Sj 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

    eoI3cB4 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�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 z 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

    oc-q8RX?^4|6?xH1hFX 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ðo0HAExOuhS5(dxqs$2Em_Q~nI zyD(k&ejkgk;&xQ7%3a|$4$0W-*dU811J5Gs*fAmhZ|@)iZ~$w&uIWhjf_!7`tnrZ@ z-Mipc*GJaJm_z>`2_^NaWgV54T$q4Y47gzy`@BWY5ZF(8Xc7w(f9u!QEigka0cTOUEo74DiFqHjQqkm)~rn%2U`ky)i0#Vv)+= z^E+vVQmu-m%5xxL>{?mP1L_Tn#?QMra@M1R#zF0&Xe4V~#_XENsa%6@UNB6|h?A4& z+%=vIrhvS*?1u=(k)UNI)17#F>l#6=Jj*WpF;(h^=| zr>tb6=2$!i9kJr{;klNP+25L-NB@6UCSu}ysS>39_#gBw2^phK06WwxS&H(+J zo9(f8C&ng=FqUT<8ibu!TLc-DIph(*?bhc1RnZ~qWBsiQ&8F)liWjmpN0#?12;iI? zV?~ar-vIoOr?Ec2r{x+kkEdpjskuto!v(oMk;u}FIP0*W>#p!5pXvH(SI?|(|MApC z^-omrkM?!di`9wsiu%cT17~K;`!**wZ)m=jTBH5y$J3wiP1W65v+QSKA79vdbI_Gf z3Hi{AuNwo|5#!XaN%;xC7T^ATM^0geBuvLV>jdeGTyklSz~4MM^JGZ&R3Ya~Fi9~2 zOp?s#sYHrcD>WthpXd#OjdMsRcDH)G$fM-gu_RSU6i;78HSVnV!diRoQe3V!4C*ZQ zhBOZB=$NAY(bai|>@a&egb8pVN zIv+_cZ&om>pVh1D!|JbBW6}k0TYKO32UFS7PA{I@GLMJk>iI+JqXuQHNH>2SQwN`J zdSrHVWM+20(~)sP&a9>jK8IJYQjadsont|y_vTnv$lKgJ?*Vx_WO{ag<6flKWWSdg!4^^0*YbE#if%paMqBHdJaTO|r zcCd|Q9>?dUzaSxgOe9#U~IJ;xNE=sJSYIIW{eR%9y(qn>0p=ZaQmJ2B1l zXo9i%W_@!1&*nKCk*-6ZXjMT_o(+@Y`s(rO@Oo4I->H)99UfJmuqXFR-td9+KmA=Y z2}f3+ZVyQ(vX3Q}I5^!$?#^}3%kjioqFor9h*Siq;uD5!X28};m-50Ng(Tn!l)hvI zCBu8^mF@69t4akpPm)6g- zif36r86W?!Yzfg9`QS+Lg4{t_37UR^LdxP#$b8Tr{FIzkd@duXx{;LQMfwa=pkzk$ z>n!%Wtoh8+s{pmWxV#0HoliUa_Pr$PG-ii%#yp~KmKpm>8+Kmm$D+({q3E? z$o*b*W%%mtblcn7e75;=^GK)XCic#G_4Cz$>L+2h_6T!tYU{|>uc9~BN6O`1%Gv!r zCv%Ud4_T98TM+qyu#L`059&z$$b7dnaxgq&23?$!`8p}vvEqeWgP|vjw?6n9R-aCO zJZ(Lnu8aOq{X05iJS6Y&^L-o{bJ^bdQmbiS+`hH__xAAW$#`OG z>aRv8UyypqfzbqKrn=y3^`!ds^+U+{$ymGldYh&T>l#Y$6e#E-+{c34+jM0ITeUn)vm$<5| zdtt_6Ac^U9+~DQY8O1j)OhUQ_PnU%%8U$a@x?1N(U+Ad?!;=fci^P^WBIkk_ig3m0 za4r3b^t#k%Tek%=q5^$L>cE=@a^%U={r>s`W50U?h$_eLD|+w$b|6etb?GIWbe+EStAKA%5%d@7?gSX zSXRI~Aep6)q|fb)_IK0E;-PB4_?j=*2dAt4EzP@|2NU6M$|~7i&F%HkSp{QKcxr3f zZ*9M~)hGDV&$>Px{Ap<Ns*RSk#Oq`knS!#3%9q3k*VS)AKAj%vXE8}U-$8sx+wj~WcvG^y=vw^E zCt$(#^|&!u1FjA{enRAqrho(Ns0C0@0N=+C+|aT8i*xnMa#TLOtwi-$0@%X5e%ZwJ zk#x+Z4cQwefRCW+2!|1iNcQB$NTNC>>>`zgYx2TwQemPKv8r>KQPs}kA`!?v$^JhV zcGbb@J#A3~f#dgWy}q#`I2o!IIP$JlDRZ zeQEp8tp{2oTL)z|(@*EVXGBJIvB2LGdzUOQdsjNg!Q$C+JT+auWr-j|R$ex*N}ho| zDgBM10PG*HLBA>yyo^BUP2vm%Un|{0RUPtgNt|c|nvVBdP$`m)rNCE(dWlrz+K-J5 z+du!~!>futG}2JA6>#KXIVT$_H|N|c(&Rz-&N#qjt#rLX)TowRrhG)XGTcWw4t{s> zrR4}!E{MHxCshAo9@2f*@F=(i$%mWBiQ+PoQrBz`-IQ<^3(kN|hv5i|C^o*-8^9Vx zBQO!(8NUd7P@FO#cY}+lhat@)RuF~otoc}j@2sTt@#bBbQ3quW z&Gq%M_2;Vds;{Qo^}g+IgvGW;t7M<}?fiEv6dY2kR}JdSU>tiD)G~Z5pd1+Am$Yw+ zq?B4-Q9aq1nfX2@63vD>qFy`DzgyxR%jsLIk3>W9Z-`X!r)B^2_I3;$eldYcVby}7 z0N+oE)aei~J6nnO#oH@#WbFPec`wTV$(xx^VFt2-^7_yR6@d_Z*Cg{`Yg(ir{<42E zdvoHGh)y;~t~cenun4h=wr1bbPXISioidxRUck1ce*n}`gs~-Ofo!TJrh(KmVh~Tw zXRMaWQ$FYP?0I)Oko~ypZQ)Ton!Y1P#{+x0eR49eUC9@`JFAxMk;v?tW^6M#eCvIi zuhiS>q3KKbcy(3vi}uR)9_dCjGv3-Cf;B#o%)=cy+vrG#xL%~oww9<{G^n4Rs<=I~ z=JxKL+?Sd?IVX0rRPxE+vGou-tU;)hYI->^QixTqj;7S#6h^(gqAn47a>y4z&G;d( zNHxbibkTrnJ;%plRD*V6KJV8#k`>qBf3VJi)su>n3nQD*0$E2MGYpUy!aos{3)DXREMFdn_}Q-di} zQ97HsDn3hDnSuAO{#pLDjJ~=b6}9U1Xi$+4X15NR?nj&ei7h-(EL>=U7=|Zdy$lR} zD2j?u*&Z2Rk)6=Oo|sWLCodceSS4xB6^2dw*|j39k3=a96&VczAfmLheSaW91AiDc#k@!!l`D z>mwpG6_FZ!uv-~0krS52TJ z!Y^3-nK|}#xz`!_Mki6$eR=+F$p0I&r>-N#TY(8oiT<0A{Z{7+;hFS`uH*C{ZV;b{ zN3y=7KQNibWqWHAIKMlPiO{*ENdJh=nJ0Cu_Ov|B&*oYDt?RhtS)OloZ%=7|HVDD` z>PM-pz99&~fz6QATC9jJpWcj)PWXL&cYQ(q?P^}tGxb*2ws%jJ^`oh|+CP!orxOvW zZyudzhSwwW!)lf_H4eyHjBki-IV3ZUOtYTkR#z;zF?1X1CX=P&;Mho_Xt{K!DmA_8 zRCouN?A8P5lcSW#nbj77z`e zI2L9vTdU6q^bV3w&#!S8Y+C9>n z;ycw5>0|%B`iLO;8=8+dPdA?kM}K-4CqD?PcSP8yqpSb4?`@x&P8BP|QTbmy^1xg{^MUpfXX@8|`YK-B}Aa@}}9)AL(qL0#hL9D~em&-XV+j@2fO&$;C? z7v&7@o1ViW;PJ>T!1~ukV)1uz3$O?`b;e?Tu61*cb5pJXia0e_EF*D!erQg4LpY=S zMyY@vnQ>>QRea*=&5l-oF?_;)$5M>l23Y>~{C|ORd|Z2~KY999{5ySRPAq2UBx&HUC!Ads}AOftjhL zB3+itI)~jm9SZi1y6m&LaCJ5>elW zqs3Fu=^pw5hiBid&L$G@b3v{SE&#c(y3jG%!ulq<8u(mnA>%;Wd*)})$h>^MJ6Cb9 zM}peZ>50dm==wp&(!V=sUiYkO`=$0SL65&)oe@@ESLVaSW?8WO_XN?qqnXiMn2Nkd z<0t;LT3+o@eKD-_y;GAuDV;2SA8&J8j;WiJe2LZS_4LAKx-K(P76e0=Z(ZteV0GKJasj?5I&lN+>6#r#!kOr_KLqTK366Gwk%gbTkuGV z$Fij(-C_g%1l0lZH^d3-Ii3)|UH(!AYE;g+CR@$y=$AQpza?AHXd(_i2&=y|<0V@O zXQa8Xls4w`+oR96XCLxjILsm#(T{wk`ehxttpI&}?!*eFG9J2iiSqj7J8{msbR_&* z`j4EJI^xIES#4tbi|vEL!}>s0E*en3KR(|1Sv_T8upDbAO-kZv^UquRd;t8;v-XSxx5D}KSfx$-fQH8HOo6|O5km&KAb-YYW^x7|viX7{m?R~@5# zW>q(RHsuMeDz5sjbd85gV*z2y^THwM@>wuB8A5WZq7mYtmoF@vU1u@j0&?H{Xc~aj ziAkVi`pt+x#SW~jzD0P4JOUm*kAr7Gav^OpiY2Eg-;TR1UkYcJ?WCjh;^4`PDRyvc zoza!Zee#2x6aStT6KObNsSP02?x=4*g;eqkWHZD8JOuF-HjW72{m^N2)5H>HMxgI$Ko~9hjJEj(07Ih_DT@^H@B|H6KuDyYJaf3Pjy3b_N{tIQ2amE zr^T)6ykn@mTYmVR~k^6UMRB(!Kk0uk-lyykv<(|jpdft_z=w3K4 zFUaN0?5iRPuSxe2UAI&k2fno)gn&l}Q#Av!xx>vOR=EQrOQlkMWIJWs!SjQK|E4Z`jTeYfpxBG@^{BrBI@R80=xAj-z7koZP z-I$|8;H+G)l8&V7XnAO6DlP%E;Lzv<-ER(zfAG4*qOxavZ(a*Nn*3k)%wY8?*e*N( z_P68^<>lFQzHpCd7*asjs60^PM^2&lY&_(RU%(z?$l%^t`9=1bbcj~SuDy!97o@*1 zbRlW{YVwF{!}>xt_~UAfFbHHW3PTywxO5wKZX6!9P~=1&W>(38IpPZ+~>hm~d0-*s5V$rOQLeghs%N?~j zrDmTMCUeks9lS@-YHg4~Tca;FWP!Nw27fj47>6a~V24p?Q}WZg*(Co`hHitby7Tnj|b^JD)Zyn_JP%+bX@I`u1lXx-r$7PYQ4AlO!L9`gUjL- zoE|>c6X{=ia{a67zT|k{P(7UrrBj3dJQZfwrKw2nN=@=t6D8=EGCJC)__lInP;{0X z*PQH<|F`D7YC9Qs_M9D2X^w+n?pT#tKLG3`S-%tGHQ=$b_j*q3mn|`L&3a5#-bb;( zn5y^#rQRP3fxSq=MdmOAoq}i$=sF*QXD#mm3secmqSG0r=RU0h@ze7HdK+g;L$C7q-5*G8wuXILcw! zkB8K~gW#RgvF;^KxjIjJOITg+N*?GZiS`bOkM_aV?^{Q}E=$`A;`rjLbhA3}{69QU5znbynT2{#0!JuY&~lXn!*mWpfkt{W((qVCL(L z$Ptu%MD7(*1HZ%!y&^M>*NICnLZ<<)jfC8peWt{cvfogCey-XZRXVUYxpa1XRF14` z-|)zbs2q=GVvaCA@3v-c%W<)+7(#GAc5+nwTRlJ3;^_Cuio?)($5_0g0lmMVY!I^X z+0XTl?MU+S92cHdZ1&8^9p8LX&P1c&2$z0cpH8%eJO@vpbPZ7}pkIg)6LY{9X-?S* z{Y;H`sXf3ea_91!MdMr_T|6jT&|DA)jN;M@jy;8NnQH?x#{KfW>w6%m?Mq#+bsZnH z@bT7vvVzgp_Ve)%XI7ujDn<+IFVug@8t0?Zf%$#O_}<^#8%r^wIXis`zM9(P-t`;n z&sVe4wc(rXceKYOO87(O&cxWAH^x)^eAm09pD-iWb)L((JdX=Ar&SoLC}X?XLiP^I z59?w%*;qLS>@>2X+8p!f@Q#+?@A8>R1>K^aP}E*{dydC0lU>X~)d)K7@Y%h@6R;d$=AIMzVUkcJW6_MGh1KbGc_e zQ{`}e&LtNoQ^#XhdsDm>96@?a<>e81ua}27iI#JRDwX!ndsdcClK-2OnQ%v}{L}I4 zcZ%j+p1PYS!^yj_y{i3Gd$(ZspRaZcJN(vE;Ow7Ou;=HQZHj0At~|vp>8m*^o#y^0 z5nk{5wdy_b>i*KcJ^Yc^V(SOB-qw0K9d~Zeyu%g8lMvTk(y{RREb0fQG7n>u+)mAG z92U=SWJd>JKd#99T@&de-QsM>Is{q8BzaX!Pwsf*Bo{_FKGLUZ54&!1UpA4Gx#_F*k zOBbc5`AeCZ^HaxoR;ybWpg#}W=)qheb_d^SOs)(=pj54um>P$GG>PO(?>pH6D89~o zSVo6NQefinY->)?80;xOK~K>lkz$V0_eZ@qnHW9p;o?`y!ug?U}vS5 z_6LIS9?|-Hj(vBY&8UnPZ;5uIjd&>-!nkz!(pY;Kh{rI!b}AvrXF+&j;IO=hlsxnf^Dc+$$(6%D9~Ep<6qb^Kqx0vuBo0Jn}Ult)~h z<1EhE)@5Jywd7%2_Qf$T@~@lM#+-X>u0YTJdAar>nS-VJXID1C#cZ^D61f!i zgZ_my8x%m*;F7$fY4kg|v2#D}L`I{qfT1O>MvwAM*+b7Ucw^yC!9Q_DgCPs_c- zPIURl5m1##Lqo9jrP1NF#J_q&S<`fMu5o?5$;T2szBQ|o3{7t6T*)eknb zN3;)2U*ivlBhtThM*P&b1WEi}aLLccOIVjXo|-43V*5DDA+%~`q4R#93oznyyAeo zmlqTZ$@rZcd6GXIm8T-x&_DBHNqqTFbbTpf^T)2&1#dkqr{2WGY<~`_Gbz;|FQtO~^6>K> zPd<3J_Lp1hqv!W({UmYVoskwfW~hbMk$^h6q;N@ z<8(^HdsnqTFHdzzW<6}5v=+84o2@!m9>5%D>&U~{>iLTY`MWNUVCV6Fi2Z=~60J^S zwI?ZRddMSIfM{Rlj(ocY%w@TW8*-O0L08FElP_L{>;>dd=D*Y$=ubq3+3vD(0N-AI zb4uNU6Kp$-@Pa;>K>o{$sT7sX$*N`cp_wXR^jBg-kI3>E+6T)!T zgPqJU`16F7qI~sLFMv8ZOYW!R^Kr#ok^rm|BxEXB{0J-9SB z=i9*wW~ZCe@3W%Gb*V=FK~_AzI>_Pb_?Vw;9t&>pj?BPG&G})8{j2_Rx|xlvPtA(x zk5+T4Gpf3JK5XUj?ep3_+ja8DcPFECdHNi`q4jEJ{THKs9*r&1yJ2yzVnVJBcCMd? zb^4(3I{4|zbzZarKAws?(Z625-NFZi6OTfCM03Dav$L6JLXa!M`doHV# z>nB?(2Oy|=idmTsa~Y;6w%}=~i{-CF347%#y2Te!XJ_<8$%jS{sgf6o;4D~?neMe} z`|yl?SxI6^?(^fxrhGkpvVNZo&EBcgS{nAnSHtAot$ksV%`VM1Qg3@#3X$dQryZ^W0lEpt`pPudRm0So%N+$Ht`t*6UVuY6woAl-)P(JQl$tlH4b*6DdN zaD3jhDqWuWh{%<^nqC}im6%$W3=(b5(hDpfYllrQzb+qOo`g_gI zvw#V%P1HkE!3N|Cwq%Uf<(ztqLH%eh-ivwwxq6j=m^cu4F+NrSd~RCylK+E8!0CLe z|2Os!O{MFYSRcy(CNL-?Uo!a^&)5Spd+H%X{SXZ=Y$6%~J9t6vwTyx*bth_x)^s$M z$|(9$&43OEkQIz3F@{e?KDwT`wyBW<{;4eJ;5==(Is1lDCg)vN2bC!IlpJR zeiqd5?X3ZcIiF~~seMIzZq_vUWBZco#_DU;TM|*ONdMB`q>FpsaE$JZ9(XkN=%bmZ z>(U8gOmxKY&FjAhhf^r{bxMtCxrgFR-;J(Wml}nuWBv9| zN0XmMKE4xF`?0Q%MZc-X)W_}aj7aI3Ai{w+>3^pl&VAAJB^RMmr+c^xd&f?nkvYt| z;q>aJp);r60$3{gjH}Sa-?MI)&!KQfbu1sefUf{opohv9vVf(=pXJo|N9BJ1%rwu0 zC0v<#^-%2WlgYh5oe1cquD^F36n%PGx-=}xeSRhDMmJd#c5*7{ztVnvb$)!NRq2@Z z%jnj=^-Zzw->!cfuEr(JlKAu=h<5!<^F%Ur4<-s**^Emkt)0^m>fRuHht_|pK9=}v z_hf7rwR^?R|97}~15@$!=lEHlj4uChM(_H_w;rLYjpQ5fBlTz2Qf15`;#O$4IACJ-#NsjM@pMR_ zyuUgt>t(Qz`sBzG!1m^44-(`|{9QH=W;QS9DAj{(xk?`%?%I5>LT6RZD0{Fl@&=Ed zmHQZyqw_1o(C~IhJyxKj%L>9D`TN*=u=|pg)NcR|fB`ou+lypqADPLS`5#8lhk>T4 zJ(!ezaeR3-dL)owwLCllSO|_Yza~l;nROhV%Sx@MR2#x0JE$HVyZ>1I%b*6w zXO>>w>Gt}m#G_wIuK68dm#q$q{DN?i|6Tt$IOF#4OpZ_gf`3&1Q#}&=@!V?H;L+b` zzb78+m6^>w+FkA6rXSKHv0|%(QH+fiIxpwnIi1gb8K%?oU0;cGJ)S7}Gw~lDOgFXn z2PIpZJ2xXlVV<>)i}I$rM2yPF<4X+9dl(a@VyPA#o4@>V-McQ&bLT(N!Qv{J<24;y zVSX;nEO{t6`O_JV?{|GWmi(oz-(@AMQzGA2rS5fLaMgQq&7aBo)!z-fwp*I5gNaX(E)YI*m9P6B{{_sj{``(GHt_{b-Opfbpq4qUb9+y3Nd}v^2sr7NCX>;1z;b3u56qhdmFNy zXc`*NrokkpWNXzot7Api$T zyt`X|b`F32AIYA*skKXRiCt60(k-1;_sv#s%6GfBjtR=%FA;O^RwNn{C zq}~uo|614M_z zfp@cyeq@U+B^?He1k5;_|{h#zLSs@E8ln z@784XX$#)I{G5D&sEC$QF)%GxCIeBJI#5Y{1L!Ok8B&N}XoaEG z8MDFJ4wnJ%QRc!u(#6o08M!V;)5qLcs$bAuRA+J04uj-d%X6EOJ#;9w z!qLo(mTGU$M|4Mr<4lgrj8P{8xuO%`geniLFoaXj%Pt;++E{E%y^ZdQ<@sS4XZyCU zi~sq-*zBF#$AmYuCYi-It#?U&>04yTuPUI;+0TPJU{AB;o$V z3|pfeZp-T(`B|81=1XJyPHMWP_hGAfrGB*DoIWRW!dtqmJ|@xbAHrRDCaBm`@txPj z3%)#kkdCbms&)%g;a~0lZND0%{KcSWkF+0%pK@cQXL}gY_vQV@_VV_^_JUw*+w$2> z;k&&v^81mz9?k2KbXxgZto7e=gkQIR7xZnn>Zqz$Si1URBftve3t)&ixaxyhW`2f>V_o224eIE14~CWBl=+W2 zfKM;)E*m9sa7Qxjc)7fND241kDHC7JikzwDE3D)V9gB{kSLzhle|B8YB0ancXK_ll z#uoCTk5>5?*Lp| z#GyX5Z=RrvH<6+>>M@+HSPn&#iBsi@U#9|hXpVnpqV)I2JN{|-r)S0zZ%94)vx#{B z)nTZtYd@6A^4+V;;_u&9eX06aYR>w{KF-RD2T#;ruYVp+`hn33bK)C}PyDbhIfh%3 zYq-A?{jN*=yD9%~OqaRw@f$9U1f3i?J2Em?HGfIu@v~&ZUP|8b+x0gRM?ah_DR>q#+5f=SNgMn;|_F5FFUmi~7 zsBCjqqM=LT#n<6b+#3XcbTX%}tA9{^q?%uyQ|(i=t8YgS^=lvAep4cz$HJ}}8hO7s zzRNDHKL#OvGSDCBIvY38x#KW6Qw9oFLwi7`#{!v%EQ(VOyqTp0R{G za6B>QjGS{wzMYntts@8apZGw23#&y&VN5=w4X}LG=wl3swe`=2uF0>FfoZwY(%nN8 zKzcC;pmEszvK6{TTk{kD9r`{i*Jw2#s091wN-+*}>T`cEbm!$gTT2L%2YDBl@IXWz zP|K-#uQs4y(_~$~(cP0eC?kHdv4j}9GCI}!VR;^X^S{oY{C%jXNTA#SJW@@RINtGQ zWvuj@7@R$z79vn*n4P1kQ7Rn`F(&v#>vNB43_K07)V#!g4@8St^L%sm!3kQMPsObC zv(*da5$JVy&R6i%Xc~Bf9?LvG(FO~Ti)GD9IW_vw8rq{W#-c>s2t-HFWYS-_^raqH zmJ6nMX=WhYN96ois!e|pZ+ow-^>9wQz^)44;F;7cAJD!a9HLd}VDRZ=8@ne{aCPkX zjn!AOUQCbrp!&>6%96-SmKalGf85)d6QBMA($_{WS7F-!D6G$7`c4ghx&EcE@WPce=SZ0haEE4b!BvTM1Ga2)Ni7{jZ#LR&2*Y65x z+H?B*eIM@c_r9;E&-J;kd$l{9>pBpM;*?a`SN$`=ya?q>}^FE zZw#}0Vci$X1U}ZPwX1|oIeEaWh18l0bsn-G81Rq$)J1qUG=1SITtSX6l zPe>o!)BavK5mz^dJG!E^F59GTheu#dkqb30I5oU~IIwCSk-dsHI2S|;2bKLJ8EmSx zW;bn|+wmJ%Y{%W+$ZzVpx*pxyaV#J{?(xo*&G|^@VaT8BYV5vo83S&i9({U=@Y2Nv z?5PaF_%6^J^-W}CcKU-rsIybo2SpH(;L7qw9Os(!l&l-w25lH_g1BEK<8v8)v5{T` zggD(!tq_T|o=*iKE|Fab#5pX#`T~6d zOgK~`Ok*{rK{aPLZ9)aq1 z7(C9NU170Ebi|o{JGb`C^dlthNc!NZa$p$i-z?Mk=JJ5=EDN@|?vj5VHvYBZ`M1P# z*|xlI`SkMR`Q%@z&(Y;E)OXiq`a(I#msegN4))gdzfi@}yX$whAvxPyt?HpH_fuK@ z=huI^zh6yb{BZsM_2+f@;%`lNys0?i(tPuu=;zytDlU1=t7R_!b^W)q>aXT^{Gh*= zgsp$4-U;8z6Zy*e&(~-1vqdY<)mP<0J(oAQr0Q}RpO>W>AN-Q556Be2h$3eflWJ8J>K^Y82ha&2pS zb4RP$y{b<|^c$KBohx|?A4+Q21DQH8AYRR#-SxW8&`}pgCl{x;&fb2mwnF6Bc)!px zmQzRQTgP%FBH-VsG-`WCA|B`ySk zt%iKyC+Y^k`?2r9ZGCdC=a_eJaA9#-R`NZF-NgJdhdhaM>GTVYMBJ}dQEtQeXVUa4 zq-ZDaR>UPL6BT$8zRe$WEN&z0A1~@uS5i-KWN`%%nWJblYyk)joCBJOtA*?EK!5CS zAfsu{hLue3u>ANAdYEs?O5g_20Bije`|H@GOW1XtGd<2=1$baqm)?2ypq$7=#%OrC z*K`)NS@bZyGHHMN>9JzJ({Z{Q=?%p0=*TROdQbk#Ga>q4OfURpnRKZ9yP7|>3idtGMMYi5jlFkSo2!!+ zn6X|OH}o#2s|JtEj`MIle|Vj&wOp~4qz$49x3RTkJ&q^9%IL(! z^6?wbwg&ikVq=}EuzA$7xC1|$_0SXdKtIW}N}0nQXARp+_fU72oo6w{=Q0LXGjC>X zVWYM;5*)xm0PSSNH}^j_Z_q7qvft(QF?x8`@U_Pq-|n78PFt3MZ^G-Rb?7f%r<|KT zJ9c+AMjjN+I;9aHdJu3{mfdv^vAWp){xV1(Pg);My67do&7NlMvF8T+H>LS$^=nF&w=`}duFnx{8TXPo@&nu%1}-W# z4EjtDs+;=+8w&TpTEhm#71x2)`%_T~xzKY_w#|y!(Yd;3j9-c|qBpH-Tpj1}@n^Sr zEF7#@k%bk_d$J4UP2Ef0Qs31-D#Q0oSodekYyZ=_Z`A+n(&~>c3#tFbB8vBf_urK# zeR1iJm!1rtf3E1_bM->`m-<|MW9eH<-&y*vrI(k!Th{#zbxHrJ<=4l8{pY3UV>c}? zzqSm*xAQr^AG_gg%a<*`uKkr>3ElrepS{pEo(}Op74m;*X)Q+7rnJ$!$|k(2jKR+> z{cQJtb5YHYFa6KDueUqnGx;@7HP`YvvPfdfJ-wsfOltYpSLcnZ@sVGlYguG_`_i%) zIMeY@ZL)4)a2H-TcEKIZub$VN`-HxiYr3&FESlZiTtM4-c62jcO0Vzi7`rUVinEEk zx{qpD*|{yv4?KYnEE{*U&!=Oaj+?SiFfmxsRM~E646rr;)_V{~ z`BD|gkOG+jGeaBBPNGl-Z$Q=nl5lwOBoC#9AR(#(U5gH5 zP-nr@-`}xwZU1ANcl@N){&U@H+BClNr>t?o%`XtcEQ$TWNYJ; z2l8ZldM}TKI{sN~p{LUlpNW0*Y}|k^_3yLcXa8NL+}D!O7uJ0>R?$nv9WSOw{w|F2 z)jBJGx!*pY-|^DA@8y+$J^$k$`u*i{YhMU?`-=sta*;m1B{h(0 z>zPf2%)Gxd$=u*~(`(QAUu|`;FuX;*b!Bi!#kPf>*_TXW%&`q5pA_%w8Sd{|P&Vhm zut)C1`!F{0qh@F7@A#Ng$17h3fm4UB-sVi_-jnp4>iY8PNBWlLA=5mG>6fE+ZhvDF z!|*HNc(j061kNSK-`17QFWV@0fX|P+OMdm)!6j0OhX*fCP>Ier#VBI)AL#D<2XQ(( zJ-&&xDH6TCH@>qgLohr)EOdX;|3tn8l#Di{`(Pn>0tb60_8(qI3P>-%M?{NDNB;QW zGKb=aQ)TlW?;Ku++@&#yVz83LMUyclA;T~xQ4l=G=z+wZ%8t@^*u&PET*mApC>JTW zXl#&8JstOFOcGo&LQ`Y~@$q1Bc`mCyLgGoV;^(ONqFi)0hQ(8w25zd-U>UxP|Na<4oRX4NS zlVer>j+2jqtwH3)!nk#!$-&w1U$NzOcU_*7orYj;P*t6iVR+E6J(O6j(BSGC>IUovzsnda1eieIbmGGEF-rNK>R%GXKK`NN-)TdH%d$o5;XNQ zV`JzZk*yd~e+;};&v2~ccXcKyxVN=`r0;d?AR~Ba82)%Z>>_{N{yeVBrVTg1`&LaP z-={miUH@2Meg-SXtI!$4>NO@(K5;9LcD1*m_aM&F^?id?hXu!jAj|j+>SEipgEem)pIkTD*(r?u+U-s0GcyCDEHB3>>VY1QxT?aB7DptRXq*ZE|z-i5AZ zZ$S1O%0OrE@8wcN^E4u)V|1i@>N_ZofK$l)+uf9(Vpbklj6oFtqYk1Z8^3C`XFJt( zaGx#|y*%8L$U=JiFwtR9Kpn(j-oC7XjH8MNm70S&4krOdYGmRKt7Ia1ISzW7x5+cu z+1gUwhCyH+apexQ+TYh4PSyaHBpw(amba(Q`}WS$4-i7AvXo~aHiIXK2*tPdsx~{S z82FlY81)@gffkXy!F~8h#~Qik5mU3QH}pr}P_i$NsW+$G7LJ>p17>fnjXecPTuqAg z2^LcuAw39x+TA^&WS$Uq;T_88(%1ab!OF<hYsj|tW-umUa({AJ+ zmx~`PZvo(ssosHpt za(cXU{?`p%4c^bUR*@irvmUU>rzTT|P24LMW<6M|y`8na^&-|CPVV7kPs9sl6DeS$ z!?0!cRLk>oA>MQ?ZE#2bp6=;bDLM{9H+4R|0a%hxXcfqswJHY3NfO=YE3m!u$SYYO zGkjNjZHk}81kiIl0QeOi0^PX3Rq%VA36VS789MinKo%9M>51emp?I?gfoj6(x_z#@ zz|GiC(l3&MU5e!G<@sRp_hA1sZ`jbZh;N~7b{JNp$FK2rPxi^feRjI%<7bgWG0iZj z$sCI(PNow?^*WDEy#(Y2vLfFBFVThIq3->OJc^Tx_dR(-s3x34&45|6CO_JJ?I7a) zKn6S|sa?x^IoEURCMYr!(cnescyPF59VerBc5w%NM8uRB9A;W=G{zXoz}Z#{i8Z97 zHveDW10KlXX77U?i({)!+WLfRlh|AOMxH=yBK~sjrbg^cmJNDHKBgNv9;JMND~Pvl z>z*4rhrWPDLu{=*XWY}<`PkwqSV4SVYn~;r|Axv!R@l99(G&h6?wu&n?QZL8D@{wLo zzN2&WfK`u&O}EyJyOR9f=+DvPEcW5_`;#3F%QbG2M50*{evi3R74hLlVJFQGbsYR% z_T8t0F^?BZyU+r6Eu@97D-V6Jk$5j+j$y^JgNJ&{=NlQDgI~bEaDOvHJC2qgww_2B z<|Q*gy2j__HCywOb07Ahm2;*m!^TwdL6Y>~Q+2zgtBM35j&#^?j1Kl*WVpyRZNR%2 zoDGlezK*5a_w*Y?0?tNnhLVXaFP!Or;vIEQuFm5k|MV*F z+Z*Dc^L6-H@_K*Rd3+2jPlW@#abHj7b6SR1z_;UZOeYaz$AH35<}nQNN$0{B#a5zN zb`&D2|Ds)sPj}Ab0fvP{zwx(t)3U+3kVBlOHvtRiE_$Z0!&Wqp3I;lyFF4**PxI;2 zZQ1qYXlKYRv1t%8xC4(?9JDFvv}z$+q?0Wpx1u{J4pc%sLqcJScQyw+EfuX0brCRz zsCsBQEIYy(FNvckcQvA`7k3wX8UtoF-Ybiv|BKa2ryl6DO`YjJa^D9#LS*VMZ~lW_ ze{0XoCXw~wS>l3U%vTljd7q+26{J`sR^-;64{A!@Sb17RY)?8Iql|O5_UY zh(X>DHA^%%WQMi%uGtNDhp+RD=l#K7p)MjoJ#_e*gH6jK*_D!hmo41cxmJOGHtuab zuxvE5cQiX_$O*7VVjNnWWxxxuiihPdKWs!i8Ylt}gp|R%%$XI+qsA!|L-8!^h$TNY zQ8%mSt&IOUNSV8gMmHAnFzou%$=suz4ZHL_I)5MSPS-T1$@B3FX*~LZg;kL=I!%Ok zEUR(0i2rk;LsynxdhIgZAmSByjdrE=y^Z@8@8(3;63@_kXSz4L!j-AQ#~^>&P!FTq!nPa1tux=ZlCm%&zFrtn!tN2nu^^_r;~<{lJ0XQ!FhHg>GOqu-ftX=qwm8tZAy`Sap#m zCLK*F4x`gZ+Hi_k7geH0L+jw)nKkh{zKInvs6CI3KLpQ~A>^^MGdkdj1zlI1$>w6{ zS`VT`TEl8qYdhRp{CgGj^nqBNEYV5y9Y5X5l*{6Ov4S&#@qA#-_(Gzn9UVuaPbL*l zr1@EK_`4eXgB^oA;eGle3yF~kMc^~Q6Y%Kd^FLJ|ihpcBty{|RT)X^l%d0DTZ_CBY zaPd3nnyFVlx|m~DT>K*=^q#94&6t&CWzx3L ziZlJ@&MFh>;o${{0jAH`M|&zgjaYrr4xXdgg%0qLW%{6{qrLrvAr9Axr%D3kPGl`; zP-w`7o8Nd;Ni(3O` z9J+R>Sm}|*$~(r%Fb<3jSy&hiJti_g+nb&oF9|XpUdCYMs-muG#Z3&PGlF@8mFdL9 zO7TVE%jf&#{yvAg!2#g2uogN-R7(=ZtMPV+QDUT!#{2T;Ki*8}?c%-BXr9oMLTSkK zWQ4ZlM~Q#fTej|4&oG=?x=80pI{8T7(eC!C=UYw2mgShLa2~sk7b;B7ca@2D#0S=v z6=g->w(&k@?~Xw~L`Jl;yty^2gRS|rp2U^jC^i{81x=&H`HX{#WGi(YaV4=gX20F?Xw2yeB+ggy2{n?-lL6q}(L3xJwA1=} bq;3e$w-ds~_Se3wz7%g?`Q*wQVv_wo=8jo= literal 0 HcmV?d00001 diff --git a/server/tests/dicom/ct-lung-screening-nlst-instance.xml b/server/tests/dicom/ct-lung-screening-nlst-instance.xml new file mode 100644 index 0000000000..302c24f405 --- /dev/null +++ b/server/tests/dicom/ct-lung-screening-nlst-instance.xml @@ -0,0 +1,118 @@ + + + 190 + 00\01 + 1.2.840.10008.5.1.4.1.1.2 + 1.2.840.113654.2.55.12882863977514288242837811272669865908 + 1.2.840.10008.1.2.1 + 1.2.40.0.13.1.1.1 + dcm4che-1.4.31 + ISO_IR 100 + ORIGINAL\PRIMARY\AXIAL\CT_SOM5 SPI + 1.2.840.10008.5.1.4.1.1.2 + 1.2.840.113654.2.55.12882863977514288242837811272669865908 + 19990102 + + 888953 + CT + SIEMENS + + S13 + NLST-LSS + 0,OPA,SE,VZOOM,B30f,278,2,120,60,30,na + Volume Zoom + 061226^LSS + 112516 + + + 061226 + National Cancer Institute + NCT00047385 + NLST-LSS + + + 061226 + T0 + Washington U (images), Westat (assoc. data) + YES + 113100\113101\113103\113105\113109 + + + 113100 + DCM + Basic Application Confidentiality Profile + + + 113101 + DCM + Clean Pixel Data Option + + + 113103 + DCM + Clean Graphics Option + + + 113105 + DCM + Clean Descriptors Option + + + 113109 + DCM + Retain Device Identity Option + + + CTP + NLST + NLST + LSS\00 + 70049004 + CHEST + 2 + 120 + VA40C + 278 + 1040 + 570 + 0 + 145 + CW + 500 + 120 + 30 + 0 + 14 + 1.2 + B30f + 1.2.840.113654.2.55.33575893932308185246496913106863435791 + 1.2.840.113654.2.55.57669092321627294898588883865157458147 + + 6 + 3 + 107 + + -138.72852\-260.72852\-337.4 + 1\0\0\0\1\0 + 1.2.840.113654.2.55.85903792958366369381906191157480138431 + + 337.4 + 1 + MONOCHROME2 + 2 + 512 + 512 + 005.429688e-01\005.429688e-01 + RECT + NONE + 16 + 12 + 11 + 0 + 32736 + 35\400 + 400\3000 + -1024 + 1 + WINDOW1\WINDOW2 + diff --git a/server/tests/dicom/mg-mammography-cbis-ddsm-instance.dcm b/server/tests/dicom/mg-mammography-cbis-ddsm-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..dfd7bb1a528e4d69becdeb0d03e806e4012ac1f4 GIT binary patch literal 299076 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ⅆ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%0DA8l9;p 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 z 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 D@sp1+C3paLq88*}z7!~!Q_yJs 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

    tJ%EJNCUpoYm;8fUoPS_9A>yusJl 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 literal 0 HcmV?d00001 diff --git a/server/tests/dicom/mg-mammography-cbis-ddsm-instance.xml b/server/tests/dicom/mg-mammography-cbis-ddsm-instance.xml new file mode 100644 index 0000000000..c87ece87e7 --- /dev/null +++ b/server/tests/dicom/mg-mammography-cbis-ddsm-instance.xml @@ -0,0 +1,49 @@ + + + 194 + 00\01 + 1.2.840.10008.5.1.4.1.1.7 + 1.3.6.1.4.1.9590.100.1.2.145141605511468979636497478400886398073 + 1.2.840.10008.1.2 + 1.2.40.0.13.1.1.1 + dcm4che-1.4.35 + ISO_IR 100 + 1.2.840.10008.5.1.4.1.1.7 + 1.3.6.1.4.1.9590.100.1.2.145141605511468979636497478400886398073 + 20161004 + 20160426 + 152851 + 135218.377000 + + MG + WSD + + cropped images + Mass-Test_P_01510_RIGHT_CC_1 + Mass-Test_P_01510_RIGHT_CC_1 + + + CTP + CBIS-DDSM + 43372602 + BREAST + MathWorks + MATLAB + 1.3.6.1.4.1.9590.100.1.2.267826310912478261209862427462784808028 + 1.3.6.1.4.1.9590.100.1.2.88158044112350000736236683583018260323 + DDSM + 1 + 1 + CC + R + 1 + MONOCHROME2 + 386 + 386 + 16 + 16 + 15 + 0 + 38064 + 65535 + diff --git a/server/tests/dicom/mr-prostate-prostatex-instance.dcm b/server/tests/dicom/mr-prostate-prostatex-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..9d27edbdb57c3625ee6ca0834d514d4d4cbb10c1 GIT binary patch literal 25216 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 HzCQUs?0A7> literal 0 HcmV?d00001 diff --git a/server/tests/dicom/mr-prostate-prostatex-instance.xml b/server/tests/dicom/mr-prostate-prostatex-instance.xml new file mode 100644 index 0000000000..a89f5ad7d4 --- /dev/null +++ b/server/tests/dicom/mr-prostate-prostatex-instance.xml @@ -0,0 +1,181 @@ + + + 196 + 00\01 + 1.2.840.10008.5.1.4.1.1.4 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.174080670823095725391876950759 + 1.2.840.10008.1.2.1 + 1.2.40.0.13.1.1.1 + dcm4che-1.4.35 + ISO_IR 100 + DERIVED\PRIMARY\DIFFUSION\TRACEW\DIS2D + 20120222 + 093124.703000 + 1.2.840.10008.5.1.4.1.1.4 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.174080670823095725391876950759 + 20120222 + 20120222 + 20120222 + 20120222 + 091218.078000 + 093124.609000 + 093113.347500 + 093124.703000 + 8913853518574410 + MR + SIEMENS + MR prostaat kanker detectie_mc MCAPRODET + ep2d_diff_tra_DYNDIST + Skyra + + + 1.2.840.10008.3.1.2.3.1 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.989962386484007264256688307298 + + + ProstateX-0204 + ProstateX-0204 + + M + 068Y + 1.85 + 78 + YES + DIAG-ANON 0.3\Per DICOM PS 3.15 AnnexE. Details in 0012,0064 + + + 113100 + DCM + Basic Application Confidentiality Profile + + + 113101 + DCM + Clean Pixel Data Option + + + 113104 + DCM + Clean Structured Content Option + + + 113105 + DCM + Clean Descriptors Option + + + 113107 + DCM + Retain Longitudinal Temporal Information Modified Dates Option + + + 113108 + DCM + Retain Patient Characteristics Option + + + 113109 + DCM + Retain Device Identity Option + + + 113111 + DCM + Retain Safe Private Option + + + CTP + PROSTATEx + 73105101 + PROSTATE + EP + SK\SP\OSP + PFP\FS + 2D + *ep_b400t + N + 3 + 2700 + 63 + 8 + 123.240954 + 1H + 1 + 3 + 3 + 95 + 48 + 100 + 65.625 + 1500 + syngo MR D11 + ep2d_diff_tra + Body + 0\128\84\0 + ROW + 90 + N + 0.57373217280629 + 0 + FFS + SIEMENS MR HEADER + 33\35 + 34\30\30\20 + 49\53\4F\54\52\4F\50\49\43\20 + 46\61\73\74 + 4E\6F + 00\00\00\00\00\00\00\00\6E\F8\FF\FF + 00\00\00\00\00\00\00\00\73\F8\FF\FF + 30\5C\30\5C\2D\35 + DC\2C\1C\10\7A\C9\52\C0\22\8E\33\55\09\EE\59\C0\75\95\8B\84\78\4C\49\40 + 31\39\33\2E\36\37\35\20 + 31\20 + 32\36\30\30 + 77\BE\9F\1A\2F\9D\34\40 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.989962386484007264256688307298 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.184815022142880568898393767017 + + 6 + 1 + 29 + -75.148075130013\-103.71931963112\45.597427910633 + 1\-1.885178e-010\8.07988e-011\2.051034e-010\0.91913534192834\-0.3939419033541 + 1.3.6.1.4.1.14519.5.2.1.7311.5101.221351907157888248216888359615 + + 1.0508213036143 + 1 + MONOCHROME2 + 128 + 84 + 2\2 + 16 + 12 + 11 + 0 + 0 + 320 + MODIFIED + 89 + 239 + Algo1 + SIEMENS CSA HEADER + SIEMENS MEDCOM HEADER2 + 63\6F\6D\20 + MITRA LINKED ATTRIBUTES 1.0 + AGFA PACS Archive Mirroring 1.0 + ARRIVED + MED + MR prostaat kanker detectie_mc MCAPRODET + MR prostaat kanker detectie_mc + MITRA OBJECT UTF8 ATTRIBUTES 1.0 + 20120222 + 091218.156000 + MR prostaat kanker detectie_mc + + SIEMENS MR HEADER + 49\4D\41\47\45\20\4E\55\4D\20\34\20 + 31\2E\30\20 + 38\34\70\2A\31\32\38\73 + 42\4F\31\2C\32\3B\53\50\35\2C\36\20 + 2B\4C\50\48 + diff --git a/server/tests/dicom/pt-breast-qin-01-instance.dcm b/server/tests/dicom/pt-breast-qin-01-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..567b5ada7e8a71cd0260092f7283bdfc986b92e7 GIT binary patch literal 35722 zcmds=2b@&p)&KAGK69tf_SwEHTW0$%u#{yNSft6W3W%{FqF7K6RP3S#qhc3>MvcY- zv1{xaqp@qOX=<#occaE6D*yAnhY>ZznDS^(Z!=hIv^2Fgb+_l5T5`EucT-1GOH;f2$_ zM>yn|@p4RCQ)m8{_KubwIj&W7Vpvu4DMtp{f`>J=JuEsX-eoGJRE zC0qI>Cz>(j%<)#MCvg>X!jRL*wRg;w^UQu(Z)xh3{W)2;8=W1du~Yfb6wW!q`i>d9 z$hl5q?!ZtsW-O39H5vUAr;loBX%kd7TVEae)umtE`qg87wX|g8a;<4IoyNrBS*)Ae z%rFeUIOpc}#*MhO*DHJRHk>VEB;~&DP1?#BvkclQKG>Bp_On_vJUD$IV=S}Qr%#x% zO~%+?{KanMvKeFf7i(G3rQ2w4Y09~_jL8{eFghqmkfZ0fbhODCN6K+dV}{r~WAw!a zMY5JwA){PI6u~c3Ce6xbjnKFBAaV7sj-Jk*Tt|0juB)ZBwWGB=muv6r=*?v~>gee1=*b#ga&*{eY?+_47FOhHv%h6KTiQFjx>~!t zx_jC?Mc9t6&bF4$?)I)WVO}w;FlxPna>kUl?Hi(6pg}8AJ1D%$z;FPNEOjHs#v3FV^hVT156atTo!@ zw$=<;^H^&e50_sZLsPuc*8agsg9H6_#_UbVtTToz`EpI|Eo~j`Jt9Fle3Z)#i)Dtk zHjIt(@AHku^L!5r`-9o`){gA3_!H}$9l7l18$-{Fs~Mkf{GIhZEbRXEb2Gx3(`FVL zllmuT8ymB`?X`T#(j~htTyo$+i}qT+V9BzDg6aLf@Ry~g#kgI-27VR4%Yn}O zXuq_jN2pXFE5|ICJ+!F1J7cVnbzz~V9=U@2YwhloU?wbZpfIS!%}vowQ2)gp4*L2p zo9;Ah7>=(?Bg|q$qZ1ojT3RNw2*=uG+i48Vm@b^|w82j;-IKPU8Rs`#tFI;3wxw%* zlh(ej`>$^g8%J7595RLtyFJet!-nbnTQW^*Y!Nyq%6(lXzp-@Tg5`VfvT&dMw;);U z8?PwrzJ)8gjeVCc*=OMvu9o=5tF?D+>1uvs_k}y}y4xO0mu;zihKaup4Nn*zoH$={ zoyh~khE4W4jlQj?PZRCPy4M((J~%WqICF+r-D21wVP82e3U>Eixbw2*OBe3i(2x}j z_H+uavJ3WZY-td0u*=bIu0DHMwj6T2+i2_0O0qRGJL35@Gp+F>LYuKpTbgYnFOP3s*i^DC&#`A|uM!220@)7d)Z~5mJMoUPX z@)`xkea1`1rN##1Y2!oV93y1A&Q@mo(0JE4Q!t#67$1;7r)0AKKm79>L6JHx`Njt0 zN#l59zOjR`Qu2%yvK(YAH0Bz68V4AA8%yMf<;GHDH~Bu;*vsfJCK?gZgHJT^fAgPP z>=+kGR*Teoi_}BLG-Hx6)tGJ!7~_m7#$?GZ#~Y)Jv9dm3^cWLl&sGxIryBk8`#57e zW0A3s=%Y=tl8E%R{_p(rh|R+y%>g3)T*-rXFy+p%C1$zzgpA0txFl+0&PY~C-D zw2QR8^4V@Qi~KFJG>PSV z#t6~D2&3NGS1D(KmKM22xA+KX*vB|gGBW>v89O?}>NAWvBJXVBtubQJoJco9TCcK> zG%94N5vgiLzMSZQwQ_4;jrCipQDT(JTJA@ml{D#){89-pqZ3tgkSM_q`_Cp zE$LXxTIZ%L4S||D6yTMtbgXdQWbyWi5}mLd zw#JIIK4aOfMC3&SDOpM_>0vv(9A3x9NQ(>{iNE0MeB&>im61R2qMpMYxW@>&8$Q6X zSvd!;Z4y72EL`CGH|W3=ytN7o_lwPQa%cFgLRx|cmrH9C(q>vrd-*FC8-op`LV~=_ zl_Qn?K|7d1D`~kxQm#?BNoSnFc^rWkW#w88@>eN)RQ?8O$w)!rXvr0$|6&b>GUdFqtP{7C>$9>(u0veo9M0lba-K%{W?#AWsqBE)!yai_ z&}gBBh?H!pc3}~8mfe(PcM@^zl7LKdgbT&Su7$Qr8M^wvreX(p6ibi4*gJN<|^j>0lS-rHbSFX>9 zz(4n&Tk_3GR@8-i!8$kwe^?ql#4Rf&WDlA^4;t(6_ZrK_4brkUk)3EcS@?qOKn^Ah-}viIx6KFIk`rMVBnvZ z7un?c6UF0u#Da|$l9h>7a{LmuPKqs}(#|s3rj?+gNLmE$8^p%#a{dIt&(_AS#_ke3 zmm5b(3|(R@HujL-;;>x5-|7vIkt3Te4R8%)CVxQ2m~5wH9mJt|#(JVs8%S7p)(BfI z+HRI*v}EIve-Z@3#_5vZ_KA&%bQ;Tu##khu%V2+e6zs!KU_>KBot!sTICFvIia#)Z zWyEatwn?^mwxzbowkfuptwgF{&9+M0=f*FjMs&1jW42^gU1G^9xt7{obqwC|u!P(J z4$#~xChO=SF4`t;;BV!k!->)l{pa{WK&;j$s8q&7=B(Tsn}hMZ?P(Q=fSELkR|;Nw zBwC(k{KZ&hE4N=`KhJTybByaC*GAXD?g{SY?$=%Cxps5C>^jOd+qK;Jf#WF0Z|r{i z5w_1{EOfr0C1+g;w4>{k*g3Mv-s~Z>0(Ha()d<=uvNX@gQJ-W4|NDOdVU!7iC~}nw zxjv{St5cs;?ISzBidNtv)*HmTPcdfLZm=(Qe&(L!dowUUyo0$_^oO!IQuV1HrOeC= z$FyD(zF=#d{U5$P}jzOxzkRHh&kn z&h(le#AZfsGe-q)bA4=IY`aXVqLU?hkSD@_YH2<}Ls0$#Rtxf3HmrcQN`=f)c2gNd!utBdX_I-&Tq!gz55mje+pk1-Zyf6bY%3MK*;rk z?J1cz(Jwk6k0PrE2T05xF@QV(CcyXbM(rzANknNA8U80Zp+_RfXkn2SD}SpL+bi}o z51|)_?cv@sIf8yjPJCrw8BM#xzLWpu==rhJ&DO}n(V6kO*!_{g=wD*nnv0?x=26j) zk`oG_FS#zesQQG8b4sty?3Nx(otNAp^+58T^!nH*@!O)~W7{TPG2aOv5jrq>N$g0o z*R$3hvaJv{z!Nn8!2SubfLfmD2n&!G(5|$VO;reQH3|pM{U1bvfFQqH;x-zuvZRN7 zl5+hrX+xoPZ~C(dCK3bX)RV^MS~x;lo3dLrX$? zMGlJHl=^+iUF8RiyrBJ~=Cf*NRGeG%aq5xy6Vdk)MaiS$v(2^9-gskra(c&v*PIsm zZsb98(0s_dyCY*;CFmM!wW-pw26=&L$z5P!QL`^%aa52%wH3~)7rXqU^?{I;?ez$< zsk_j7FR>*5`T<+XqKACNB$Cg zJh)T%K66@pLBZ?UKR2}Z*Kaqt)rOvZ>rO2>IDLM6ZhTby!|3|hiRR-GZ|wQl%>~Y^ zEj>MYdT3*)IkuyDk?%JSkA;CAVPlO&^bEiNIWSyA4vLlFXQDCHW^(gZ$v^%P4Me1x zJ5_K)HK$6fU2I*C9;zasT&|w5;trfg6=EynP@~lLsbgm7uE;aN>hO2s$7h=>78TwT z|2UQ~w=oODyNB-%*GKO%U9q+4PfERwzv*rteZ!bBZ5K7ZT=7KFf`SJUZ^YZ{96fL4elnnP(Ne!uq(3*7J3PT3no~m6 z;qkF`rPtNnTl$CO>iDIRS>aQ|&dAd673Mjy7ozuOR+sjbH&^!66jvQq>93zP^4RPL zh5M%8O`MSo$8RxD7nV3JygG7YWV^V(prEifJ~H}f=R3*sTsJD(6CjWNhM-f5GWJ_{bv|OYopNDDjFPNT8MEj&=V*579 z-|sN)wg1+)r}>NEqM#@GRMDK8m9>WzMdNpv7lfV)y%gCwv?jdT{2=;R^5^N*rI%KD ztIw!7v-+&6^4bv%;kuP2>r*eqUrwxv9TFKIJ}x}Z{8@N*Xpivg=3io`#lo?N%%?-6 z!`DW3jDE-al-XF)VM7CkU5ulP^NHhBSxhAs^M zEMhY|qUS_Uk3N<-IQ^Z{eX0*?I=b)NX%|jCaza7Z*40;({UF_)sE=1B_KEEmzB2S+ zX#dDvkrMNYNFXvH_I$iQerWXY(4moTN&Vh)O|l&%_pA{K$%(W+fWO1~AXTfT)Kh@_`IeGrp zW9QU`tIjUGDZOiAS@eL|#gR3UvEi*lkB5I2a)$cDuf+CEz8b$R@lJGkWFTaVz8e_r zc-h!S5CAf>@`vP_`@+x}u^CZ`>Jr)@CqRBiqZA@ zZL%j*mFX>6)D)bu!@Ni4+jqHPUirX==KHhf72KWtSaAMl^X2emp=U$;hu#Yw8{9fr z7Y@c;1*axgCV!cp6k8O&HS|mK5^unMy5vG|6P1W!X_+agq$Z;E7v%ujhj%1Jb|L}Q zJ z#o}92k0yVbI4FLld9hgjgWxHl;ZQ;Fhrw|0sK^GzxNZf3T`Yk zi`Nz3U$|f4$0cW0?$N$@%J^yD@4BLXW%k{oSJVBechkSfEJ@CdT@igPvNHTw$QQaQ zTpy}4$3#~qZ;2gUSY2{esz1CwurBaGV1|8(@Ghfk zNJ~7S?ouuL&^2sOEet_Uv6V5=c7^Bp;Di3f!O^kZ(w7%>R-IYyE;>KaY)&(a%~i36 z=#I%73m++ItGKah*U~GB-YUAZr87!zF8wfT)*M>?>(WUDi_;$z?peHVHd1zK z;dfGv$-YEU^xjCobeRK*_SE*VtqQs-ZfJe0^XZ~VW_jSL@I~$-+ki;ZBrPEdV)rtU zG-_d$j1apOiFQ;oY%#)8C9NL(8&M!AvX7Q*5BbUU3N4Sp<3W_xw$!&u<-W|)m?=E` zqHURP=fHM>d(B;S$Qn{j<(skv(s$7{pA=_H% z$sSYjWOaSrcdKu#_^j-A#g~>nQ8-j^W9FBcKbPEDx^2mb;x|%%h+i42j~{QI5nCCX z5kIzIM#%$ZOGduazpm@9%-B#>sKkGqZJKakr`Q3O!prFqkprb9Gu7+_j-qa&(omJ7 z65qB(4)n@sW|v4zK35^~lIc+MfmO(__@=@J!kEF66J1S_3g$_6cd$J$EqI*7`nyvz zl5dtyE$mMoVO|>blsqi`QF={Db46|Ksde|)JXpJ;wxfEV5pOmAx+y*Knz}ia z?^UlYS(%xYxIM8p5y`j;zh7`#`jkXf{PoBY=I_nZq9>UTMNcc7Tz*<{OVxwD7makhVPDewBeVzb&bsqi*Eb@Cc(l zg`!0&_Bp8v?r2ERWn2zc0R3@_@`I1w+y6!{gIwsv+J9F z+Io7|tsNs;_aAwE^US9CjYqZSdb>LgkOAW>i&mvqr5{fgN1LN-6BW^`A{R&Ok;UP$ z5ob6OnH~AuoE2Xb^QTTpZ=HI%q^$hzg15te43_zivY##ZYm;^p2g!KxQS7amI=vzC zHfl7CyfWTO#AY0Ze(_g1&@HUcBzC9Hp`)0@6gZUpipWAQ3rsNf-XZe0NG@@Jaj$Wk zG|Zo4o&>QTZlcZfhqOP86}4(kKaHw2^9`6+ zHSud6;1*0U6N8aybftZJ&M%d#X|v-f5TPry2(uuNZeZuJyj@n-@AL+G+MC zrgD$S_VJ@zM{n0Vx^Mfj z%bNBZ(OdCYi7!zcUlTtrwch+~xHj~?;O@ba;EYgL_#pH9(QD)9CC(S)ewxU{o=f_o zOM?M_vFB6UbuyMRRwQW=>528^XxcNSUQBNdM9@D5y?8SCC9|uM^S(SvXqWS9#QPc1 zghLAD9N0wbtz1K~z&+qZM((^Nz;HE4NP{ z7n`0qI#Fb%%$eaggLedW2&@d96q#qf7(P2Wrs(ye?sPcuK=eR!L-=Qb)xM>!HBuSg zUVLz(;I>NaMqfy4VOs?jPo=W9<2P3qOq3G$Oiw~Fla66P3d zjMt3=?U%X7`&I`piyWD{JUu3LZ{n)tv8k<-55?D~t}N+q|MAqH3`Zw@*uPSydlrv7 zrT@dxW5%u-Gppz0o~Op%Gwy>4m-e3D>S6_!1m}g6cC>gyra%J?8$SdK; zA`>FJCT}VFu;e$H{^Y5d^0+9b>>#lMprE@|t&XY!%j-Z!ap{NBCWk6YKfVZzB>clHhSZs<9( zr(@La-Ttn($6eF@QPaWI_Tuu)Yl)}h3!;_D4e_gEN5n5QuZxwMDZYf2FOK}Y!>-DH+g_t zn7mWufS}_q9N6xF+^-d}S(A z_D=a>$;!lb(O)G`s+}_7g2Aa%iu&K{UEDir+*PCA9W$;w+5MBA-tL#iojU%IiKE88 z-`UgpLEZA|Ckie}3`QT8QKAnro@8VE2U7QFj6W7%7rQ!sacVzN5PKu;Py9OJNxo9BTjAA-Ini4suAC5=7;w9umhs}#WM2Jv z@&0CMf3w)XTG|TNQ=2F6$@_p-ZOH?Wo_LNYcYHA_;FV0SLH3|Gm%EJ-2H0B0<&HFNFj{RrjypXY1D*ac!S96Yllv4cDQPH}7#)gS6#qlj-F=5l z+Izy#KzQ`Vjvq80-F{y4`j*#wF6sKyxZTE<^nN`0{?4K1Cz@KC`?9Mu@5dLJ-%CtO zoRiFm!LChRoS2vjr9O$5rxz68TDo1~_oMfPt_hqI_69u8^K5S$CrRyLKrG2zl97T< z>ONG07y%;UAwS417J0xk>pG6CbB4xPJz=|Ou0`acS5G||`N{s7(-W7T1fxE1KfT{l z(eVh8zehASAklx7ak-4=UuPfZSrquA{|Wy-!TU^a>XpQ}Vv(${3X=?e>9FIZMKx*(j`EwpXugYf>o3mm)H9ybmV|DP(@Z;`)x`J_^T zzcM`)}Qyfm;GY-ctfsg}jlr$dAoOlfLx9>1&I|H@)0AJnH<;^3LJ* zQyNB$d?>fPYs1*0zM=`o_Z-!;YNB2Aa&+@gD;_S~nAoA9KJ|9`i1gfKSHV!`^~B+Y zZx>aTIEv0n1QH*lE-zdfUl{2M)ta|?Kes1s*USBPlsaguw21!5NQdt^_kd9tyldEXK5H-}p;X?dpgxTYt% z26~%D|GITl=e%*h?^@qAR5!8cutY<;SNclNW~x(9r~Z)aNI26I%08_eSA9afE7aky zj;>GLk+><=XVyh-_YB%!m%7V*nMpG!a)8JNk%hhq7SwSdM#fYVniYe6Fo0)(?k4dY z`hkpd(&wk5gZ3EDqqa*eMXO%)8+Aq_BOeB=go9dbZ%G6=+IOe_X#efr zL%kb4*L(Kxz7ae*IXkRawP)HTC3%KeIW zW1uPdhl;j3XIWpFSz1-;tv<7Em)g3KpH;bY=Z<;5clD@Qy}R|=J7$*eUG!|?rR2u= zxv3Wliwo9g!l@?{Gtz^FzU0f1Il&p;KYRA{Z11}{xG{cUa%{5Ooap+AVzCi%G!~cnR%7R+;Kv(b| z+zM8a7!t*Epy5!O6TT>54);agIoh{ryEcyR5VIpSTGajKc&*=SQ zdo+NrYusm!N=(K;Ll!C+8DySNyYzw@#ha;m(et6!1!G`!>ZZ)u)?O3Z(We#~<*b}U zfC0&x_7wa7$~e*1;5gZ{zh||7Y;c9A&V7%w#3b(Q+iXw#Fn)0St@O-- zjzU-I?j^U?P41dJp}zh0mO#VDrB@|F<_Po0k!-Xt-YC_cq4+7na;N!r@$BmHdDggh zb5HW@=w9mCC9rEEn^-1w<*>8ec8>VoHd22ZD?ZG;NwQyhr&yW=`C&cQus8cmk)GK? zQIQg~mx>iTB!Vz9hWAh|MGw-CHN_|wYw(N?^hs$0s zT%G!PeEZ0Aq3uGy2^}1II(%H{fzUyrdwku#KF@DmW8I&)|KNGl{e=$XF}mz_VnOl4q=#kx7M%5gDy|{hn*J z>jG!mwZR>6ALm}_`JLx3e@kR}cv7^$yf?N(d|av~^;zb%WFY!dBp%);ba(K(0gr!b z;Qhez&?^6_-a${Ndn@;IuFKqo?l;_@xvD)+dP2UT$ZfIHV|ynb_8(|}Se_kSA^tZ} zTHmv&|C^GQ68|@IAMFS8if7~p0nDHyw(Bz{qr{#(b;wvL{D=pTD{1BzlkF1Wmi!D~ zY6m64f1@o17%e@(#m2G5oyNts64x2t8UD+I#o=Fgo^##e9OeA8<1*Ko?u*B)m3uoY@{88=e+j8ZHdI8hkGBdhnINMt`aA7~h$`XMD>%_q$(l-R?Tt zb+XG49sI^M+VgAg-BMpEGOJ=A#iEJJJs;c7ll$%__^02(IDNIWnz2~58LZ8`IJG&R zk5_~(shBTC3$0LD>?gv>t2>ow~skaIYLBdM4mKl&-R^fW^JrdhN$UKnTx!Qll) zpY0~czW!_c*N5sOYXTEJ=ey=P=QuBL9_2dLwb)hRy2MrM`?L2ze|g~3(D?8Y84-Ob z*b~~?Kj`lXGz16y>%G&2<4*Lv=-%Gl>^{i#lIvR6v#wiRz3!|h>^;Xf#~h50FdNNB z;vXjWa@E<6mKn5rNDk5~zL=9XRY==lZ_RSRFZ1G(mJX1Ch=?DkH^2?VKxPIolOQL5 z%Za`n5LT^pTex!!hO>^#&}=&ARf?Z3-^ZeZKsO~J?gH~HR_2T3{u8+@hSOWaFc z>s)tuCVGD2p6fo-RqBemrn;_kz3&6tqYqQv|%-Tc#2UCKCsO2kUP1qkcOpB(8 zG(3^V^Q+XJ=1UCPPkJI3+Xg*T{e!`?HCpy*#DmI8PAoTDc(mtY47%)jOR}GBd!w9Plf50xqjqY;d;jPjQcG2Q(k-E zhHzi}&e*8frJ)nU$HYD^==9xaJ5inj-CnTYCwAcZLVfZA?t{CD-=<}Me3&I+ZIKHw zE|Q-?%jnPu(LlLinHlOt38H>T&L#qI6>>n$e#ji-f(xEj0yhm}f1X&LC9@?K%dF*R zjjJ3N1P=FCMQ6uX#Lo@y7dkSybLd6?a_@BaO4p^%CfBa6J6&hE>OE(BCwo`9ACu^K zk^5-(p6+AZOWbF9ZgU;uI@kHC^H0u{`(D=t?sGkzzJXw+jQ2lh{yh4mdA)gZe0}=v zOsVS+!hO5ReHs1ZiD7*jh?yTmJhC0EkMGicouR7V5s?l4(^*3Be4|L$AUfm^o0BaB zEaF)#eS!dYn*Lb$^zZm*`d|vE@_^#2zBh{h9 zg6;lA-d){Ch#ws0%7~;R+&8)h+~1e=tKCny4{^Wis&u>Dm7dY=d9F3iGo4qt#tQ?y zEVh5t`&{7K&~>4{$eD?&Q`e_=O8ur_=Rl|ZB+>T_!Ct4>4*99c5dYw8MQ_luH=|%W zS2*wayorFhvgF2i2~~hr@f)5^tr6Mq9p2FZcW{*QCYc}A0QS%arU%IQFZ0^voi~z0 z4@xGyuko32opX+FNnkK?OZ42>ow3hD3qzxW7lsxDC-`Q&$GXmP);SMxu5^7YGrpg3 zUg(Ou(yqy_8KRA&-SHVb7u|2U>pgFJ7X^Ak8FPB9HZ>)6dg`F$Z{t5o z)VO+;V?FjqJvH9t53KOkFVK0h@L>e}QA zihtN5Bv;cINRNP?aKz#bdeV3cbKYQqHnGHLi39WH$?s=vDbKsU^CHJajyF4_>p~9( zM)-CThWk}$fB&Ukk9)D}HP`hr`~6bq_nZ$nXF0RZ@y@x3Nnc+QDHr&3@r;@>AS~!foFuL zMV@w8?K#tPygT4}!O`qE)bYIIR>uz=pF0*g_i~->`h~mS>-2d7vjW%4eAm6A{&;Eh zLGuZ7P2855Tl`tUX_7x6{T{(R&luA$p-Mw7i+(MZ_DMAZ8H3VxB;{QyK}#ng zIR?K69~{eA9?xfCU!EKyL&o-s64jH>x=KLKgj>+4A_x?qE$v4WcMAmxInlv+#^ZL6 z{{!>7=qb@9k*xzy_*QvubN(&2hU-_Zi0fTpK)3S`_Ur5) z*vlLr+jD{emve>lIj7J46N!RO-?)GoN}6Wmjc`2NYaX6#O~i^0DSNnd(9>X>E0))% z;jjn!9sbH6=nRPMvA^G1upJuFMUjgPNTWW$h**t`05}CrWpXVthp2TfTGGWY$NH?} z@gla+t!4;d1U#Sx`W93PYlI1&FdlJy7CNxt)8wtm^CNc$Ui3fZz0du7Vf!PTWzH)d zqa8;&W;-&D4u{>*e$sW#_@=hT!W6ujwZ+Pj))`cnD5x%alPYl=Ps^uT&vtKc@Fh?gIAmHB{Rhb z6xU>@))p7s?DpD53F?VK+5*KlEunqd0=Ff-OFprb`U3K^jm_|0bf#9rdy53G$WI+u zD_#7GM4X4dxH4DclSL7x8dbhQ=l(CWuB?-h+CaU{?;x107q z+1l*|_C|ZZy~ZB5FSF0JKWP7%eZ76H{Tchu?Vs3Bb-e1>&pFL?m*`mHv2tlxD@5rAfBF_J6pRd%#SKc`9}sMD%{Gipwc zSR*Ks>3f?L?|BWQ74Cvw@*IGsc?X3@+C|II2O3XHj&iwCZ9BvEk0v3E|Xtwks9hNwjbFJwH;<#Vq0umYkSPL(RQybZJRBq z;=0($Aq)PBrO^eoTh_4vEz|q6Mif9R$Pb3GA6~DX1Agh}m&&$HmbiE>xgO&@iWAKm zusE97ynrTjiw4!3RDRu$uF(S8K;K#Eq3kDb?Rj3_@s+ckEl)juDC5QNF=j5a!w{e?f(g#VOVzjizl*j@b|HsOviA==?6)i<)EcdVd3L5^7= zS^8MX*7r0{kSf6gBKiHskECXPjEtOrPb%0ai>!yrDB3YHk7}*F3+;5N==VuZS#5Dq zP_Cqw&r6T&$jCkT1zT`O+Q%NJ)dCQzxd6Xne_9t13nLd?K(>Ru9oB4cd9SNP0AdO# z(7aFiezW(h&5@in{D|wo2v7GM+fe%IkRE8zjND(dOOFurG2ymJ7X#RLpS)a zW^lBfT!2~ZdHLIf3o;_P)(y!e^Qb{aje^Lnm_U9a1row6+()AWpPa!qF_A2zNUYf+ zc%CGg>m2F3>@KrLR*1w$i|hx;)*Q(k2Sq>B@#xFZ*U)QVStQQmo^L!r{a?|B_OUTC zD)!m0cF`6iJ4`^2MzdP-eACKTRDQd(v0n5+?^iPlcu-k`=nBr&Z@8{91XtpUge>Kz<`eXtHzqxxAZdd>fH zNh|0JlGT&#s{bMfTHri%kY8X=&BLfTp-tq6@3ewM6$0t$A87rY3QLDn%-{jug2xlZ zV@2*!vhe#p z`gRR_UVOoUDQ%$sja*n4%o8uQ&+ujW={r&@!AHo!sT0vZ1Qq1M^oNvRnJ>VzXUw?d z-4Dn;K_q7MpjqT@leJdiN1mqONd}#1i}krS?N_|1+!}%KbG5fhtvSB371l*&u&obNF=ZfnE(5ggrrl`mQ1Zsl1k@*-J~oJ6x;T zjb=Td9;sD&Bv*U#4aYMBrf?JY=XKx_R-(?U90{xO$92^PKG{}G`eZM%Yb_mbMH?W3 z1x-*NWqghCD5?~UnNnfo9WC9K?Q^ot99*8~CO+^h-cJRd`U2J0{2NYGvONDHGg$}U zv`#Uv=%a-i>lE?I3gm)ne`YU=cCd1D6keCDC) z=)3lG)fe$`dT-hmWgwU~U*m=0hz{D~*d|W_vFi6)&tvSjME2P7rr-4KmXj$6d*8)dE5(!xktgC!V^ zq9UnJ*626}?agx#XoI=c=15GP4hwN-w1VxG?^RlSRec{R@DV&eDY8?;-pu`ZH82mN zUfO`y=?H-KhSdAfx%w2J8V&T>b8w(@YsjBL1Ka?YQ&rWc38<0jn;m)UBeJ6x{DK*k zI`*V{$iuiIaZ~&D>g8$;^+DQ)Ca@1WqBXQq^CgW6AXWKF*@5g2&tg_@g&=WDZx{AT zyLi$Gor5^lK5}b30sFA8Mpw;nh?qLticg(&j`rX(Jew-HK0VKU>qRHj(y5&`OGe0> z6<|w7))-sU+1JD&9gP6}*bQWpcVI`g4*8L08SKe>eLg3kokTlq1y7(MMt)#t?!D#r z!pQ%VAZ;iSEum-dt!xO#!iO4J$vn^mZNjr?Asnc2k=%()fH`J(Hy+KbVQQ6lLbx29FVIc!L7AC(7$v zQF*%~HPa^Xy0O9yytfHm>AM~^3q)?%6ohGwPg{dWAUo)XlQbhxY?2ib5!FjU4e|%1 z9Xbnw`Mb%#;=Viwcmx6XBYG#2p?hUO&AhlOi~5#w0!Y&sMJ}jgDAZ+%fQ+#c0~s-9 zj&-->Ka8C-Yk@bqju81rNwr9xqLX!U1>S?kcnm&3FOa$%$W^9e4e4nWQn97d(?0D1 zVHtFyt;1`u4%gyJBShPO`^{K(X}7*(1?ja1!#x#YYI)Yt0h$Goticb=FTheDfmzge zHCo`gl6J9mo5;wUtvf{v?BT7)yaie{z-X4f0S=8ZH;4HK;0J_jBm$NA8hoG(4E8lI zR=aE76R`Gy0(^${6O(9HvB)3$o7M*fZfTXi-9dSfY+3IIzVZyfwUHVQQcpk|pq|zd zkI)2jEcK~l{F^+Or^cAE)h>wW5I^jep6_JA12Qv`l#})`y2ywFBW=v(;vQTtpBJJ5 zyi={AZK8jqZPO^FJt0^F9tS1hk{J&pwh;O9=+|$Lw1u%#t*$H6Y>xhLKMaV}v_SK0 z-6BKMYBV#)^xXu+0iL-7-TE$P=1%gSH=agjCe5H&p0_OU)GbHwEDxLk@{v<}lFaLa z36u-DtKtyG)A|S+QCn!cV5K~V!F=@EvU2p_`$s)o->adqoH&S9H3P@XlmqijsPPdm z)LJ8)!812_Fn$0JGPjsFk>C}`JR}-`@t8}@XT4ybSzP3R$VuGO+5*uFEGe((KD9Jb zYA+bq4sUp8-W~6}g$bC6Q7y+ZS6TZ}L>u*W&HV6vY^u_$oT_z2 zp<0GdWqsO#C&HH+d;eD4|GNA(IcM{TC|-o5u!(v-@*}D0oV$ZOjlHbl1NlfD6MHg$ zj@}?oBWsn1+3LLMos5__Ad?R=noDnj_=&8WJrEy64(`Xj(Z1@NijcNNIUh`7Em}$& zi2C4%o(Or?<{tmoW&Y~6Lyl!GCG3m*8vhjq+5^{Kh_a0$pK7fxs+&A>z&-c^xjmdl zj7MI5t0fTTM6fB-_yZ#^WJcgz?F>rM zv&I>u2D_T;fFl;}trcEyh7YI)K&4Nv%ROi(IYB-)a#hXw$;7vu^ZvEu`8`exi^>7Y z0D66pj+E-1ntgFc?d-m~;vuE%{0OCscc?N%nuaU#<+JUaPqcN2^A`Jx8O1JPUC=IN_e$nRD<{WgfgntB>fH3S{Ho zjrw1eUAJ7qN%@|L=9_#n;;Q_EWV)Vbp*%uW<}d%MaRF;7E>sVBjjB!aF&#vM~NfCIS-i4;_U^Bibj{Svx!dPsaa`Vn449m-qnB0uzU5J8eMQ`F>E|3-i@j z&5abJ_$PWnQnZ9uD8ln7rR7M0ty%IJCTPO0Se3K*4Xvs4s(U0?{eulS7W*qtz$)~{ z88N3v_dk^$EjUC2WMWj~xIWsa)kwnqRRc(;Tgrd5i8aN6?n5Rtfdy5T{5r>S1(iwV z;wY}7a_gDgO_#jno7)4^auoe>&6jxUxm5Cse}wh(cK`CXQ`kdwKuo4ps%NZ$kE;e0 zv&xNmpU?Av%9S6z!AAU|=d-5Xtvb_~#$EFI)IGYzofS*?gEA)Ar$@l`h&Wmsqkcl9 z{rmaumu21Zx=VO4|1_a8A;?sW(jv8(+B%PVWoo2U>GR__n;Bf?1p|tRy#4hG_zveV z_J!s+8dm39{RplDNy>hTEacbNk`~z;|JSxxeNY$T*-FO9(KX%(6KIRU9IaAG*_W3< z@w!eTXm76^oe^$?=O}eFsMN4^P=n-Glj>@)KGx-?$1cv_2oaDdK+l7j?X9x^pZAZ^Io5C zEAa`5l*d$NMSq?*^0>y%`U?{38JvlgH+z@zzQ#K$G+>`zUdg}A_IW+Igj@6pIWV9Z zA?Txh$dAQAfc8}tr~IllTYf=e#k%J6DkB!emWp){uDDhta9zDNd$BcESO25u%v@gH zYxB>D_jyVG);F_osOo5CR*|2#4XsoL!ymC5t;T!F8WXavC{Q0(ZScGH@>F8=6n^8{ zx~L~`t+4o@);IRQ_GYn4UYs8&OA zl|()E%YKYD6eApqjkOo6KCjG%}&CyMc5naM&o{S5jnamiO0oS7uPu>$)-n(rZl&*|9j)V0<6Ws}UcbNU<{vm zg;BBmf5$)Gq7suDBhO+ndZy#1TG7-xs76J#q}o*(5*A~mF)t--m)8vbt+gyN4n{?& zqU*e>fZXvvhx#pP-6kz^OKwmjK8Zh&Bf$n5r$H|IP}vj_%n_$Ap;bG@1oCSYOT8RV zr+&?B0!F5Z@~&@P$KO&r|F!!Z(z=w4>S&hCcqlm%nTpOOgdORlpbMne${K!xrnIg^ zPlgD`n5TLcV;42j3n$9`Cz$>p(-}yxi#$A0L8V{oN4!N0PQbcIrwqY15uDKg#fxUt zco2C7bsV0yjf>>Y|1!jXvsP@P1BXb*yM>t1L^Tff(i!$D9~P!YPd15vgLcNg$#U|e zM*Q!d|82hh&60olSDUonE(_TV&yMRDANFQmAny|8{UTKB$=-RlCVSiE=#YgX`~NAM ke_8UsUg!B8#e`q%OSMX$F4K7fAR=hl+HPeu|1Ng_fB7X>AOHXW literal 0 HcmV?d00001 diff --git a/server/tests/dicom/pt-breast-qin-01-instance.xml b/server/tests/dicom/pt-breast-qin-01-instance.xml new file mode 100644 index 0000000000..3272ec9351 --- /dev/null +++ b/server/tests/dicom/pt-breast-qin-01-instance.xml @@ -0,0 +1,169 @@ + + + 198 + 00\01 + 1.2.840.10008.5.1.4.1.1.128 + 1.3.6.1.4.1.14519.5.2.1.8162.7003.246092060369879550027417906384 + 1.2.840.10008.1.2.1 + 1.2.40.0.13.1.1.1 + dcm4che-1.4.31 + ISO_IR 100 + ORIGINAL\PRIMARY + 19930102 + 190248 + 1.3.6.1.4.1.14519.5.2.1.8162.7003.335605164322770524664245774978 + 1.2.840.10008.5.1.4.1.1.128 + 1.3.6.1.4.1.14519.5.2.1.8162.7003.246092060369879550027417906384 + 19930102 + 19930102 + 19930102 + 19930102 + 185346.00 + 185833.00 + 185833.00 + 190248 + 3195263453823563 + PT + GE MEDICAL SYSTEMS + + vumcct + BREAST PRONE + PET AC 3DWB + Discovery STE + QIN-BREAST-01-0020 + QIN-BREAST-01-0020 + + F + 045Y + 1.6 + 65 + + + YES + DCM:113100/113105/113107/113108/113109/113111 + CTP + QIN-BREAST + 81627003 + BREAST + 3.27 + TIME + MANU + 0 + 0 + 41.04 + PRONE BREAST + 0 + 0 + 0 + 0 + 700 + 0 + CYLINDRICAL RING + 700\153 + NONE + 120000 + HFP + 1.3.6.1.4.1.14519.5.2.1.8162.7003.301759690586071225280046587327 + 1.3.6.1.4.1.14519.5.2.1.8162.7003.222925049784905277500431157002 + + 3 + 56 + 347.265625\347.265625\-263.80999755859 + -1\0\0\0\-1\0 + 1.3.6.1.4.1.14519.5.2.1.8162.7003.146772878946225576316847306304 + V + -263.81 + 1 + MONOCHROME2 + 128 + 128 + 5.46875\5.46875 + DECY\ATTN\SCAT\DTIM\RAN\DCAL\SLSENS\NORM + 16 + 16 + 15 + 1 + 0 + 32767 + MODIFIED + 0 + 0.413549 + 00 + + + 425 + 650 + + + + + FDG -- fluorodeoxyglucose + 0 + 175700.00 + 175800.00 + 429823712 + 6588 + 0.97000002861023 + 19930102175700.00 + 19930102175800.00 + + + C-111A1 + SNM3 + 18F + + + + + C-B1031 + SNM3 + FDG -- fluorodeoxyglucose + + + + + 83 + NONE + + + F-10450 + SNM3 + recumbent + + + + + F-10310 + SNM3 + prone + + + + + F-10470 + SNM3 + headfirst + + + STATIC\IMAGE + BQML + EMISSION + SING + measured,, 0.096000 cm-1, + START + 3D IR + 0 + Model Based + 1\2 + 2 + 0 + 0 + 0 + 0 + 1 + 1.00633 + 1523 + 0.366749 + 1.30417 + 28 + diff --git a/server/tests/dicom/us-lymph-node-cmb-lca-instance.dcm b/server/tests/dicom/us-lymph-node-cmb-lca-instance.dcm new file mode 100644 index 0000000000000000000000000000000000000000..f155d502394fdfadc81593ed5be5743c96851b47 GIT binary patch literal 789196 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

      fLU45K6gRPeGy3km?~M(wkC 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 + + 208 + 00\01 + 1.2.840.10008.5.1.4.1.1.6.1 + 1.3.6.1.4.1.14519.5.2.1.185577958846157191089023023733319573972 + 1.2.840.10008.1.2.1 + 1.3.6.1.4.1.22213.1.143 + 0.5 + POSDA + ISO_IR 192 + DERIVED\PRIMARY\SMALL PARTS + 19591020 + 113433 + 1.2.840.10008.5.1.4.1.1.6.1 + 1.3.6.1.4.1.14519.5.2.1.185577958846157191089023023733319573972 + 19591020 + 19591020 + 19591020 + 19591020113433 + 100000 + 110358 + 113433 + + US + FOR PRESENTATION + Philips Medical Systems + + US_Biopsy_RCervicalNode + + + IMG1101 + GEIIS + 0 + US GUIDED THYROID FNA + + + US GUIDED LYMPH NODE SUPERFICIAL BIOPSY + EPIQ 5G + + + 1.2.840.100008.3.1.2.3.1 + 1.3.6.1.4.1.14519.5.2.1.207522269430030124341950649812029134159 + + + + + 1.2.840.10008.3.1.2.3.3 + 1.3.6.1.4.1.14519.5.2.1.241721883221006165848038945169821191225 + + + + MSB-02120 + MSB-02120 + + O + + 4 + -72.0 + REGISTRATION + YES + Per DICOM PS 3.15 AnnexE. Details in 0012,0064 + + + 113100 + DCM + Basic Application Confidentiality Profile + + + 113101 + DCM + Clean Pixel Data Option + + + 113104 + DCM + Clean Structured Content Option + + + 113105 + DCM + Clean Descriptors Option + + + 113107 + DCM + Retain Longitudinal Temporal Information Modified Dates Option + + + 113108 + DCM + Retain Patient Characteristics Option + + + 113109 + DCM + Retain Device Identity Option + + + 113111 + DCM + Retain Safe Private Option + + + CTP + CMB-LCA + 16001202 + EPIQ 5G_7.0.5.962 + 0 + L15_7io\54108 + SM_PRTS_SUPERFICIAL + + + 1 + 1 + 2 + 14 + 38 + 1010 + 758 + 3 + 3 + 0.003708797278190173 + 0.003708797278190173 + + + 1.3.6.1.4.1.14519.5.2.1.207522269430030124341950649812029134159 + 1.3.6.1.4.1.14519.5.2.1.58866608043609699358076981026977397142 + + 1 + 10 + 1 + MONOCHROME2 + 768 + 1024 + 0 + 8 + 8 + 7 + 0 + NO + MODIFIED + 127 + 254 + 00 + + IDENTITY + From af980d5f618e3ceb51a50aef49a8750cdd66cd53 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 18:13:22 -0500 Subject: [PATCH 06/28] Drop dead test entrypoints (junit reigns) Signed-off-by: Mitch Gaffigan --- .../plugins/datatypes/dicom/DICOMTests.java | 199 ------------------ .../plugins/datatypes/edi/X12Tests.java | 124 ----------- .../plugins/datatypes/edi/X12Tests2.java | 102 --------- .../plugins/datatypes/hl7v2/HL7Tests.java | 144 ------------- .../plugins/datatypes/ncpdp/NCPDPTests.java | 163 -------------- 5 files changed, 732 deletions(-) delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMTests.java delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests.java delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests2.java delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7Tests.java delete mode 100644 server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPTests.java diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMTests.java deleted file mode 100644 index c921f3b496..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/dicom/DICOMTests.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * 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.plugins.datatypes.dicom; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; - -import org.xml.sax.SAXException; - -import com.mirth.connect.donkey.model.message.MessageSerializerException; -import com.mirth.connect.model.converters.Stopwatch; - -/** - * Created by IntelliJ IDEA. User: dans Date: Aug 6, 2007 Time: 2:00:06 PM To change this template - * use File | Settings | File Templates. - */ -public class DICOMTests { - public static void main(String[] args) { - String testMessage = ""; - ArrayList testFiles = new ArrayList(); - testFiles.add("C:\\abdominal.dcm"); - //testFiles.add("C:\\abdominal.dcm"); - //testFiles.add("C:\\brain.dcm"); - //String[] a = new String[1]; - //a[0] = "c:\\ankle.dcm"; - - //ImageJ ij = new ImageJ(null,ImageJ.EMBEDDED); - //ImageJ.main(a); - -// Client client = new Client("https://localhost:8443"); -// Attachment a = new Attachment(); -// a.setAttachmentId("TEST1"); -// a.setMessageId("TEST2"); -// a.setSize(100); -// a.setType("TESTING"); -// try { -// client.login("admin", "admin", "1.5.0"); -// a.setData(getBytesFromFile(new File("C:\\abdominal.dcm"))); -//// client.insertAttachment(a); -// -// Attachment a1 = client.getAttachment("TEST1"); -// List a3 = client.getAttachmentsByMessageId("TEST2"); -// Attachment a2 = a3.get(0); -// if(a1.equals(a2)){ -// System.out.println("They are the same"); -// } -// System.out.println("First:" + a1.toString()); -// -// System.out.println("Second:" + a2.toString()); -// -// -// } -// catch(Exception e) { -// e.printStackTrace(); -// } - -// Iterator iterator = testFiles.iterator(); -// while(iterator.hasNext()){ -// String fileName = (String) iterator.next(); -// try { -// testMessage = new String(getBytesFromFile(new File(fileName))); -// System.out.println("Processing test file:" + fileName); -// //System.out.println(testMessage); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// try { -// -// long totalExecutionTime = 0; -// int iterations = 1; -// for (int i = 0; i < iterations; i++) { -// totalExecutionTime+=runTest(testMessage); -// } -// -// //System.out.println("Execution time average: " + totalExecutionTime/iterations + " ms"); -// } -// // System.out.println(new X12Serializer().toXML("SEG*1*2**4*5")); -// catch (SAXException e) { -// e.printStackTrace(); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - } - - private static long runTest(String testMessage) throws MessageSerializerException, SAXException, IOException { - Stopwatch stopwatch = new Stopwatch(); -// Properties properties = new Properties(); -// properties.put("includePixelData","no"); -// properties.put("isEncoded","no"); - stopwatch.start(); - DICOMSerializer serializer = new DICOMSerializer(null); -// String xmloutput = serializer.toXML(testMessage); - //Dcm2Xml dcm2xml = new Dcm2Xml(); - File xmlOut = File.createTempFile("test", "xml"); - File dcmInput = new File("c:\\US-PAL-8-10x-echo.dcm"); - try { - // dcm2xml.convert(dcmInput,xmlOut); - } catch (Exception e) { - e.printStackTrace(); - } - File dcmOutput = File.createTempFile("test", "dcm"); - String[] args = new String[4]; - args[0] = "-x"; - args[1] = xmlOut.getAbsolutePath(); - args[2] = "-o"; - args[3] = "c:\\dcmOutput.dcm"; - //Xml2Dcm.main(args); - // TO XML again - File input2 = new File("c:\\dcmOutput.dcm"); - try { - /// dcm2xml.convert(input2,xmlOut); - } catch (Exception e) { - e.printStackTrace(); - } - dcmOutput = File.createTempFile("test", "dcm"); - args = new String[4]; - args[0] = "-x"; - args[1] = xmlOut.getAbsolutePath(); - args[2] = "-o"; - args[3] = "c:\\dcmOutput2.dcm"; - // Xml2Dcm.main(args); - //System.out.println(xmloutput); -// DocumentSerializer docser = new DocumentSerializer(); -// docser.setPreserveSpace(true); -// -// Document doc = docser.fromXML(xmloutput); -// XMLReader xr = XMLReaderFactory.createXMLReader(); - String results = ""; //= serializer.fromXML(xmloutput); -// String xmloutput2 = serializer.toXML(results); -// String results2 = serializer.fromXML(xmloutput2); - System.out.println("testing..."); - if (results.replace('\n', '\r').trim().equals(testMessage.replaceAll("\\r\\n", "\r").trim())) { - System.out.println("Test Successful!"); - } else { - String original = testMessage.replaceAll("\\r\\n", "\r").trim(); - String newm = results.replace('\n', '\r').trim(); - for (int i = 0; i < original.length(); i++) { - if (original.charAt(i) == newm.charAt(i)) { - System.out.print(newm.charAt(i)); - } else { - System.out.println(""); - System.out.print("Saw: "); - System.out.println(newm.charAt(i)); - System.out.print("Expected: "); - System.out.print(original.charAt(i)); - break; - } - } - System.out.println("Test Failed!"); - } - return stopwatch.toValue(); - } - - // Returns the contents of the file in a byte array. - private static byte[] getBytesFromFile(File file) throws IOException { - InputStream is = new FileInputStream(file); - - // Get the size of the file - long length = file.length(); - - // You cannot create an array using a long type. - // It needs to be an int type. - // Before converting to an int type, check - // to ensure that file is not larger than Integer.MAX_VALUE. - if (length > Integer.MAX_VALUE) { - // File is too large - } - - // Create the byte array to hold the data - byte[] bytes = new byte[(int) length]; - - // Read in the bytes - int offset = 0; - int numRead = 0; - while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { - offset += numRead; - } - - // Ensure all the bytes have been read in - if (offset < bytes.length) { - throw new IOException("Could not completely read file " + file.getName()); - } - - // Close the input stream and return bytes - is.close(); - return bytes; - } -} diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests.java deleted file mode 100644 index 592b80bcdd..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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.plugins.datatypes.edi; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import junit.framework.Assert; - -import org.xml.sax.SAXException; - -import com.mirth.connect.donkey.model.message.MessageSerializerException; -import com.mirth.connect.model.converters.DocumentSerializer; -import com.mirth.connect.model.converters.Stopwatch; - -public class X12Tests { - public static void main(String[] args) { - String testMessage = ""; - try { - testMessage = new String(getBytesFromFile(new File(args[0]))); - System.out.println(testMessage); - } catch (IOException e) { - e.printStackTrace(); - } - try { - - long totalExecutionTime = 0; - int iterations = 100; - for (int i = 0; i < iterations; i++) { - totalExecutionTime += runTest(testMessage); - } - - System.out.println("Execution time average: " + totalExecutionTime / iterations + " ms"); - } - // System.out.println(new X12Serializer().serialize("SEG*1*2**4*5")); - catch (SAXException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - private static long runTest(String testMessage) throws MessageSerializerException, SAXException, IOException { - Stopwatch stopwatch = new Stopwatch(); - stopwatch.start(); - EDISerializer serializer = new EDISerializer((new EDIDataTypeProperties()).getSerializerProperties()); - String xmloutput = serializer.toXML(testMessage); - DocumentSerializer docser = new DocumentSerializer(); - String x12 = serializer.fromXML(xmloutput); - stopwatch.stop(); - - // System.out.println(docser.serialize(doc)); // handler.getOutput()); - // System.out.println(x12); - Assert.assertTrue(x12.replace('\n', '\r').trim().equals(testMessage.replaceAll("\\r\\n", "\r").trim())); - - if (x12.replace('\n', '\r').trim().equals(testMessage.replaceAll("\\r\\n", "\r").trim())) { - System.out.println("Test Successful!"); - } else { - String original = testMessage.replaceAll("\\r\\n", "\r").trim(); - String newm = x12.replace('\n', '\r').trim(); - for (int i = 0; i < original.length(); i++) { - if (original.charAt(i) == newm.charAt(i)) { - System.out.print(newm.charAt(i)); - } else { - System.out.println(""); - System.out.print("Saw: "); - System.out.println(newm.charAt(i)); - System.out.print("Expected: "); - System.out.print(original.charAt(i)); - break; - } - } - System.out.println("Test Failed!"); - } - return stopwatch.toValue(); - } - - // Returns the contents of the file in a byte array. - private static byte[] getBytesFromFile(File file) throws IOException { - InputStream is = new FileInputStream(file); - try { - // Get the size of the file - long length = file.length(); - - // You cannot create an array using a long type. - // It needs to be an int type. - // Before converting to an int type, check - // to ensure that file is not larger than Integer.MAX_VALUE. - if (length > Integer.MAX_VALUE) { - // File is too large - } - - // Create the byte array to hold the data - byte[] bytes = new byte[(int) length]; - - // Read in the bytes - int offset = 0; - int numRead = 0; - while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { - offset += numRead; - } - - // Ensure all the bytes have been read in - if (offset < bytes.length) { - throw new IOException("Could not completely read file " + file.getName()); - } - return bytes; - } finally { - // Close the input stream and return bytes - is.close(); - - } - } -} diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests2.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests2.java deleted file mode 100644 index 07a5dc0ec8..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/edi/X12Tests2.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.plugins.datatypes.edi; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Map.Entry; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Unmarshaller; - -public class X12Tests2 { - - /** - * @param args - */ - public static void main(String[] args) { - try { - JAXBContext jc = JAXBContext.newInstance("com.mirth.connect.model.edi"); - Unmarshaller unmarshaller = jc.createUnmarshaller(); - // TransactionType collection= - // (TransactionType)((JAXBElement)unmarshaller.unmarshal(X12Test.class.getResourceAsStream("xml/837.4010.X097.xml"))).getValue(); - TransactionType collection = (TransactionType) ((JAXBElement) unmarshaller.unmarshal(X12Tests2.class.getResourceAsStream("xml/997.4010.xml"))).getValue(); - System.out.println(collection.getId() + ": " + collection.getName()); - - HashMap mappings = new LinkedHashMap(); - LoopType loop = collection.getLoop(); - processLoop(loop, mappings); - for (Iterator iter = mappings.entrySet().iterator(); iter.hasNext();) { - Entry element = (Entry) iter.next(); - System.out.println(element.getKey() + ": " + element.getValue()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - } - - private static void addEntry(String name, String description, Map mappings) { - // hack way to format for our ui - name = name.replaceAll("_LOOP", "").replaceAll("-", ""); - if (name.length() > 5) { - name = name.substring(0, name.length() - 4) + "." + trimLeadingZero(name.substring(name.length() - 4, name.length() - 2)) + "." + trimLeadingZero(name.substring(name.length() - 2)); - } else if (name.length() > 3) { - name = name.substring(0, name.length() - 2) + "." + trimLeadingZero(name.substring(name.length() - 2)); - } - mappings.put(name.replace('-', '.'), description); - } - - private static String trimLeadingZero(String name) { - if (name.startsWith("0")) { - return name.substring(1); - } else { - return name; - } - } - - private static void processLoop(LoopType loop, Map mappings) { - addEntry(loop.getXid(), loop.getName(), mappings); - for (Iterator iter = loop.getSegmentOrLoopOrRepeat().iterator(); iter.hasNext();) { - Object element = ((JAXBElement) iter.next()).getValue(); - if (element instanceof SegmentType) { - SegmentType segment = (SegmentType) element; - processSegment(segment, mappings); - } else if (element instanceof LoopType) { - processLoop((LoopType) element, mappings); - } - } - } - - private static void processSegment(SegmentType segment, Map mappings) { - addEntry(segment.getXid(), segment.getName(), mappings); - for (Iterator iter = segment.getElementOrComposite().iterator(); iter.hasNext();) { - Object component = iter.next(); - if (component instanceof CompositeType) { - processComposite((CompositeType) component, mappings); - } else if (component instanceof ElementType) { - ElementType element = (ElementType) component; - addEntry(element.getXid(), element.getName(), mappings); - } - } - } - - private static void processComposite(CompositeType composite, Map mappings) { - addEntry(composite.getDataEle(), composite.getName(), mappings); - for (Iterator iter = composite.getElement().iterator(); iter.hasNext();) { - ElementType element = iter.next(); - addEntry(element.getXid(), element.getName(), mappings); - - } - } -} diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7Tests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7Tests.java deleted file mode 100644 index 343d494e9c..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7Tests.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * 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.plugins.datatypes.hl7v2; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import com.mirth.connect.donkey.model.message.MessageSerializerException; -import com.mirth.connect.model.converters.DocumentSerializer; -import com.mirth.connect.model.converters.Stopwatch; - -public class HL7Tests { - - public static void main(String[] args) { - - String testMessage = ""; - String testXML = null; - try { - testMessage = new String(getBytesFromFile(new File(args[0]))); - if (args.length > 1) { - testXML = new String(getBytesFromFile(new File(args[1]))); - } - System.out.println(testMessage); - } catch (IOException e) { - e.printStackTrace(); - } - try { - - long totalExecutionTime = 0; - int iterations = 1; - for (int i = 0; i < iterations; i++) { - totalExecutionTime += runTest(testMessage, testXML); - } - - System.out.println("Execution time average: " + totalExecutionTime / iterations + " ms"); - } - // System.out.println(new X12Serializer().serialize("SEG*1*2**4*5")); - catch (SAXException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - private static long runTest(String testMessage, String xml) throws MessageSerializerException, SAXException, IOException { - Stopwatch stopwatch = new Stopwatch(); -// Properties properties = new Properties(); -// properties.put("useStrictParser", "false"); -// properties.put("handleRepetitions", "true"); -// properties.put("inputSegmentDelimiter", "\r\n|\r|\n"); -// properties.put("outputSegmentDelimiter", "\r"); - stopwatch.start(); - ER7Serializer serializer = new ER7Serializer(null); - String xmloutput = xml; - String er7 = ""; - if (xml == null) { - xmloutput = serializer.toXML(testMessage); - er7 = serializer.fromXML(xmloutput); - stopwatch.stop(); - } else { - - DocumentSerializer docser = new DocumentSerializer(); - Document doc = docser.fromXML(xmloutput); - er7 = serializer.fromXML(docser.toXML(doc)); - stopwatch.stop(); - } - - //System.out.println(xmloutput); - DocumentSerializer docser = new DocumentSerializer(); - Document doc = docser.fromXML(xmloutput); - - System.out.println(docser.toXML(doc)); - System.out.println(er7); - if (er7.trim().equals(testMessage.trim())) { - System.out.println("Test Successful!"); - } else { - String original = testMessage.replaceAll("\\r\\n", "\r").trim(); - String newm = er7.replace('\n', '\r').trim(); - for (int i = 0; i < original.length(); i++) { - if (original.charAt(i) == newm.charAt(i)) { - System.out.print(newm.charAt(i)); - } else { - System.out.println(""); - System.out.print("Saw: "); - System.out.println(newm.charAt(i)); - - System.out.print("Expected: "); - System.out.print(original.charAt(i)); - break; - } - } - System.out.println("\nTest Failed!"); - } - return stopwatch.toValue(); - } - - // Returns the contents of the file in a byte array. - private static byte[] getBytesFromFile(File file) throws IOException { - InputStream is = new FileInputStream(file); - - // Get the size of the file - long length = file.length(); - - // You cannot create an array using a long type. - // It needs to be an int type. - // Before converting to an int type, check - // to ensure that file is not larger than Integer.MAX_VALUE. - if (length > Integer.MAX_VALUE) { - // File is too large - } - - // Create the byte array to hold the data - byte[] bytes = new byte[(int) length]; - - // Read in the bytes - int offset = 0; - int numRead = 0; - while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { - offset += numRead; - } - - // Ensure all the bytes have been read in - if (offset < bytes.length) { - throw new IOException("Could not completely read file " + file.getName()); - } - - // Close the input stream and return bytes - is.close(); - return bytes; - } -} diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPTests.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPTests.java deleted file mode 100644 index 3890a4dd57..0000000000 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/ncpdp/NCPDPTests.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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.plugins.datatypes.ncpdp; - -import java.io.File; -import java.io.IOException; -import java.io.StringReader; -import java.util.ArrayList; - -import org.apache.commons.io.FileUtils; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -import com.mirth.connect.donkey.model.message.MessageSerializerException; -import com.mirth.connect.model.converters.DocumentSerializer; -import com.mirth.connect.model.converters.Stopwatch; - -public class NCPDPTests { - public static void main(String[] args) throws Exception { - String testMessage = ""; - ArrayList testFiles = new ArrayList(); - testFiles.add("C:\\NCPDP_51_B1_Request.txt"); - testFiles.add("C:\\NCPDP_51_B1_Request_v2.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v3.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v4.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v5.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v6.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v7.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v8.txt"); - testFiles.add("C:\\NCPDP_51_B1_Response_v9.txt"); - testFiles.add("C:\\NCPDP_51_B2_Request.txt"); - testFiles.add("C:\\NCPDP_51_B2_Request_v2.txt"); - testFiles.add("C:\\NCPDP_51_B2_Response.txt"); - testFiles.add("C:\\NCPDP_51_B2_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_B2_Response_v3.txt"); - testFiles.add("C:\\NCPDP_51_B3_Request.txt"); - testFiles.add("C:\\NCPDP_51_B3_Response.txt"); - testFiles.add("C:\\NCPDP_51_B3_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_B3_Response_v3.txt"); - testFiles.add("C:\\NCPDP_51_E1_Request.txt"); - testFiles.add("C:\\NCPDP_51_E1_Response.txt"); - testFiles.add("C:\\NCPDP_51_E1_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_E1_Response_v3.txt"); - testFiles.add("C:\\NCPDP_51_E1_Response_v4.txt"); - testFiles.add("C:\\NCPDP_51_E1_Response_v5.txt"); - testFiles.add("C:\\NCPDP_51_N1_Request.txt"); - testFiles.add("C:\\NCPDP_51_N2_Request.txt"); - testFiles.add("C:\\NCPDP_51_P1_Request.txt"); - testFiles.add("C:\\NCPDP_51_P1_Response.txt"); - testFiles.add("C:\\NCPDP_51_P1_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_P1_Response_v3.txt"); - testFiles.add("C:\\NCPDP_51_P2_Request.txt"); - testFiles.add("C:\\NCPDP_51_P2_Response.txt"); - testFiles.add("C:\\NCPDP_51_P3_Request.txt"); - testFiles.add("C:\\NCPDP_51_P3_Response.txt"); - testFiles.add("C:\\NCPDP_51_P3_Response_v2.txt"); - testFiles.add("C:\\NCPDP_51_P4_Request.txt"); - testFiles.add("C:\\NCPDP_51_P4_Response.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_1.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_2.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_3.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_4.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_5.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_6.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_7.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_8.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_9.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_10.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_11.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_12.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_13.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_14.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_15.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_16.txt"); - testFiles.add("C:\\NCPDP_51_CALPOS_17.txt"); - - for (String testFile : testFiles) { - testMessage = new String(FileUtils.readFileToByteArray(new File(testFile))); - System.out.println("Processing test file:" + testFile); - - try { - long totalExecutionTime = 0; - int iterations = 1; - for (int i = 0; i < iterations; i++) { - totalExecutionTime += runTest(testMessage); - } - - //System.out.println("Execution time average: " + totalExecutionTime/iterations + " ms"); - } - // System.out.println(new X12Serializer().serialize("SEG*1*2**4*5")); - catch (SAXException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - private static long runTest(String testMessage) throws MessageSerializerException, SAXException, IOException { - Stopwatch stopwatch = new Stopwatch(); -// Properties properties = new Properties(); - String SchemaUrl = "/ncpdp51.xsd"; -// properties.put("useStrictParser", "true"); -// properties.put("http://java.sun.com/xml/jaxp/properties/schemaSource",SchemaUrl); - stopwatch.start(); - NCPDPSerializer serializer = new NCPDPSerializer(null); - String xmloutput = serializer.toXML(testMessage); - //System.out.println(xmloutput); - DocumentSerializer docser = new DocumentSerializer(); - Document doc = docser.fromXML(xmloutput); - XMLReader xr = XMLReaderFactory.createXMLReader(); - - NCPDPXMLHandler handler = new NCPDPXMLHandler("\u001E", "\u001D", "\u001C", "51"); - - xr.setContentHandler(handler); - xr.setErrorHandler(handler); - xr.setFeature("http://xml.org/sax/features/validation", true); - xr.setFeature("http://apache.org/xml/features/validation/schema", true); - xr.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true); - xr.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - xr.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); - xr.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", SchemaUrl); - xr.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "/ncpdp51.xsd"); - xr.parse(new InputSource(new StringReader(xmloutput))); - stopwatch.stop(); - - //System.out.println(docser.serialize(doc)); //handler.getOutput()); - //System.out.println(handler.getOutput()); - //System.out.println(xmloutput); - if (handler.getOutput().toString().replace('\n', '\r').trim().equals(testMessage.replaceAll("\\r\\n", "\r").trim())) { - System.out.println("Test Successful!"); - } else { - String original = testMessage.replaceAll("\\r\\n", "\r").trim(); - String newm = handler.getOutput().toString().replace('\n', '\r').trim(); - for (int i = 0; i < original.length(); i++) { - if (original.charAt(i) == newm.charAt(i)) { - System.out.print(newm.charAt(i)); - } else { - System.out.println(""); - System.out.print("Saw: "); - System.out.println(newm.charAt(i)); - System.out.print("Expected: "); - System.out.print(original.charAt(i)); - break; - } - } - System.out.println("Test Failed!"); - } - return stopwatch.toValue(); - } -} From a6c813ce2fcd4b6a32dbb8d01a3ef1374838f641 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 18:14:08 -0500 Subject: [PATCH 07/28] Restore DocumentSerailizerTests Signed-off-by: Mitch Gaffigan --- .../converters/DocumentSerailizerTests.java | 70 ------------------- .../converters/DocumentSerializerTest.java | 30 ++++++++ 2 files changed, 30 insertions(+), 70 deletions(-) delete mode 100644 server/src/test/java/com/mirth/connect/model/converters/DocumentSerailizerTests.java diff --git a/server/src/test/java/com/mirth/connect/model/converters/DocumentSerailizerTests.java b/server/src/test/java/com/mirth/connect/model/converters/DocumentSerailizerTests.java deleted file mode 100644 index 72e6fa552e..0000000000 --- a/server/src/test/java/com/mirth/connect/model/converters/DocumentSerailizerTests.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.model.converters; - -import javax.xml.parsers.DocumentBuilderFactory; - -import junit.framework.Assert; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -public class DocumentSerailizerTests { - - @Before - public void setUp() throws Exception {} - - @After - public void tearDown() throws Exception {} - - @Test - public void testToXML() throws Exception { - DocumentSerializer serializer = new DocumentSerializer(); - Document document = getSecureDocumentBuilderFactory(); - - Element element = document.createElement("root"); - element.setTextContent("Hello\r\nworld!"); - document.appendChild(element); - - String actual = serializer.toXML(document); - String expected = "\nHello \nworld!\n"; - Assert.assertEquals(expected, actual); - } - - @Test - public void testPreserveSpace() throws Exception { - Document document = getSecureDocumentBuilderFactory(); - Element root = document.createElement("root"); - document.appendChild(root); - Element child = document.createElement("child"); - child.setTextContent("Hello\nworld!"); - root.appendChild(child); - - DocumentSerializer serializer = new DocumentSerializer(); - String actual = serializer.toXML(document); - String expected = "\n\nHello\nworld!\n\n"; - Assert.assertEquals(expected, actual); - } - - @Test - public void testFromXML() { - - } - - private static Document getSecureDocumentBuilderFactory() throws Exception { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - return dbf.newDocumentBuilder().newDocument(); - } - -} diff --git a/server/src/test/java/com/mirth/connect/model/converters/DocumentSerializerTest.java b/server/src/test/java/com/mirth/connect/model/converters/DocumentSerializerTest.java index 2e8b08a202..1ab7972040 100644 --- a/server/src/test/java/com/mirth/connect/model/converters/DocumentSerializerTest.java +++ b/server/src/test/java/com/mirth/connect/model/converters/DocumentSerializerTest.java @@ -1,5 +1,6 @@ package com.mirth.connect.model.converters; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -22,6 +23,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.xml.sax.InputSource; public class DocumentSerializerTest { @@ -87,6 +89,34 @@ public void testValidFromXML() throws Exception { assertNotNull(document); } + @Test + public void testToXML() throws Exception { + Document document = newDocument(); + Element root = document.createElement("root"); + root.setTextContent("Hello\r\nworld!"); + document.appendChild(root); + + // the carriage return survives as a character reference, the line feed as itself + assertEquals("\nHello \nworld!\n", serializer.toXML(document)); + } + + @Test + public void testPreserveSpace() throws Exception { + Document document = newDocument(); + Element root = document.createElement("root"); + document.appendChild(root); + Element child = document.createElement("child"); + child.setTextContent("Hello\nworld!"); + root.appendChild(child); + + // the element gets indented, but the line feed inside the value is left alone + assertEquals("\n\n Hello\nworld!\n\n", serializer.toXML(document)); + } + + private static Document newDocument() throws Exception { + return DocumentSerializer.getSecureDocumentBuilderFactory().newDocumentBuilder().newDocument(); + } + // Util method for debugging purposes @SuppressWarnings("unused") private static void printDocument(Document doc) throws IOException, TransformerException { From 67ad0d38eb66447a243048491648654a8a10c6ab Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sat, 19 Sep 2026 18:20:11 -0500 Subject: [PATCH 08/28] Re-add MigrationUtilTest assuming current behavior is correct Signed-off-by: Mitch Gaffigan --- ...grationUtilTests.java => MigrationUtilTest.java} | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) rename server/src/test/java/com/mirth/connect/model/util/{MigrationUtilTests.java => MigrationUtilTest.java} (72%) diff --git a/server/src/test/java/com/mirth/connect/model/util/MigrationUtilTests.java b/server/src/test/java/com/mirth/connect/model/util/MigrationUtilTest.java similarity index 72% rename from server/src/test/java/com/mirth/connect/model/util/MigrationUtilTests.java rename to server/src/test/java/com/mirth/connect/model/util/MigrationUtilTest.java index 8935c2abe4..d4145c6165 100644 --- a/server/src/test/java/com/mirth/connect/model/util/MigrationUtilTests.java +++ b/server/src/test/java/com/mirth/connect/model/util/MigrationUtilTest.java @@ -13,7 +13,7 @@ import com.mirth.connect.util.MigrationUtil; -public class MigrationUtilTests extends TestCase { +public class MigrationUtilTest extends TestCase { public void testCompareVersions() { assertEquals(1, MigrationUtil.compareVersions("5", "4")); assertEquals(-1, MigrationUtil.compareVersions("5", "6")); @@ -31,10 +31,15 @@ public void testCompareVersions() { assertEquals(-1, MigrationUtil.compareVersions("1.8", "1.8.2")); } + /* + * length is the exact number of components to emit: shorter versions are padded with zeroes and + * longer ones are truncated, so a length below the number of components present loses them and + * a non-positive length yields nothing at all. Both production callers pass 3. + */ public void testNormalizeVersion() { - assertEquals("1.8", MigrationUtil.normalizeVersion("1.8", -1)); - assertEquals("1.8", MigrationUtil.normalizeVersion("1.8", 0)); - assertEquals("1.8", MigrationUtil.normalizeVersion("1.8", 1)); + assertEquals("", MigrationUtil.normalizeVersion("1.8", -1)); + assertEquals("", MigrationUtil.normalizeVersion("1.8", 0)); + assertEquals("1", MigrationUtil.normalizeVersion("1.8", 1)); assertEquals("1.8", MigrationUtil.normalizeVersion("1.8", 2)); assertEquals("1.8.0", MigrationUtil.normalizeVersion("1.8", 3)); assertEquals("1.8.0.0", MigrationUtil.normalizeVersion("1.8", 4)); From 51190401e07cba37a53c81875a19c42ee282fa7f Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 15:03:27 -0500 Subject: [PATCH 09/28] Translate FilterTransformerTests to fixtures Signed-off-by: Mitch Gaffigan --- ci/tests/101-raw-no-op/README.md | 7 + ci/tests/110-hl7-no-op/README.md | 8 + ci/tests/120-filter-transformer/README.md | 13 + .../channels/01-source-filter/channel.xml | 192 +++++++++ .../messages/01-accepted/dest01 | 1 + .../messages/01-accepted/dest01_status | 1 + .../messages/01-accepted/source | 1 + .../messages/01-accepted/source_status | 1 + .../messages/01-accepted/source_transformed | 1 + .../messages/02-filtered/source | 1 + .../messages/02-filtered/source_status | 1 + .../messages/02-filtered/source_transformed | 1 + .../02-source-transformer/channel.xml | 191 +++++++++ .../messages/01-transformed/dest01 | 1 + .../messages/01-transformed/dest01_status | 1 + .../messages/01-transformed/source | 1 + .../messages/01-transformed/source_status | 1 + .../01-transformed/source_transformed | 1 + .../channels/03-transformer-error/channel.xml | 191 +++++++++ .../messages/01-throws/source | 1 + .../messages/01-throws/source_status | 1 + .../130-hl7-strict-serialization/README.md | 10 + .../channels/01-strict-parser/channel.xml | 389 ++++++++++++++++++ .../messages/01-valid-adt/dest01_status | 1 + .../messages/01-valid-adt/source | 3 + .../messages/01-valid-adt/source_status | 1 + .../messages/01-valid-adt/source_transformed | 1 + .../messages/02-not-hl7/source | 1 + .../messages/02-not-hl7/source_status | 1 + ci/tests/140-pre-post-processor/README.md | 8 + .../channels/01-scripts/channel.xml | 181 ++++++++ .../01-scripts/messages/01-scripts-run/dest01 | 1 + .../messages/01-scripts-run/dest01_status | 1 + .../01-scripts/messages/01-scripts-run/source | 1 + .../messages/01-scripts-run/source_response | 1 + .../messages/01-scripts-run/source_status | 1 + .../connect/donkey/test/ChannelTests.java | 62 --- .../donkey/test/FilterTransformerTests.java | 198 +-------- 38 files changed, 1232 insertions(+), 246 deletions(-) create mode 100644 ci/tests/101-raw-no-op/README.md create mode 100644 ci/tests/110-hl7-no-op/README.md create mode 100644 ci/tests/120-filter-transformer/README.md create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/channel.xml create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01 create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01_status create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_status create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_transformed create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_status create mode 100644 ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_transformed create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/channel.xml create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01 create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01_status create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_status create mode 100644 ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_transformed create mode 100644 ci/tests/120-filter-transformer/channels/03-transformer-error/channel.xml create mode 100644 ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source create mode 100644 ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source_status create mode 100644 ci/tests/130-hl7-strict-serialization/README.md create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/channel.xml create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/dest01_status create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_status create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_transformed create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source_status create mode 100644 ci/tests/140-pre-post-processor/README.md create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/channel.xml create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01 create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01_status create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_response create mode 100644 ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_status diff --git a/ci/tests/101-raw-no-op/README.md b/ci/tests/101-raw-no-op/README.md new file mode 100644 index 0000000000..dc0eb215d6 --- /dev/null +++ b/ci/tests/101-raw-no-op/README.md @@ -0,0 +1,7 @@ +# 101-raw-no-op + +A channel that does nothing: the RAW data type at both ends, no filter or transformer elements, +Channel Reader to a Channel Writer templated on `${message.encodedData}`. + +With no filter or transformer the engine skips serialization altogether and the encoded content is +the raw content, so `dest01` asserts the payload reaches the destination unchanged. diff --git a/ci/tests/110-hl7-no-op/README.md b/ci/tests/110-hl7-no-op/README.md new file mode 100644 index 0000000000..4d39054c5f --- /dev/null +++ b/ci/tests/110-hl7-no-op/README.md @@ -0,0 +1,8 @@ +# 110-hl7-no-op + +The same no-op channel as 101 with the HL7 v2 data type at both ends, responding with +`Auto-generate (Destinations completed)`. + +- `dest01_metadata.yml` - the custom metadata columns the HL7 serializer fills in from MSH-4 and + MSH-9 on its own, with no transformer having run. +- `source_response` - the generated ACK, echoing the inbound MSH fields and MSA-2. diff --git a/ci/tests/120-filter-transformer/README.md b/ci/tests/120-filter-transformer/README.md new file mode 100644 index 0000000000..831331927f --- /dev/null +++ b/ci/tests/120-filter-transformer/README.md @@ -0,0 +1,13 @@ +# 120-filter-transformer + +Filter and transformer outcomes, on the RAW data type so that the transformed and encoded content +are exactly what the script left in `msg`. + +- `01-source-filter` - a JavaScript rule rejecting messages containing `REJECT`. An accepted + message is TRANSFORMED and reaches `dest01`; a rejected one is FILTERED, and its transformed + content is stored all the same, because the filter runs after the content is handed to the script. +- `02-source-transformer` - a JavaScript step prefixing the message. The transformed content is the + script's output, and RAW encodes to it unchanged, so the destination receives the same thing. +- `03-transformer-error` - a step that throws, giving ERROR. + +The case of no filter and no transformer at all is 101 and 110. diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/channel.xml b/ci/tests/120-filter-transformer/channels/01-source-filter/channel.xml new file mode 100644 index 0000000000..a4f60aeca1 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/channel.xml @@ -0,0 +1,192 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1001 + 2 + filter-transformer-source-filter + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Reject flagged messages + 0 + true + NONE + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01 b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01 new file mode 100644 index 0000000000..b0e8718fea --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01 @@ -0,0 +1 @@ +((ANY))KEEP this one((ANY)) \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01_status b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/dest01_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source new file mode 100644 index 0000000000..c47e7ee86d --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source @@ -0,0 +1 @@ +KEEP this one \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_status b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_transformed b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_transformed new file mode 100644 index 0000000000..c47e7ee86d --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/01-accepted/source_transformed @@ -0,0 +1 @@ +KEEP this one \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source new file mode 100644 index 0000000000..d9e788e51f --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source @@ -0,0 +1 @@ +REJECT this one \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_status b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_status new file mode 100644 index 0000000000..d8a5d8d473 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_status @@ -0,0 +1 @@ +FILTERED diff --git a/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_transformed b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_transformed new file mode 100644 index 0000000000..d9e788e51f --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/01-source-filter/messages/02-filtered/source_transformed @@ -0,0 +1 @@ +REJECT this one \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/channel.xml b/ci/tests/120-filter-transformer/channels/02-source-transformer/channel.xml new file mode 100644 index 0000000000..4ee544e3f6 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1002 + 2 + filter-transformer-source-transformer + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01 b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01 new file mode 100644 index 0000000000..8c38d64a5f --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01 @@ -0,0 +1 @@ +((ANY))transformed:Hello world!((ANY)) \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01_status b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/dest01_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_status b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_transformed b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_transformed new file mode 100644 index 0000000000..ae16d268c8 --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/02-source-transformer/messages/01-transformed/source_transformed @@ -0,0 +1 @@ +transformed:Hello world! \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/03-transformer-error/channel.xml b/ci/tests/120-filter-transformer/channels/03-transformer-error/channel.xml new file mode 100644 index 0000000000..81ab98ae3e --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/03-transformer-error/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1003 + 2 + filter-transformer-transformer-error + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Always throw + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source b/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source_status b/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source_status new file mode 100644 index 0000000000..5df7507e2d --- /dev/null +++ b/ci/tests/120-filter-transformer/channels/03-transformer-error/messages/01-throws/source_status @@ -0,0 +1 @@ +ERROR diff --git a/ci/tests/130-hl7-strict-serialization/README.md b/ci/tests/130-hl7-strict-serialization/README.md new file mode 100644 index 0000000000..4487a0915d --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/README.md @@ -0,0 +1,10 @@ +# 130-hl7-strict-serialization + +The HL7 v2 data type with `useStrictParser`, so the message goes through HAPI rather than being +read as delimited text. The channel's transformer step does nothing; it is there only because the +engine does not serialize at all without one. + +- `01-valid-adt` - an ADT^A01 is TRANSFORMED, and `source_transformed` asserts the whole strict + `urn:hl7-org:v2xml` document, which is what distinguishes strict parsing from the `` + form the non-strict reader produces. +- `02-not-hl7` - a payload HAPI cannot read gives ERROR rather than being passed through. diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/channel.xml b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/channel.xml new file mode 100644 index 0000000000..e8114adcbb --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/channel.xml @@ -0,0 +1,389 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1301 + 2 + hl7-strict-parser + + 1 + + 0 + sourceConnector + + + + Auto-generate (Destinations completed) + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + No-op + 0 + true + + + + HL7V2 + HL7V2 + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + HL7V2 + HL7V2 + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + HL7V2 + HL7V2 + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + false + false + \r + true + + + true + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/dest01_status b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/dest01_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/dest01_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source new file mode 100644 index 0000000000..3d27f88587 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source @@ -0,0 +1,3 @@ +MSH|^~\&|Some Other App|Some Other Facility|Ehrsource|Or|20250101120000||ADT^A01|Msgid99999|P|2.3 +EVN|A01|20250101120000 +PID|1||123456^^^Hospital^MR||SMITH^JOHN||19700101|M diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_status b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_transformed b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_transformed new file mode 100644 index 0000000000..021997704b --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/01-valid-adt/source_transformed @@ -0,0 +1 @@ +|^~\&Some Other AppSome Other FacilityEhrsourceOr20250101120000ADTA01Msgid99999P2.3A01202501011200001123456HospitalMRSMITHJOHN19700101M \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source new file mode 100644 index 0000000000..9ff36e0dee --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source @@ -0,0 +1 @@ +this is not an HL7 message \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source_status b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source_status new file mode 100644 index 0000000000..5df7507e2d --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/02-not-hl7/source_status @@ -0,0 +1 @@ +ERROR diff --git a/ci/tests/140-pre-post-processor/README.md b/ci/tests/140-pre-post-processor/README.md new file mode 100644 index 0000000000..733ed3ec6b --- /dev/null +++ b/ci/tests/140-pre-post-processor/README.md @@ -0,0 +1,8 @@ +# 140-pre-post-processor + +A no-op RAW channel carrying a pre-processor and a post-processor, responding with `Postprocessor`. + +- `dest01` - the pre-processor's return value. With no filter or transformer the encoded content is + the processed raw content rather than the raw content, so this is also what proves the + pre-processor ran. +- `source_response` - the post-processor's return value. diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/channel.xml b/ci/tests/140-pre-post-processor/channels/01-scripts/channel.xml new file mode 100644 index 0000000000..3f316d134a --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/channel.xml @@ -0,0 +1,181 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1401 + 2 + pre-post-processor + + 1 + + 0 + sourceConnector + + + + Postprocessor + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + return 'pre:' + message; + return 'postprocessed'; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01 b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01 new file mode 100644 index 0000000000..b72f7c045a --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01 @@ -0,0 +1 @@ +((ANY))pre:Hello world!((ANY)) \ No newline at end of file diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01_status b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/dest01_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_response b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_response new file mode 100644 index 0000000000..366af71490 --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_response @@ -0,0 +1 @@ +postprocessed \ No newline at end of file diff --git a/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_status b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/140-pre-post-processor/channels/01-scripts/messages/01-scripts-run/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java index 8a532f21ba..256c24f9b8 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java @@ -47,9 +47,6 @@ import com.mirth.connect.donkey.server.controllers.ChannelController; import com.mirth.connect.donkey.test.util.TestChannel; import com.mirth.connect.donkey.test.util.TestDestinationConnector; -import com.mirth.connect.donkey.test.util.TestFilterTransformer; -import com.mirth.connect.donkey.test.util.TestPostProcessor; -import com.mirth.connect.donkey.test.util.TestPreProcessor; import com.mirth.connect.donkey.test.util.TestSourceConnector; import com.mirth.connect.donkey.test.util.TestUtils; import com.mirth.connect.donkey.test.util.TestUtils.MessageStorageMode; @@ -434,65 +431,6 @@ public final void testMetaDataCasting() throws MetaDataColumnException { assertEquals("13 01 02 01 02 2010", new SimpleDateFormat("HH mm ss MM dd yyyy").format(dateValue.getTimeInMillis())); } - /* - * Create a new test channel Process a source message with a metadata ID of 1, assert that: - An - * InvalidConnectorMessageState exception is thrown - * - * Process a source message with a status other than RECEIVED, assert that: - An - * InvalidConnectorMessageState exception is thrown - * - * Process a valid source message, and assert that: - The pre-processor was run - The processed - * raw content was stored - The filter/transformer was run - The transformed/encoded content was - * stored - Initial messages were created for each destination chain - The message processed - * through at least the first destination connector for each chain - The post-processor was run - * - The final transaction was created - */ - @Test - public final void testProcess() throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - - channel.deploy(); - channel.start(null); - - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channelId, channelName, serverId).getConnectorMessages().get(0); - - Message message = null; - - message = channel.process(sourceMessage, false); - - // Assert that the message was run through the pre-processor - assertTrue(((TestPreProcessor) channel.getPreProcessor()).isProcessed()); - - // Assert that the processed raw content was stored - TestUtils.assertMessageContentExists(sourceMessage.getProcessedRaw()); - - // Assert that the FilterTransformer was run - assertTrue(((TestFilterTransformer) channel.getSourceConnector().getFilterTransformerExecutor().getFilterTransformer()).isTransformed()); - - // Assert that the transformed/encoded content was stored - TestUtils.assertMessageContentExists(sourceMessage.getTransformed()); - TestUtils.assertMessageContentExists(sourceMessage.getEncoded()); - - for (DestinationChainProvider chain : channel.getDestinationChainProviders()) { - Integer firstId = null; - for (Integer metaDataId : chain.getDestinationConnectors().keySet()) { - if (firstId == null || metaDataId < firstId) { - firstId = metaDataId; - } - } - // Assert that messages were created for each destination chain - TestUtils.assertConnectorMessageExists(message.getConnectorMessages().get(firstId), false); - // Assert that the message processed through at least the first destination connector for each chain - assertTrue(((TestDestinationConnector) chain.getDestinationConnectors().get(firstId)).getMessageIds().size() > 0); - } - - // Assert that the message was run through the post-processor - assertTrue(((TestPostProcessor) channel.getPostProcessor()).isProcessed()); - - channel.stop(); - channel.undeploy(); - } - @Test public final void testEncryption() throws Exception { //TODO UPDATE THIS TEST! diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java index fe9ad10219..303b39c2a4 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java @@ -1,15 +1,14 @@ /* * 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.assertNotNull; import static org.junit.Assert.assertNull; @@ -32,15 +31,18 @@ import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; import com.mirth.connect.donkey.server.channel.FilterTransformerExecutor; -import com.mirth.connect.donkey.server.channel.FilterTransformerResult; -import com.mirth.connect.donkey.server.channel.components.FilterTransformerException; import com.mirth.connect.donkey.server.message.DataType; import com.mirth.connect.donkey.test.util.TestAutoResponder; import com.mirth.connect.donkey.test.util.TestDataType; import com.mirth.connect.donkey.test.util.TestFilterTransformer; -import com.mirth.connect.donkey.test.util.TestSerializer; import com.mirth.connect.donkey.test.util.TestUtils; +/* + * What is left of this class after the rest of it was re-implemented as the ci/tests fixtures + * 120-filter-transformer, 130-hl7-strict-serialization and 140-pre-post-processor. The one case + * below has no fixture because it needs transformed content that the outbound serializer rejects, + * which no data type produces from an input the harness can submit. + */ public class FilterTransformerTests { private static int TEST_SIZE = 10; private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; @@ -62,26 +64,13 @@ final public static void afterClass() throws StartException { /* * For each test, create a new connector message with some raw content - * - * Set the inbound data type to a FailingTestDataType which always throws a SerializerException - * Process the connector message, and assert that: - The status is ERROR - The transformed - * content is null - The encoded content is null - * - * Set the filter/transformer interface to one that always returns false Process the connector - * message, and assert that: - The status is FILTERED - The transformed content is not null - - * The encoded content is null - * - * Set the filter/transformer interface to one that always throws a FilterTransformerException - * Process the connector message, and assert that: - The status is ERROR - The transformed - * content is not null - The encoded content is null - * - * Set the processed raw content on the connector message Process the connector message, and - * assert that: - The status is TRANSFORMED - The transformed content is not null - The encoded - * content is not null - The transformed content is equal to the serialized processed raw - * content - The encoded content is equal to the serialized/deserialized processed raw content + * + * Set the outbound data type to a FailingTestDataType which always throws a + * SerializerException Process the connector message, and assert that: - The transformed content + * is not null - The encoded content is null */ @Test - public void testWithFilterTransformer() throws Exception { + public void testOutboundSerializationFailure() throws Exception { ConnectorMessage connectorMessage; FilterTransformerExecutor filterTransformerExecutor; @@ -126,80 +115,8 @@ public FailingTestDataType() { } } - logger.info("Testing FilterTransformerExecutor.processConnectorMessage with a FilterTransformer..."); - - /* - * Assert that if inbound serialization failed, the status is set to ERROR, and the - * transformed/encoded content is not set - */ - filterTransformerExecutor = new FilterTransformerExecutor(new FailingTestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); - - try { - filterTransformerExecutor.processConnectorMessage(connectorMessage); - } catch (MessageSerializerException e) { - } - - assertNull(connectorMessage.getTransformed()); - assertNull(connectorMessage.getEncoded()); - } - - /* - * Assert that if the message is filtered, the status is set to FILTERED, the transformed - * content is set, and the encoded content is not set - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer() { - @Override - public FilterTransformerResult doFilterTransform(ConnectorMessage message) throws FilterTransformerException { - return new FilterTransformerResult(true, null); - } - }); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); + logger.info("Testing FilterTransformerExecutor.processConnectorMessage with a failing outbound serializer..."); - try { - filterTransformerExecutor.processConnectorMessage(connectorMessage); - } catch (FilterTransformerException e) { - } - - assertEquals(Status.FILTERED, connectorMessage.getStatus()); - assertNotNull(connectorMessage.getTransformed()); - assertNull(connectorMessage.getEncoded()); - } - - /* - * Assert that if the filter/transformer interface throws an exception, then the status is - * set to ERROR, the transformed content is set, and the encoded content is not set - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer() { - @Override - public FilterTransformerResult doFilterTransform(ConnectorMessage message) throws FilterTransformerException { - throw new FilterTransformerException("Failed to run filter/transformer.", new Exception(), null); - } - }); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); - - try { - filterTransformerExecutor.processConnectorMessage(connectorMessage); - } catch (FilterTransformerException e) { - } - - assertNotNull(connectorMessage.getTransformed()); - assertNull(connectorMessage.getEncoded()); - } - - /* - * Assert that if the outbound deserialization fails, then the status is set to ERROR, the - * transformed content is set, and the encoded content is not set - */ filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new FailingTestDataType()); filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer()); for (int i = 1; i <= TEST_SIZE; i++) { @@ -214,92 +131,5 @@ public FilterTransformerResult doFilterTransform(ConnectorMessage message) throw assertNotNull(connectorMessage.getTransformed()); assertNull(connectorMessage.getEncoded()); } - - /* - * Assert that if everything runs without errors, then the status is set to TRANSFORMED, and - * the transformed/encoded content is set - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); - filterTransformerExecutor.processConnectorMessage(connectorMessage); - - assertEquals(Status.TRANSFORMED, connectorMessage.getStatus()); - assertNotNull(connectorMessage.getTransformed()); - assertNotNull(connectorMessage.getEncoded()); - } - - /* - * Assert that if the processed raw content is set, then the status is set to TRANSFORMED, - * the transformed/encoded content is set, and the transformed content is the serialized - * processed raw content rather than the raw content - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, "", "HL7V2", false)); - connectorMessage.setProcessedRaw(new MessageContent(channelId, 1, 1, ContentType.PROCESSED_RAW, testMessage, "HL7V2", false)); - filterTransformerExecutor.processConnectorMessage(connectorMessage); - - assertEquals(Status.TRANSFORMED, connectorMessage.getStatus()); - assertNotNull(connectorMessage.getTransformed()); - assertNotNull(connectorMessage.getEncoded()); - assertEquals((new TestSerializer()).toXML(testMessage), connectorMessage.getTransformed().getContent()); - assertEquals((new TestSerializer()).fromXML((new TestSerializer()).toXML(testMessage)), connectorMessage.getEncoded().getContent()); - } - } - - /* - * For each test, create a new connector message with some raw content - * - * Process the connector message, and assert that: - The status is TRANSFORMED - The transformed - * content is null - The encoded content is equal to the raw content - * - * Set the processed raw content on the connector message Process the connector message, and - * assert that: - The status is TRANSFORMED - The transformed content is null - The encoded - * content is equal to the processed raw content - */ - @Test - public void testWithoutFilterTransformer() throws Exception { - ConnectorMessage connectorMessage; - FilterTransformerExecutor filterTransformerExecutor; - - logger.info("Testing FilterTransformerExecutor.processConnectorMessage without a FilterTransformer..."); - - /* - * Assert that if the processed raw content is not set, then the status is set to - * TRANSFORMED, the transformed content is not set, and the encoded content is set to the - * raw content - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); - filterTransformerExecutor.processConnectorMessage(connectorMessage); - - assertEquals(Status.TRANSFORMED, connectorMessage.getStatus()); - assertNull(connectorMessage.getTransformed()); - assertEquals(testMessage, connectorMessage.getEncoded().getContent()); - } - - /* - * Assert that if the processed raw content is set, then the status is set to TRANSFORMED, - * the transformed content is not set, the encoded content is set to the processed raw - * content rather than the raw content - */ - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, "", "HL7V2", false)); - connectorMessage.setProcessedRaw(new MessageContent(channelId, 1, 1, ContentType.PROCESSED_RAW, testMessage, "HL7V2", false)); - filterTransformerExecutor.processConnectorMessage(connectorMessage); - - assertEquals(Status.TRANSFORMED, connectorMessage.getStatus()); - assertNull(connectorMessage.getTransformed()); - assertEquals(testMessage, connectorMessage.getEncoded().getContent()); - } } } From b9eee24d549ceefd9059d0a792b46b9f7c0ebead Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 15:57:43 -0500 Subject: [PATCH 10/28] Translate testOutboundSerializationFailure to fixture test Signed-off-by: Mitch Gaffigan --- ci/README.md | 5 +- .../README.md | 12 + .../channels/01-raw-to-hl7/channel.xml | 224 ++++++++++++++++++ .../messages/01-serializable/source | 1 + .../messages/01-serializable/source_encoded | 2 + .../01-raw-to-hl7/messages/02-not-xml/source | 1 + .../messages/02-not-xml/source_encoded | 1 + .../02-not-xml/source_processing_error | 3 + .../messages/02-not-xml/source_status | 1 + .../messages/02-not-xml/source_transformed | 1 + .../donkey/test/FilterTransformerTests.java | 135 ----------- .../smoketest/MessageAssertions.java | 16 +- 12 files changed, 265 insertions(+), 137 deletions(-) create mode 100644 ci/tests/150-outbound-serialization-failure/README.md create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/channel.xml create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source_encoded create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_encoded create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_processing_error create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_status create mode 100644 ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_transformed delete mode 100644 donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java diff --git a/ci/README.md b/ci/README.md index c9605360a5..832a05a8db 100644 --- a/ci/README.md +++ b/ci/README.md @@ -45,6 +45,7 @@ the payload sent to the channel. The other files are optional assertions: | `source_response` | Source response payload | | `source_transformed` | Transformed source payload | | `source_encoded` | Encoded source payload | +| `source_processing_error` | Processing error recorded against the source | | `destNN` | Sent payload for destination `NN` | | `destNN_transformed` | Transformed payload for destination `NN` | | `destNN_response` | Response payload from destination `NN` | @@ -54,7 +55,9 @@ the payload sent to the channel. The other files are optional assertions: `NN` is the destination connector's metadata ID: `dest01` is the first destination, `dest02` the second, and so on. Metadata files are YAML mappings; list only the keys that matter to the test. Content assertions are byte-for-byte, except -that `((ANY))` matches variable content such as generated IDs or timestamps. +that `((ANY))` matches variable content such as generated IDs or timestamps. A content +assertion file whose entire contents are `((NONE))` asserts the opposite: that the server +stored no such content at all, which is not the same as storing an empty string. A fixture case runs in every configuration by default. To limit it, add a `configurations` file at the case root with one configuration name per line: diff --git a/ci/tests/150-outbound-serialization-failure/README.md b/ci/tests/150-outbound-serialization-failure/README.md new file mode 100644 index 0000000000..8a5064ff2b --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/README.md @@ -0,0 +1,12 @@ +# 150-outbound-serialization-failure + +What the engine leaves behind when the transformed content is something the *outbound* data type +cannot serialize. The channel reads RAW and writes HL7 v2, so `msg` is the submitted payload +verbatim and the payload alone decides whether the outbound serializer succeeds — the one +arrangement in which a message the harness can submit reaches that failure. + +- `01-serializable` - an `` XML document, as the control: `source_encoded` is the ER7 + the outbound serializer produced from it, so the channel is known to work for content it accepts. +- `02-not-xml` - a payload the outbound serializer cannot parse. The source is ERROR, the + transformed content is stored all the same, and no encoded content exists at all — `((NONE))`, + which is not the same as an empty string. diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/channel.xml b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/channel.xml new file mode 100644 index 0000000000..547eac8210 --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/channel.xml @@ -0,0 +1,224 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1501 + 2 + outbound-serialization-raw-to-hl7 + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + No-op + 0 + true + + + + RAW + HL7V2 + + + JavaScript + + + + + + true + true + false + false + false + \n + true + + + false + false + \n + + + MSH_Segment + + + + \n + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source new file mode 100644 index 0000000000..89d90984c6 --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source @@ -0,0 +1 @@ +|^~\&DestinationADTA01Msgid99999P2.3222333SmithAlice \ No newline at end of file diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source_encoded b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source_encoded new file mode 100644 index 0000000000..f478cb8a1f --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/01-serializable/source_encoded @@ -0,0 +1,2 @@ +MSH|^~\&|Destination||||||ADT^A01|Msgid99999|P|2.3 +PID|||222333||Smith^Alice diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source new file mode 100644 index 0000000000..dc9024240e --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source @@ -0,0 +1 @@ +this is not xml \ No newline at end of file diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_encoded b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_encoded new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_encoded @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_processing_error b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_processing_error new file mode 100644 index 0000000000..a2511a15d4 --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_processing_error @@ -0,0 +1,3 @@ +ER7Serializer error +ERROR MESSAGE: Error converting XML to ER7 +((ANY)) \ No newline at end of file diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_status b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file diff --git a/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_transformed b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_transformed new file mode 100644 index 0000000000..dc9024240e --- /dev/null +++ b/ci/tests/150-outbound-serialization-failure/channels/01-raw-to-hl7/messages/02-not-xml/source_transformed @@ -0,0 +1 @@ +this is not xml \ No newline at end of file diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java deleted file mode 100644 index 303b39c2a4..0000000000 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/FilterTransformerTests.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * 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.assertNotNull; -import static org.junit.Assert.assertNull; - -import java.util.Calendar; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mirth.connect.donkey.model.DonkeyException; -import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.ContentType; -import com.mirth.connect.donkey.model.message.MessageContent; -import com.mirth.connect.donkey.model.message.MessageSerializer; -import com.mirth.connect.donkey.model.message.MessageSerializerException; -import com.mirth.connect.donkey.model.message.Status; -import com.mirth.connect.donkey.server.Donkey; -import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.FilterTransformerExecutor; -import com.mirth.connect.donkey.server.message.DataType; -import com.mirth.connect.donkey.test.util.TestAutoResponder; -import com.mirth.connect.donkey.test.util.TestDataType; -import com.mirth.connect.donkey.test.util.TestFilterTransformer; -import com.mirth.connect.donkey.test.util.TestUtils; - -/* - * What is left of this class after the rest of it was re-implemented as the ci/tests fixtures - * 120-filter-transformer, 130-hl7-strict-serialization and 140-pre-post-processor. The one case - * below has no fixture because it needs transformed content that the outbound serializer rejects, - * which no data type produces from an input the harness can submit. - */ -public class FilterTransformerTests { - private static int TEST_SIZE = 10; - private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; - private static String channelName = TestUtils.DEFAULT_CHANNEL_ID; - private static String serverId = TestUtils.DEFAULT_SERVER_ID; - private static String testMessage = TestUtils.TEST_HL7_MESSAGE; - - private Logger logger = LogManager.getLogger(this.getClass()); - - @BeforeClass - final public static void beforeClass() throws StartException { - Donkey.getInstance().startEngine(TestUtils.getDonkeyTestConfiguration()); - } - - @AfterClass - final public static void afterClass() throws StartException { - Donkey.getInstance().stopEngine(); - } - - /* - * For each test, create a new connector message with some raw content - * - * Set the outbound data type to a FailingTestDataType which always throws a - * SerializerException Process the connector message, and assert that: - The transformed content - * is not null - The encoded content is null - */ - @Test - public void testOutboundSerializationFailure() throws Exception { - ConnectorMessage connectorMessage; - FilterTransformerExecutor filterTransformerExecutor; - - class FailingTestSerializer implements MessageSerializer { - @Override - public boolean isSerializationRequired(boolean isXml) { - return false; - } - - @Override - public String transformWithoutSerializing(String message, MessageSerializer outboundSerializer) { - return message; - } - - @Override - public String toXML(String message) throws MessageSerializerException { - throw new MessageSerializerException("Inbound serialization failed."); - } - - @Override - public String fromXML(String message) throws MessageSerializerException { - throw new MessageSerializerException("Outbound serialization failed."); - } - - @Override - public void populateMetaData(String message, Map map) {} - - @Override - public String toJSON(String message) throws MessageSerializerException { - return null; - } - - @Override - public String fromJSON(String message) throws MessageSerializerException { - return null; - } - } - - class FailingTestDataType extends DataType { - public FailingTestDataType() { - super("HL7V2", new FailingTestSerializer(), new TestAutoResponder()); - } - } - - logger.info("Testing FilterTransformerExecutor.processConnectorMessage with a failing outbound serializer..."); - - filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new FailingTestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer()); - for (int i = 1; i <= TEST_SIZE; i++) { - connectorMessage = new ConnectorMessage(channelId, channelName, 1, 1, serverId, Calendar.getInstance(), Status.RECEIVED); - connectorMessage.setRaw(new MessageContent(channelId, 1, 1, ContentType.RAW, testMessage, "HL7V2", false)); - - try { - filterTransformerExecutor.processConnectorMessage(connectorMessage); - } catch (DonkeyException e) { - } - - assertNotNull(connectorMessage.getTransformed()); - assertNull(connectorMessage.getEncoded()); - } - } -} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index f2844f2ac6..2376a8514e 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -32,6 +32,9 @@ final class MessageAssertions { /** Fixture wildcard: matches any run of characters, for timestamps and generated ids. */ private static final String ANY_WILDCARD = "((ANY))"; + /** Fixture sentinel: the whole file asserts that the server stored no such content at all. */ + private static final String NONE_SENTINEL = "((NONE))"; + private static final Pattern RESPONSE_ENVELOPE = Pattern.compile("^\\s*].*", Pattern.DOTALL); /** Destination assertion files are {@code dest} plus an optional suffix. */ @@ -57,6 +60,8 @@ static void assertFixtureFile(Message message, String fileName, String content) content(connector(message, SOURCE_META_DATA_ID, fileName).getTransformed())); case "source_encoded" -> assertContent("source encoded", content, content(connector(message, SOURCE_META_DATA_ID, fileName).getEncoded())); + case "source_processing_error" -> assertContent("source processing error", content, + connector(message, SOURCE_META_DATA_ID, fileName).getProcessingError()); case "source_response" -> assertResponse("source response", content, connector(message, SOURCE_META_DATA_ID, fileName)); case "source_metadata.yml" -> assertMetadata("source_metadata.yml", parseYamlMap(content), @@ -186,8 +191,17 @@ private static boolean scalarsEqual(Object expected, Object actual) { return String.valueOf(expected).equals(String.valueOf(actual)); } - /** Compares an assertion file to actual content, honouring {@value #ANY_WILDCARD}. */ + /** + * Compares an assertion file to actual content, honouring {@value #ANY_WILDCARD} and + * {@value #NONE_SENTINEL}. + */ private static void assertMatches(String label, String expected, String actual) { + if (NONE_SENTINEL.equals(expected.trim())) { + if (actual != null) { + throw new AssertionError("Expected " + label + " content to be absent, found " + describe(actual)); + } + return; + } if (actual == null) { throw new AssertionError("Expected " + label + " content but the server stored none"); } From 580acc5e22e06764e2dd680ffade71b7533cf978 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 16:42:55 -0500 Subject: [PATCH 11/28] Fix test run outside of container Signed-off-by: Mitch Gaffigan --- smoketest/build.gradle | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/smoketest/build.gradle b/smoketest/build.gradle index 4d121012c8..18e8b941bc 100644 --- a/smoketest/build.gradle +++ b/smoketest/build.gradle @@ -30,13 +30,26 @@ sourceSets { } } +// match ci/run-harness.sh, sort is critical +def engineHome = project(':server').file('setup') +def engineJars = files({ + fileTree(engineHome) { + include 'extensions/**/*.jar' + include 'server-lib/**/*.jar' + }.files.sort { it.path } +}) + // The root convention applies useJUnit() to every Test task; this module is JUnit 5. tasks.named('test') { useJUnitPlatform() // Only run our tests if a live server URL is provided // `./gradlew :smoketest:test -Doie.baseUrl=https://localhost:8443` onlyIf { System.getProperty('oie.baseUrl') != null } + // The thing under test is a running server, no incremental build is possible. + outputs.upToDateWhen { false } systemProperties System.getProperties().findAll { it.key.toString().startsWith('oie.') } + // Engine jars first, harness classes and fixtures last, as in the container. + classpath = engineJars + classpath } tasks.named('jar', Jar) { From 05a579d12ade3b60baf0a04f4ca47f4e3036cea5 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 17:10:16 -0500 Subject: [PATCH 12/28] Translate ChannelTests message storage settings to fixtures Signed-off-by: Mitch Gaffigan --- ci/README.md | 5 + ci/tests/160-message-storage-levels/README.md | 16 ++ .../channels/01-development/channel.xml | 191 ++++++++++++++++++ .../messages/01-every-stage-stored/dest01 | 1 + .../messages/01-every-stage-stored/source | 1 + .../01-every-stage-stored/source_encoded | 1 + .../messages/01-every-stage-stored/source_raw | 1 + .../01-every-stage-stored/source_transformed | 1 + .../channels/02-production/channel.xml | 191 ++++++++++++++++++ .../messages/01-transformed-dropped/dest01 | 1 + .../messages/01-transformed-dropped/source | 1 + .../01-transformed-dropped/source_encoded | 1 + .../01-transformed-dropped/source_raw | 1 + .../01-transformed-dropped/source_transformed | 1 + .../channels/03-raw/channel.xml | 191 ++++++++++++++++++ .../03-raw/messages/01-raw-only/dest01 | 1 + .../03-raw/messages/01-raw-only/dest01_status | 1 + .../03-raw/messages/01-raw-only/source | 1 + .../messages/01-raw-only/source_encoded | 1 + .../03-raw/messages/01-raw-only/source_raw | 1 + .../03-raw/messages/01-raw-only/source_status | 1 + .../messages/01-raw-only/source_transformed | 1 + .../channels/04-metadata/channel.xml | 191 ++++++++++++++++++ .../04-metadata/messages/01-no-content/dest01 | 1 + .../messages/01-no-content/dest01_status | 1 + .../04-metadata/messages/01-no-content/source | 1 + .../messages/01-no-content/source_encoded | 1 + .../messages/01-no-content/source_raw | 1 + .../messages/01-no-content/source_status | 1 + .../messages/01-no-content/source_transformed | 1 + ci/tests/170-content-removal/README.md | 15 ++ .../channels/01-unqueued/channel.xml | 191 ++++++++++++++++++ .../messages/01-content-removed/dest01 | 1 + .../messages/01-content-removed/dest01_status | 1 + .../messages/01-content-removed/source | 1 + .../01-content-removed/source_encoded | 1 + .../messages/01-content-removed/source_raw | 1 + .../messages/01-content-removed/source_status | 1 + .../01-content-removed/source_transformed | 1 + .../02-queued-destination/channel.xml | 191 ++++++++++++++++++ .../messages/01-content-removed/dest01 | 1 + .../messages/01-content-removed/dest01_status | 1 + .../messages/01-content-removed/source | 1 + .../01-content-removed/source_encoded | 1 + .../messages/01-content-removed/source_raw | 1 + .../messages/01-content-removed/source_status | 1 + .../01-content-removed/source_transformed | 1 + .../connect/donkey/test/ChannelTests.java | 164 +-------------- .../smoketest/Harness.java | 21 +- .../smoketest/MessageAssertions.java | 2 + .../smoketest/MessageStorageDisabledTest.java | 49 +++++ .../channels/message-storage-disabled.xml | 191 ++++++++++++++++++ 52 files changed, 1484 insertions(+), 163 deletions(-) create mode 100644 ci/tests/160-message-storage-levels/README.md create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/channel.xml create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/dest01 create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_encoded create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_raw create mode 100644 ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_transformed create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/channel.xml create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/dest01 create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_encoded create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_raw create mode 100644 ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_transformed create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/channel.xml create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01 create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01_status create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_encoded create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_raw create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_status create mode 100644 ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_transformed create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/channel.xml create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01 create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01_status create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_encoded create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_raw create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_status create mode 100644 ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_transformed create mode 100644 ci/tests/170-content-removal/README.md create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/channel.xml create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01 create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01_status create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_encoded create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_raw create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_status create mode 100644 ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_transformed create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/channel.xml create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01 create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01_status create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_encoded create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_raw create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_status create mode 100644 ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_transformed create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/MessageStorageDisabledTest.java create mode 100644 smoketest/src/test/resources/channels/message-storage-disabled.xml diff --git a/ci/README.md b/ci/README.md index 832a05a8db..55d586dbf6 100644 --- a/ci/README.md +++ b/ci/README.md @@ -42,6 +42,7 @@ the payload sent to the channel. The other files are optional assertions: | `source_sourcemap.yml` | Source map supplied with `source` | | `source_metadata.yml` | Selected source message metadata | | `source_status` | Source status | +| `source_raw` | Raw source payload as stored | | `source_response` | Source response payload | | `source_transformed` | Transformed source payload | | `source_encoded` | Encoded source payload | @@ -91,6 +92,10 @@ Put hand-written JUnit 5 tests in the fixture tests and are appropriate for multi-step workflows, computed expectations, or assertions that do not fit the fixture files. +A Java test's channels go in `smoketest/src/test/resources/channels/`, not under +`ci/tests/`, which is the fixture generator's tree; `Harness.deploy` loads either from +the classpath. + ## Run Locally Run every configuration: diff --git a/ci/tests/160-message-storage-levels/README.md b/ci/tests/160-message-storage-levels/README.md new file mode 100644 index 0000000000..eb842cdb1f --- /dev/null +++ b/ci/tests/160-message-storage-levels/README.md @@ -0,0 +1,16 @@ +# 160-message-storage-levels + +Which content rows a channel's message storage setting keeps. Every channel here is the same +RAW-to-RAW channel with one JavaScript transformer step — so raw, transformed, encoded and sent +all exist to be stored — and differs only in ``. + +- `01-development` - DEVELOPMENT keeps everything: raw, transformed, encoded and the sent content. +- `02-production` - PRODUCTION drops transformed (and processed raw), keeping raw, encoded and + sent. This is the one level where content is partly kept and partly dropped. +- `03-raw` - RAW keeps only the raw content. Transformed, encoded and sent are gone, but the + statuses show the message still ran all the way to SENT. +- `04-metadata` - METADATA keeps no content at all, only the message and connector message rows, + so the statuses are all that is left to assert. + +DISABLED, the fifth level, stores nothing whatsoever — not even the message row a fixture's +assertions need a message to run against — so it lives in `MessageStorageDisabledTest` instead. diff --git a/ci/tests/160-message-storage-levels/channels/01-development/channel.xml b/ci/tests/160-message-storage-levels/channels/01-development/channel.xml new file mode 100644 index 0000000000..76adeff548 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1601 + 2 + message-storage-development + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/dest01 b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/dest01 new file mode 100644 index 0000000000..8c38d64a5f --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/dest01 @@ -0,0 +1 @@ +((ANY))transformed:Hello world!((ANY)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_encoded b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_encoded new file mode 100644 index 0000000000..ae16d268c8 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_encoded @@ -0,0 +1 @@ +transformed:Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_raw b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_raw new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_raw @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_transformed b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_transformed new file mode 100644 index 0000000000..ae16d268c8 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/01-development/messages/01-every-stage-stored/source_transformed @@ -0,0 +1 @@ +transformed:Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/channel.xml b/ci/tests/160-message-storage-levels/channels/02-production/channel.xml new file mode 100644 index 0000000000..baca4b55e7 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1602 + 2 + message-storage-production + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + PRODUCTION + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/dest01 b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/dest01 new file mode 100644 index 0000000000..8c38d64a5f --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/dest01 @@ -0,0 +1 @@ +((ANY))transformed:Hello world!((ANY)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_encoded b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_encoded new file mode 100644 index 0000000000..ae16d268c8 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_encoded @@ -0,0 +1 @@ +transformed:Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_raw b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_raw new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_raw @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_transformed b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_transformed new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/02-production/messages/01-transformed-dropped/source_transformed @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/channel.xml b/ci/tests/160-message-storage-levels/channels/03-raw/channel.xml new file mode 100644 index 0000000000..d1fcf30d69 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1603 + 2 + message-storage-raw + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + RAW + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01 b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01_status b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01_status new file mode 100644 index 0000000000..59586dad7f --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/dest01_status @@ -0,0 +1 @@ +SENT \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_encoded b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_encoded new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_encoded @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_raw b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_raw new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_raw @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_status b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_transformed b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_transformed new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/03-raw/messages/01-raw-only/source_transformed @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/channel.xml b/ci/tests/160-message-storage-levels/channels/04-metadata/channel.xml new file mode 100644 index 0000000000..4c409008c2 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1604 + 2 + message-storage-metadata + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + METADATA + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01 b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01_status b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01_status new file mode 100644 index 0000000000..59586dad7f --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/dest01_status @@ -0,0 +1 @@ +SENT \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_encoded b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_encoded new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_encoded @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_raw b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_raw new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_raw @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_status b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_transformed b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_transformed new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/160-message-storage-levels/channels/04-metadata/messages/01-no-content/source_transformed @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/README.md b/ci/tests/170-content-removal/README.md new file mode 100644 index 0000000000..2ae5d3b5b2 --- /dev/null +++ b/ci/tests/170-content-removal/README.md @@ -0,0 +1,15 @@ +# 170-content-removal + +`removeContentOnCompletion`: a channel that stores its content normally while the message is in +flight and deletes it once every connector has completed. Both channels below are the +DEVELOPMENT-storage channel of 160 with that flag turned on, so 160's `01-development` is the +control showing what is there to be removed. + +- `01-unqueued` - the destination is not queued, so the engine removes content in the same + transaction that marks the message processed. +- `02-queued-destination` - the destination is queued, which forces the removal into a separate + transaction committed after the destination is already SENT. The content ends up equally gone; + this is the path that reaches the delete from the queue thread rather than the process thread. + +In both cases the statuses survive the removal, which is what separates removed content from a +channel that never stored any. diff --git a/ci/tests/170-content-removal/channels/01-unqueued/channel.xml b/ci/tests/170-content-removal/channels/01-unqueued/channel.xml new file mode 100644 index 0000000000..c6b170a8c8 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1701 + 2 + content-removal-unqueued + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + true + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01 b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01_status b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01_status new file mode 100644 index 0000000000..59586dad7f --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/dest01_status @@ -0,0 +1 @@ +SENT \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_encoded b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_encoded new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_encoded @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_raw b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_raw new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_raw @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_status b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_transformed b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_transformed new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/01-unqueued/messages/01-content-removed/source_transformed @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/channel.xml b/ci/tests/170-content-removal/channels/02-queued-destination/channel.xml new file mode 100644 index 0000000000..fe476aef4f --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/channel.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1702 + 2 + content-removal-queued-destination + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + true + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + true + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01 b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01_status b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01_status new file mode 100644 index 0000000000..59586dad7f --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/dest01_status @@ -0,0 +1 @@ +SENT \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_encoded b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_encoded new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_encoded @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_raw b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_raw new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_raw @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_status b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_transformed b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_transformed new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/170-content-removal/channels/02-queued-destination/messages/01-content-removed/source_transformed @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java index 256c24f9b8..76a826fa41 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java @@ -25,31 +25,21 @@ import org.junit.Test; import com.mirth.connect.donkey.model.channel.DeployedState; -import com.mirth.connect.donkey.model.channel.DestinationConnectorProperties; -import com.mirth.connect.donkey.model.channel.DestinationConnectorPropertiesInterface; import com.mirth.connect.donkey.model.channel.MetaDataColumn; import com.mirth.connect.donkey.model.channel.MetaDataColumnException; import com.mirth.connect.donkey.model.channel.MetaDataColumnType; -import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.ContentType; import com.mirth.connect.donkey.model.message.Message; -import com.mirth.connect.donkey.model.message.MessageContent; -import com.mirth.connect.donkey.model.message.RawMessage; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.channel.ChannelException; import com.mirth.connect.donkey.server.channel.DestinationChainProvider; import com.mirth.connect.donkey.server.channel.DestinationConnector; -import com.mirth.connect.donkey.server.channel.DispatchResult; -import com.mirth.connect.donkey.server.channel.SourceConnector; -import com.mirth.connect.donkey.server.channel.StorageSettings; import com.mirth.connect.donkey.server.controllers.ChannelController; import com.mirth.connect.donkey.test.util.TestChannel; import com.mirth.connect.donkey.test.util.TestDestinationConnector; import com.mirth.connect.donkey.test.util.TestSourceConnector; import com.mirth.connect.donkey.test.util.TestUtils; -import com.mirth.connect.donkey.test.util.TestUtils.MessageStorageMode; public class ChannelTests { final public static int TEST_SIZE = 50; @@ -506,153 +496,9 @@ public final void testEncryption() throws Exception { // } } - @Test - public final void testContentRemoval() throws Exception { - testContentRemoval(false, false); - testContentRemoval(true, false); - } - - @Test - public final void testContentRemovalWithQueueing() throws Exception { - testContentRemoval(false, true); - testContentRemoval(true, true); - } - - private void testContentRemoval(boolean removeContentOnCompletion, boolean useQueue) throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - channel.getStorageSettings().setRemoveContentOnCompletion(removeContentOnCompletion); - - if (useQueue) { - DestinationConnectorProperties destinationConnectorProperties = ((DestinationConnectorPropertiesInterface) channel.getDestinationConnector(1).getConnectorProperties()).getDestinationConnectorProperties(); - destinationConnectorProperties.setQueueEnabled(true); - destinationConnectorProperties.setSendFirst(false); - } - - SourceConnector sourceConnector = channel.getSourceConnector(); - - channel.deploy(); - channel.start(null); - - DispatchResult dispatchResult = sourceConnector.dispatchRawMessage(new RawMessage(testMessage)); - sourceConnector.finishDispatch(dispatchResult); - - // if queueing, give the queue time to flush out - if (useQueue) { - Thread.sleep(1000); - } - - channel.stop(); - channel.undeploy(); - - for (ConnectorMessage connectorMessage : dispatchResult.getProcessedMessage().getConnectorMessages().values()) { - boolean foundContent = false; - - for (ContentType contentType : ContentType.getMessageTypes()) { - MessageContent messageContent = connectorMessage.getMessageContent(contentType); - - if (messageContent != null && (messageContent.getMetaDataId() == 0 || messageContent.getContentType() != ContentType.RAW)) { - foundContent = true; - - if (removeContentOnCompletion) { - TestUtils.assertMessageContentDoesNotExist(messageContent); - } else { - TestUtils.assertMessageContentExists(messageContent); - } - } - } - - assertTrue(foundContent); - } - } - - @Test - public final void testContentStorageDevelopment() throws Exception { - testContentStorageSettings(TestUtils.getStorageSettings(MessageStorageMode.DEVELOPMENT)); - } - - @Test - public final void testContentStorageProduction() throws Exception { - testContentStorageSettings(TestUtils.getStorageSettings(MessageStorageMode.PRODUCTION)); - } - - @Test - public final void testContentStorageMetadata() throws Exception { - testContentStorageSettings(TestUtils.getStorageSettings(MessageStorageMode.METADATA)); - } - - @Test - public final void testContentStorageDisabled() throws Exception { - testContentStorageSettings(TestUtils.getStorageSettings(MessageStorageMode.DISABLED)); - } - - private void testContentStorageSettings(StorageSettings storageSettings) throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - channel.setStorageSettings(storageSettings); - SourceConnector sourceConnector = channel.getSourceConnector(); - - channel.deploy(); - channel.start(null); - - DispatchResult dispatchResult = sourceConnector.dispatchRawMessage(new RawMessage(testMessage)); - sourceConnector.finishDispatch(dispatchResult); - - channel.stop(); - channel.undeploy(); - - ConnectorMessage sourceMessage = dispatchResult.getProcessedMessage().getConnectorMessages().get(0); - ConnectorMessage destinationMessage = dispatchResult.getProcessedMessage().getConnectorMessages().get(1); - - assertNotNull(sourceMessage); - assertNotNull(destinationMessage); - - if (storageSettings.isStoreRaw()) { - TestUtils.assertMessageContentExists(sourceMessage.getRaw()); - } else { - TestUtils.assertMessageContentDoesNotExist(sourceMessage.getRaw()); - } - - if (storageSettings.isStoreProcessedRaw()) { - TestUtils.assertMessageContentExists(sourceMessage.getProcessedRaw()); - } else { - TestUtils.assertMessageContentDoesNotExist(sourceMessage.getProcessedRaw()); - } - - if (storageSettings.isStoreTransformed()) { - TestUtils.assertMessageContentExists(sourceMessage.getTransformed()); - TestUtils.assertMessageContentExists(destinationMessage.getTransformed()); - } else { - TestUtils.assertMessageContentDoesNotExist(sourceMessage.getTransformed()); - TestUtils.assertMessageContentDoesNotExist(destinationMessage.getTransformed()); - } - - if (storageSettings.isStoreSourceEncoded()) { - TestUtils.assertMessageContentExists(sourceMessage.getEncoded()); - } else { - TestUtils.assertMessageContentDoesNotExist(sourceMessage.getEncoded()); - } - - if (storageSettings.isStoreSent()) { - TestUtils.assertMessageContentExists(destinationMessage.getSent()); - } else { - TestUtils.assertMessageContentDoesNotExist(new MessageContent(channelId, dispatchResult.getMessageId(), 1, ContentType.SENT, null, null, false)); - } - - if (storageSettings.isStoreResponse()) { - TestUtils.assertMessageContentExists(destinationMessage.getResponse()); - } else { - TestUtils.assertMessageContentDoesNotExist(destinationMessage.getResponse()); - } - - if (storageSettings.isStoreResponseTransformed()) { - TestUtils.assertMessageContentExists(destinationMessage.getResponseTransformed()); - } else { - TestUtils.assertMessageContentDoesNotExist(destinationMessage.getResponseTransformed()); - } - - if (storageSettings.isStoreProcessedResponse()) { - TestUtils.assertMessageContentExists(destinationMessage.getProcessedResponse()); - } else { - TestUtils.assertMessageContentDoesNotExist(destinationMessage.getProcessedResponse()); - } - } + /* + * Replaced by the ci/tests/160-message-storage-levels fixtures (DEVELOPMENT, PRODUCTION, RAW + * and METADATA), MessageStorageDisabledTest (DISABLED) and the ci/tests/170-content-removal + * fixtures (removeContentOnCompletion, with and without a queued destination). + */ } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index 5a2b702819..bc6c02f7a2 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -7,6 +7,7 @@ import java.io.InputStream; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; +import java.time.Duration; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; @@ -28,6 +29,13 @@ public final class Harness { /** Statuses that mean the server has not finished with the message yet. */ private static final List PENDING_STATUSES = List.of(Status.PENDING, Status.QUEUED); + /** + * How long to keep retrying after the message looks terminal. Some work outruns the + * statuses: a channel with a queued destination and removeContentOnCompletion deletes + * its content in a transaction committed after the destination is already SENT. + */ + private static final Duration TERMINAL_GRACE = Duration.ofSeconds(5); + private Harness() { } @@ -63,9 +71,9 @@ public static void undeploy(String channelId) { /** * Submits {@code /source} (with {@code /source_sourcemap.yml} when * {@code hasSourceMap}) into the channel, then retries the named assertion files until - * they all hold or the message reaches a terminal state. Because the message is written - * asynchronously, an early poll can legitimately fail; only a failure that persists once - * the message is terminal is a real failure. + * they all hold or the message has been terminal for {@link #TERMINAL_GRACE}. Because the + * message is written asynchronously, an early poll can legitimately fail; only a failure + * that outlives the message's terminal state is a real failure. */ public static void runMessage(String channelId, String base, boolean hasSourceMap, String... assertionFiles) throws Exception { @@ -85,6 +93,7 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); AssertionError lastFailure = null; Message lastMessage = null; + long graceDeadline = 0; while (System.nanoTime() < deadline) { Message message = server().fetchMessage(channelId, messageId); if (message != null) { @@ -97,7 +106,11 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa } catch (AssertionError e) { lastFailure = e; if (isTerminal(message)) { - break; + if (graceDeadline == 0) { + graceDeadline = System.nanoTime() + TERMINAL_GRACE.toNanos(); + } else if (System.nanoTime() >= graceDeadline) { + break; + } } } } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index 2376a8514e..f63d3ad931 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -56,6 +56,8 @@ static void assertFixtureFile(Message message, String fileName, String content) switch (fileName) { case "source_status" -> assertStatus("source status", content, connector(message, SOURCE_META_DATA_ID, fileName).getStatus()); + case "source_raw" -> assertContent("source raw", content, + content(connector(message, SOURCE_META_DATA_ID, fileName).getRaw())); case "source_transformed" -> assertContent("source transformed", content, content(connector(message, SOURCE_META_DATA_ID, fileName).getTransformed())); case "source_encoded" -> assertContent("source encoded", content, diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageStorageDisabledTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageStorageDisabledTest.java new file mode 100644 index 0000000000..b85d86d151 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageStorageDisabledTest.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.LinkedHashMap; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.Message; + +/** + * {@code MessageStorageMode.DISABLED}, the one storage level that ci/tests/160-message-storage-levels + * cannot express. The channel is given a pass-through DAO, so no message row is ever written and + * there is no message for the fixture harness to retrieve and assert against. + */ +@DisplayName("160-message-storage-levels/05-disabled") +@TestInstance(PER_CLASS) +class MessageStorageDisabledTest { + + private static final String CHANNEL = "channels/message-storage-disabled.xml"; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void storesNoMessage() throws Exception { + OieServer server = SharedServer.get(); + long messageId = server.submitMessage(channelId, "Hello world!", new LinkedHashMap<>()); + Message stored = server.fetchMessage(channelId, messageId); + assertNull(stored, () -> "DISABLED storage wrote a row for message " + messageId); + } +} diff --git a/smoketest/src/test/resources/channels/message-storage-disabled.xml b/smoketest/src/test/resources/channels/message-storage-disabled.xml new file mode 100644 index 0000000000..8f720a2ba7 --- /dev/null +++ b/smoketest/src/test/resources/channels/message-storage-disabled.xml @@ -0,0 +1,191 @@ + + 8f1d2c40-1a11-4a1e-9f9b-2c0a5a4e1605 + 2 + message-storage-disabled + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DISABLED + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From 0c5d85d20864a95d699628c6f31e8313f59c3352 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 17:31:55 -0500 Subject: [PATCH 13/28] Translated DestinationChainTests to fixtures Signed-off-by: Mitch Gaffigan --- ci/tests/180-destination-chains/README.md | 24 + .../channels/01-map-propagation/channel.xml | 472 ++++++++++++++++++ .../01-maps-propagate/dest01_metadata.yml | 1 + .../messages/01-maps-propagate/dest01_status | 1 + .../01-maps-propagate/dest01_transformed | 1 + .../01-maps-propagate/dest02_metadata.yml | 1 + .../messages/01-maps-propagate/dest02_status | 1 + .../01-maps-propagate/dest02_transformed | 1 + .../01-maps-propagate/dest03_metadata.yml | 1 + .../messages/01-maps-propagate/dest03_status | 1 + .../01-maps-propagate/dest03_transformed | 1 + .../01-maps-propagate/dest04_metadata.yml | 1 + .../messages/01-maps-propagate/dest04_status | 1 + .../01-maps-propagate/dest04_transformed | 1 + .../messages/01-maps-propagate/source | 1 + .../messages/01-maps-propagate/source_status | 1 + .../donkey/test/DestinationChainTests.java | 264 ---------- 17 files changed, 510 insertions(+), 264 deletions(-) create mode 100644 ci/tests/180-destination-chains/README.md create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/channel.xml create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_metadata.yml create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_status create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_transformed create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_metadata.yml create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_status create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_transformed create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_metadata.yml create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_status create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_transformed create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_metadata.yml create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_status create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_transformed create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source create mode 100644 ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source_status delete mode 100644 donkey/src/test/java/com/mirth/connect/donkey/test/DestinationChainTests.java diff --git a/ci/tests/180-destination-chains/README.md b/ci/tests/180-destination-chains/README.md new file mode 100644 index 0000000000..f58b20c92b --- /dev/null +++ b/ci/tests/180-destination-chains/README.md @@ -0,0 +1,24 @@ +# 180-destination-chains + +Which maps a destination inherits, and from where. One RAW channel with four destinations; the third +has `waitForPrevious` false, so destinations 1-2 are one chain and destinations 3-4 another. The +source seeds `fromSource` in the channel and response maps, destination 1 adds `fromD1` to both, +destination 3 adds `fromD3` to the channel map, and each destination writes its own `cmN` to its +connector map. Every transformer renders what it can see *before* writing, so `destNN_transformed` +is a snapshot of what that destination inherited: + +| | d1 (chain A) | d2 (chain A) | d3 (chain B) | d4 (chain B) | +| --- | --- | --- | --- | --- | +| connector map `cm1` | absent | absent | absent | absent | +| channel map `fromSource` (`chS`) | S | S | S | S | +| channel map `fromD1` (`chD1`) | absent | **C1** | absent | absent | +| channel map `fromD3` (`chD3`) | absent | absent | absent | **C3** | +| response map `fromSource` (`rsS`) | present | present | present | present | +| response map `fromD1` (`rsD1`) | absent | **present** | absent | absent | + +Response map rows record only presence because the entry is stored as a serialised `Response`. The +bold cells are the only hand-off: channel and response maps pass to the next destination in the same +chain. Everything else comes from the source, because each chain starts afresh from the source +connector message, and `cm1` never propagates at all. + +`destNN_metadata.yml` asserts each `cmN` landed; `destNN_status` that both chains completed. diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/channel.xml b/ci/tests/180-destination-chains/channels/01-map-propagation/channel.xml new file mode 100644 index 0000000000..63d75a4f55 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/channel.xml @@ -0,0 +1,472 @@ + + 5b9c7d21-3e64-4a58-9d0b-71c4f2ae1800 + 5 + destination-chains-map-propagation + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Seed channel and response maps + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + + Observe maps + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + 2 + Destination 2 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + + Observe maps + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + 3 + Destination 3 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + + Observe maps + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + false + + + 4 + Destination 4 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + + Observe maps + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_metadata.yml b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_metadata.yml new file mode 100644 index 0000000000..dde8b8aea6 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_metadata.yml @@ -0,0 +1 @@ +cm1: v1 diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_status b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_transformed b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_transformed new file mode 100644 index 0000000000..28dec358ae --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest01_transformed @@ -0,0 +1 @@ +d1|cm1=-|chS=S|chD1=-|chD3=-|rsS=Y|rsD1=- \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_metadata.yml b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_metadata.yml new file mode 100644 index 0000000000..ee6e5ff9dd --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_metadata.yml @@ -0,0 +1 @@ +cm2: v2 diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_status b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_transformed b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_transformed new file mode 100644 index 0000000000..b623f23c1f --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest02_transformed @@ -0,0 +1 @@ +d2|cm1=-|chS=S|chD1=C1|chD3=-|rsS=Y|rsD1=Y \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_metadata.yml b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_metadata.yml new file mode 100644 index 0000000000..9996e604b7 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_metadata.yml @@ -0,0 +1 @@ +cm3: v3 diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_status b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_transformed b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_transformed new file mode 100644 index 0000000000..2899de4ece --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest03_transformed @@ -0,0 +1 @@ +d3|cm1=-|chS=S|chD1=-|chD3=-|rsS=Y|rsD1=- \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_metadata.yml b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_metadata.yml new file mode 100644 index 0000000000..7f47503033 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_metadata.yml @@ -0,0 +1 @@ +cm4: v4 diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_status b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_status new file mode 100644 index 0000000000..b09a037dd2 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_status @@ -0,0 +1 @@ +SENT diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_transformed b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_transformed new file mode 100644 index 0000000000..7acd204f9d --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/dest04_transformed @@ -0,0 +1 @@ +d4|cm1=-|chS=S|chD1=-|chD3=C3|rsS=Y|rsD1=- \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source new file mode 100644 index 0000000000..739a197dc8 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source @@ -0,0 +1 @@ +Hello chains! \ No newline at end of file diff --git a/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source_status b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/180-destination-chains/channels/01-map-propagation/messages/01-maps-propagate/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationChainTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationChainTests.java deleted file mode 100644 index 903f94d8b6..0000000000 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationChainTests.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * 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.assertTrue; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.ContentType; -import com.mirth.connect.donkey.model.message.Response; -import com.mirth.connect.donkey.model.message.Status; -import com.mirth.connect.donkey.server.Donkey; -import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.Channel; -import com.mirth.connect.donkey.server.channel.DestinationChainProvider; -import com.mirth.connect.donkey.server.channel.DispatchResult; -import com.mirth.connect.donkey.server.channel.FilterTransformerExecutor; -import com.mirth.connect.donkey.server.channel.FilterTransformerResult; -import com.mirth.connect.donkey.server.channel.MetaDataReplacer; -import com.mirth.connect.donkey.server.channel.components.FilterTransformerException; -import com.mirth.connect.donkey.server.controllers.ChannelController; -import com.mirth.connect.donkey.test.util.TestChannel; -import com.mirth.connect.donkey.test.util.TestConnectorProperties; -import com.mirth.connect.donkey.test.util.TestDataType; -import com.mirth.connect.donkey.test.util.TestDestinationConnector; -import com.mirth.connect.donkey.test.util.TestFilterTransformer; -import com.mirth.connect.donkey.test.util.TestPostProcessor; -import com.mirth.connect.donkey.test.util.TestPreProcessor; -import com.mirth.connect.donkey.test.util.TestResponseTransformer; -import com.mirth.connect.donkey.test.util.TestSourceConnector; -import com.mirth.connect.donkey.test.util.TestUtils; - -public class DestinationChainTests { - private static int TEST_SIZE = 10; - private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; - private static String serverId = TestUtils.DEFAULT_SERVER_ID; - private static String testMessage = TestUtils.TEST_HL7_MESSAGE; - private Logger logger = LogManager.getLogger(this.getClass()); - - @BeforeClass - final public static void beforeClass() throws StartException { - Donkey.getInstance().startEngine(TestUtils.getDonkeyTestConfiguration()); - } - - @AfterClass - final public static void afterClass() throws StartException { - Donkey.getInstance().stopEngine(); - } - - /* - * Create channel with two destination chains, two destination connectors each Set each - * destination connector's FilterTransformer to place values in the connector, channel, and - * response maps - * - * Send messages, and for each destination connector, assert that: - The transformed data was - * stored - The encoded data was stored - The connector message maps were all updated correctly - * - The connector message status was updated - */ - @Test - public final void testStoreData() throws Exception { - int numChains = 2; - int numDestinationsPerChain = 2; - long localChannelId = ChannelController.getInstance().getLocalChannelId(channelId); - - TestChannel channel = new TestChannel(); - - channel.setChannelId(channelId); - channel.setServerId(serverId); - - channel.setPreProcessor(new TestPreProcessor()); - channel.setPostProcessor(new TestPostProcessor()); - - TestSourceConnector sourceConnector = (TestSourceConnector) TestUtils.createDefaultSourceConnector(); - sourceConnector.setRespondAfterProcessing(true); - sourceConnector.setChannelId(channel.getChannelId()); - sourceConnector.setChannel(channel); - sourceConnector.setMetaDataReplacer(new MetaDataReplacer()); - - channel.setSourceConnector(sourceConnector); - channel.getSourceConnector().setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - class TestFilterTransformer2 extends TestFilterTransformer { - @Override - public FilterTransformerResult doFilterTransform(ConnectorMessage message) throws FilterTransformerException { - // Alter the connector message maps - message.getConnectorMap().put("key", "value"); - message.getChannelMap().put("key", "value"); - message.getResponseMap().put("key", new Response(Status.SENT, "value")); - return super.doFilterTransform(message); - } - } - - for (int i = 1; i <= numChains; i++) { - DestinationChainProvider chain = new DestinationChainProvider(); - chain.setChannelId(channel.getChannelId()); - - for (int j = 1; j <= numDestinationsPerChain; j++) { - int metaDataId = (i - 1) * numDestinationsPerChain + j; - TestDestinationConnector destinationConnector = (TestDestinationConnector) TestUtils.createDestinationConnector(channel.getChannelId(), channel.getServerId(), new TestConnectorProperties(), TestUtils.DEFAULT_DESTINATION_NAME, new TestDataType(), new TestDataType(), new TestResponseTransformer(), metaDataId); - destinationConnector.setChannelId(channel.getChannelId()); - - destinationConnector.setMetaDataReplacer(sourceConnector.getMetaDataReplacer()); - destinationConnector.setMetaDataColumns(channel.getMetaDataColumns()); - - FilterTransformerExecutor filterTransformerExecutor = new FilterTransformerExecutor(new TestDataType(), new TestDataType()); - filterTransformerExecutor.setFilterTransformer(new TestFilterTransformer2()); - - destinationConnector.setFilterTransformerExecutor(filterTransformerExecutor); - - chain.addDestination(metaDataId, destinationConnector); - } - - channel.addDestinationChainProvider(chain); - } - - channel.deploy(); - channel.start(null); - - if (ChannelController.getInstance().channelExists(channelId)) { - ChannelController.getInstance().deleteAllMessages(channelId); - } - - for (int i = 1; i <= TEST_SIZE; i++) { - DispatchResult messageResponse = ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - for (DestinationChainProvider chain : channel.getDestinationChainProviders()) { - for (int metaDataId : chain.getDestinationConnectors().keySet()) { - Connection connection = null; - PreparedStatement statement = null; - ResultSet result = null; - - try { - connection = TestUtils.getConnection(); - - // Assert that the transformed data was stored - statement = connection.prepareStatement("SELECT * FROM d_mc" + localChannelId + " WHERE message_id = ? AND metadata_id = ? AND content_type = ?"); - statement.setLong(1, messageResponse.getMessageId()); - statement.setInt(2, metaDataId); - statement.setInt(3, ContentType.TRANSFORMED.getContentTypeCode()); - result = statement.executeQuery(); - assertTrue(result.next()); - TestUtils.close(result); - - // Assert that the encoded data was stored - statement.setInt(3, ContentType.ENCODED.getContentTypeCode()); - result = statement.executeQuery(); - assertTrue(result.next()); - } finally { - TestUtils.close(result); - TestUtils.close(statement); - TestUtils.close(connection); - } - - // Assert that the connector message maps were updated - Map connectorMap = TestUtils.getConnectorMap(channel.getChannelId(), messageResponse.getMessageId(), metaDataId); - Map channelMap = TestUtils.getChannelMap(channel.getChannelId(), messageResponse.getMessageId(), metaDataId); - Map responseMap = TestUtils.getResponseMap(channel.getChannelId(), messageResponse.getMessageId(), metaDataId); - assertTrue(connectorMap.get("key").equals("value")); - assertTrue(channelMap.get("key").equals("value")); - assertTrue(responseMap.get("key").equals(new Response(Status.SENT, "value"))); - - // Assert that the connector message status was updated - TestUtils.assertConnectorMessageStatusEquals(channel.getChannelId(), messageResponse.getMessageId(), metaDataId, Status.SENT); - } - } - } - - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Create channel with two destination chains, two destination connectors each Set the source - * FilterTransformer to place values in the channel and response maps - * - * Send messages, and for each destination connector, assert that: - The connector message was - * stored - The channel and response maps were updated correctly - If the destination connector - * isn't the first one in the chain, the raw data was stored - If the destination connector is - * the first one in the chain, the source encoded data was stored - */ - @Test - public final void testCreateNextMessage() throws Exception { - long localChannelId = ChannelController.getInstance().getLocalChannelId(channelId); - Channel channel = TestUtils.createDefaultChannel(channelId, serverId, true, 2, 2); - - channel.getSourceConnector().getFilterTransformerExecutor().setFilterTransformer(new TestFilterTransformer() { - @Override - public FilterTransformerResult doFilterTransform(ConnectorMessage message) throws FilterTransformerException { - // Alter the channel and response maps - message.getChannelMap().put("key", "value"); - message.getResponseMap().put("key", new Response(Status.SENT, "value")); - return new FilterTransformerResult(false, null); - } - }); - - channel.deploy(); - channel.start(null); - Connection connection = null; - PreparedStatement statement = null; - ResultSet result = null; - - try { - connection = TestUtils.getConnection(); - - for (int i = 1; i <= TEST_SIZE; i++) { - DispatchResult messageResponse = ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - for (DestinationChainProvider chain : channel.getDestinationChainProviders()) { - for (int metaDataId : chain.getMetaDataIds()) { - // Assert that the connector message was stored - statement = connection.prepareStatement("SELECT * FROM d_mm" + localChannelId + " WHERE message_id = ? AND id = ?"); - statement.setLong(1, messageResponse.getMessageId()); - statement.setInt(2, metaDataId); - result = statement.executeQuery(); - assertTrue(result.next()); - result.close(); - statement.close(); - - // Assert that the channel and response maps were updated - Map channelMap = TestUtils.getChannelMap(channel.getChannelId(), messageResponse.getMessageId(), metaDataId); - Map responseMap = TestUtils.getResponseMap(channel.getChannelId(), messageResponse.getMessageId(), metaDataId); - assertTrue(channelMap.get("key").equals("value")); - assertTrue(responseMap.get("key").equals(new Response(Status.SENT, "value"))); - - // Assert that the raw data was stored - statement = connection.prepareStatement("SELECT * FROM d_mc" + localChannelId + " WHERE message_id = ? AND metadata_id = 0 AND content_type = ?"); - statement.setLong(1, messageResponse.getMessageId()); - statement.setInt(2, ContentType.ENCODED.getContentTypeCode()); - result = statement.executeQuery(); - assertTrue(result.next()); - result.close(); - statement.close(); - } - } - } - } finally { - TestUtils.close(result); - TestUtils.close(statement); - TestUtils.close(connection); - } - - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } -} From 0b1d461aa7ba38c8acae664b8576db7d82b24a50 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 18:00:42 -0500 Subject: [PATCH 14/28] Translate response tests to fixtures Signed-off-by: Mitch Gaffigan --- ci/README.md | 4 +- ci/tests/190-response-handling/README.md | 35 ++ .../01-respond-before-processing/channel.xml | 392 ++++++++++++++++++ .../01-filtered-still-acknowledged/source | 5 + .../source_response | 2 + .../source_status | 1 + .../channel.xml | 392 ++++++++++++++++++ .../messages/01-accepted/source | 5 + .../messages/01-accepted/source_response | 2 + .../messages/01-accepted/source_status | 1 + .../messages/02-filtered/source | 5 + .../messages/02-filtered/source_response | 2 + .../messages/02-filtered/source_status | 1 + .../channel.xml | 251 +++++++++++ .../dest01_response | 1 + .../dest02_response | 1 + .../01-second-destination-answers/source | 1 + .../source_response | 1 + .../04-response-transformer/channel.xml | 195 +++++++++ .../dest01_processed_response | 1 + .../dest01_response | 1 + .../dest01_status | 1 + .../01-rewrites-content-and-status/source | 1 + .../dest01_processed_response | 1 + .../dest01_processing_error | 4 + .../dest01_response | 1 + .../dest01_status | 1 + .../source | 1 + .../dest01_processed_response | 1 + .../dest01_response_error | 1 + .../dest01_status | 1 + .../03-queued-status-without-a-queue/source | 1 + .../05-respond-from-unknown-name/channel.xml | 182 ++++++++ .../01-no-response-is-stored/dest01_response | 1 + .../messages/01-no-response-is-stored/source | 1 + .../01-no-response-is-stored/source_response | 1 + .../test/DestinationConnectorTests.java | 79 +--- .../donkey/test/SourceConnectorTests.java | 132 +----- .../smoketest/Harness.java | 2 + .../smoketest/MessageAssertions.java | 14 +- 40 files changed, 1512 insertions(+), 213 deletions(-) create mode 100644 ci/tests/190-response-handling/README.md create mode 100644 ci/tests/190-response-handling/channels/01-respond-before-processing/channel.xml create mode 100644 ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source create mode 100644 ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_response create mode 100644 ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_status create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/channel.xml create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_response create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_status create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_response create mode 100644 ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_status create mode 100644 ci/tests/190-response-handling/channels/03-respond-from-named-destination/channel.xml create mode 100644 ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest01_response create mode 100644 ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest02_response create mode 100644 ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source create mode 100644 ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/channel.xml create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_processed_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_status create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/source create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processed_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processing_error create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_status create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/source create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_processed_response create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_response_error create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_status create mode 100644 ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/source create mode 100644 ci/tests/190-response-handling/channels/05-respond-from-unknown-name/channel.xml create mode 100644 ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/dest01_response create mode 100644 ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source create mode 100644 ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source_response diff --git a/ci/README.md b/ci/README.md index 55d586dbf6..9966df9e34 100644 --- a/ci/README.md +++ b/ci/README.md @@ -49,7 +49,9 @@ the payload sent to the channel. The other files are optional assertions: | `source_processing_error` | Processing error recorded against the source | | `destNN` | Sent payload for destination `NN` | | `destNN_transformed` | Transformed payload for destination `NN` | -| `destNN_response` | Response payload from destination `NN` | +| `destNN_response` | Response payload from destination `NN`, before its response transformer | +| `destNN_processed_response` | Response payload for destination `NN` after its response transformer | +| `destNN_processing_error` | Processing error recorded against destination `NN` | | `destNN_metadata.yml` | Selected metadata for destination `NN` | | `destNN_status` | Status for destination `NN` | diff --git a/ci/tests/190-response-handling/README.md b/ci/tests/190-response-handling/README.md new file mode 100644 index 0000000000..900985ed68 --- /dev/null +++ b/ci/tests/190-response-handling/README.md @@ -0,0 +1,35 @@ +# 190-response-handling + +Where the response a channel hands back comes from, and what a destination's response transformer +can do to it. `Auto-generate (Destinations completed)` is covered by 110 and `Postprocessor` by 140, +so the channels here take the remaining "Respond from" choices plus the response transformer. + +- `01-respond-before-processing` - the 110 HL7 channel responding with + `Auto-generate (Before processing)` and a source filter that rejects ADT^A08. The one message is + an A08, so `source_status` is FILTERED while `source_response` is still an `MSA|AA` ACK: this + setting answers with an assumed RECEIVED status before the message is processed at all. +- `02-respond-after-source-transformer` - the same channel and filter responding with + `Auto-generate (After source transformer)`, which takes the source connector message's own status. + `01-accepted` is TRANSFORMED and gets `MSA|AA`; `02-filtered` is the same A08 as channel 01 and + gets `MSA|AR|Message Rejected.` from the rejected-ACK settings. The contrast with channel 01 is + the point of both channels. +- `03-respond-from-named-destination` - a RAW channel with two JavaScript Writers that answer + `first destination answered` and `second destination answered`, responding from `d2`. A named + destination's "Respond from" value is the response map key `d`, not the connector + name. `source_response` is destination 2's answer and `dest01_response` is destination 1's, so the + fixture would fail if the engine took the first, the last, or a merged response. +- `04-response-transformer` - a RAW channel whose one JavaScript Writer echoes the payload back, + behind a response transformer that rewrites the content and sets `responseStatus`. + - `01-rewrites-content-and-status` - `dest01_response` is the connector's original `rewrite-me`, + `dest01_processed_response` the rewritten `rewritten`, and `dest01_status` ERROR. + The send itself succeeded, so the status comes from the transformer alone. + - `02-transformer-error-fails-the-destination` - the payload `boom` makes the transformer throw. + The connector's response is still stored, no processed response is (`((NONE))`), the destination + is ERROR, and `dest01_processing_error` records the thrown message. + - `03-queued-status-without-a-queue` - the transformer asks for QUEUED on a destination whose + queue is off. The content is still rewritten, but the status is forced to ERROR and + `dest01_response_error` carries the engine's explanation. +- `05-respond-from-unknown-name` - the same RAW channel with one JavaScript Writer, responding from + `d9`, which no destination owns. The destination answers (`dest01_response`) but nothing is + selected, so `source_response` is `((NONE))`: an unresolvable name yields no response rather than + falling back to another one. diff --git a/ci/tests/190-response-handling/channels/01-respond-before-processing/channel.xml b/ci/tests/190-response-handling/channels/01-respond-before-processing/channel.xml new file mode 100644 index 0000000000..27c36b4fbe --- /dev/null +++ b/ci/tests/190-response-handling/channels/01-respond-before-processing/channel.xml @@ -0,0 +1,392 @@ + + b1f0a6d2-3c4e-4a71-9d18-0e5b2c7a4411 + 2 + response-before-processing + + 1 + + 0 + sourceConnector + + + + Auto-generate (Before processing) + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Reject A08 + 0 + true + NONE + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source new file mode 100644 index 0000000000..9dea16ee69 --- /dev/null +++ b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source @@ -0,0 +1,5 @@ +MSH|^~\&|Destination|Some Other App|Ehrsource|Or|202405221430||ADT^A08|Msgid88888|P|2.3| +EVN|A08|202405221430|| +PID|1|222333^^^2^MRN2|888777||Smith^Alice^^^^||19850412|F||Bl|456 Other St^^There^Or^97201^Usa||(503)555-1234|||S|Cat|111222333| +NK1|1|Smith^Robert^|Husband||(503)555-6789||||NK^Next Of Kin +PV1|1|I|3003^4004^02||||654321^Surgeon^Sarah^L^^Dr|||||||Emr|B1| diff --git a/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_response b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_response new file mode 100644 index 0000000000..799b564e0c --- /dev/null +++ b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_response @@ -0,0 +1,2 @@ +MSH|^~\&|Ehrsource|Or|Destination|Some Other App|((ANY))||ACK|((ANY))|P|2.3 +MSA|AA|Msgid88888 diff --git a/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_status b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_status new file mode 100644 index 0000000000..07e2ca686e --- /dev/null +++ b/ci/tests/190-response-handling/channels/01-respond-before-processing/messages/01-filtered-still-acknowledged/source_status @@ -0,0 +1 @@ +FILTERED \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/channel.xml b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/channel.xml new file mode 100644 index 0000000000..0a1c86f0da --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/channel.xml @@ -0,0 +1,392 @@ + + c2a1b7e3-4d5f-4b82-8e29-1f6c3d8b5522 + 2 + response-after-source-transformer + + 1 + + 0 + sourceConnector + + + + Auto-generate (After source transformer) + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Reject A08 + 0 + true + NONE + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + HL7V2 + HL7V2 + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + false + false + false + \r + true + + + false + false + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source new file mode 100644 index 0000000000..aa0a7adef1 --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source @@ -0,0 +1,5 @@ +MSH|^~\&|Destination|Some Other App|Ehrsource|Or|202405221430||ADT^A01|Msgid99999|P|2.3| +EVN|A01|202405221430|| +PID|1|222333^^^2^MRN2|888777||Smith^Alice^^^^||19850412|F||Bl|456 Other St^^There^Or^97201^Usa||(503)555-1234|||S|Cat|111222333| +NK1|1|Smith^Robert^|Husband||(503)555-6789||||NK^Next Of Kin +PV1|1|I|3003^4004^02||||654321^Surgeon^Sarah^L^^Dr|||||||Emr|B1| diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_response b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_response new file mode 100644 index 0000000000..d0124944af --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_response @@ -0,0 +1,2 @@ +MSH|^~\&|Ehrsource|Or|Destination|Some Other App|((ANY))||ACK|((ANY))|P|2.3 +MSA|AA|Msgid99999 diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_status b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/01-accepted/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source new file mode 100644 index 0000000000..9dea16ee69 --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source @@ -0,0 +1,5 @@ +MSH|^~\&|Destination|Some Other App|Ehrsource|Or|202405221430||ADT^A08|Msgid88888|P|2.3| +EVN|A08|202405221430|| +PID|1|222333^^^2^MRN2|888777||Smith^Alice^^^^||19850412|F||Bl|456 Other St^^There^Or^97201^Usa||(503)555-1234|||S|Cat|111222333| +NK1|1|Smith^Robert^|Husband||(503)555-6789||||NK^Next Of Kin +PV1|1|I|3003^4004^02||||654321^Surgeon^Sarah^L^^Dr|||||||Emr|B1| diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_response b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_response new file mode 100644 index 0000000000..15eab366be --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_response @@ -0,0 +1,2 @@ +MSH|^~\&|Ehrsource|Or|Destination|Some Other App|((ANY))||ACK|((ANY))|P|2.3 +MSA|AR|Msgid88888|Message Rejected. diff --git a/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_status b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_status new file mode 100644 index 0000000000..07e2ca686e --- /dev/null +++ b/ci/tests/190-response-handling/channels/02-respond-after-source-transformer/messages/02-filtered/source_status @@ -0,0 +1 @@ +FILTERED \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/03-respond-from-named-destination/channel.xml b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/channel.xml new file mode 100644 index 0000000000..bf801ff6a4 --- /dev/null +++ b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/channel.xml @@ -0,0 +1,251 @@ + + d3b2c8f4-5e60-4c93-9f3a-206d4e9c6633 + 3 + response-from-named-destination + + 1 + + 0 + sourceConnector + + + + d2 + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + 2 + Destination 2 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest01_response b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest01_response new file mode 100644 index 0000000000..6bf35c2da2 --- /dev/null +++ b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest01_response @@ -0,0 +1 @@ +first destination answered \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest02_response b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest02_response new file mode 100644 index 0000000000..5f82bc5836 --- /dev/null +++ b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/dest02_response @@ -0,0 +1 @@ +second destination answered \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source new file mode 100644 index 0000000000..518f936d6d --- /dev/null +++ b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source @@ -0,0 +1 @@ +pick-the-named-destination \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source_response b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source_response new file mode 100644 index 0000000000..5f82bc5836 --- /dev/null +++ b/ci/tests/190-response-handling/channels/03-respond-from-named-destination/messages/01-second-destination-answers/source_response @@ -0,0 +1 @@ +second destination answered \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/channel.xml b/ci/tests/190-response-handling/channels/04-response-transformer/channel.xml new file mode 100644 index 0000000000..ece279b6da --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/channel.xml @@ -0,0 +1,195 @@ + + e4c3d9a5-6f71-4da4-8a4b-317e5f0d7744 + 2 + response-transformer + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Rewrite the response + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_processed_response b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_processed_response new file mode 100644 index 0000000000..100ed092d4 --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_processed_response @@ -0,0 +1 @@ +rewritten \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_response b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_response new file mode 100644 index 0000000000..537a9eaf7e --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_response @@ -0,0 +1 @@ +rewrite-me \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_status b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/dest01_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/source b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/source new file mode 100644 index 0000000000..537a9eaf7e --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/01-rewrites-content-and-status/source @@ -0,0 +1 @@ +rewrite-me \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processed_response b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processed_response new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processed_response @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processing_error b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processing_error new file mode 100644 index 0000000000..3c6126e58f --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_processing_error @@ -0,0 +1,4 @@ +Response Transformer error +ERROR MESSAGE: Error evaluating response transformer +((ANY))DETAILS: the response transformer refused this response +((ANY)) \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_response b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_response new file mode 100644 index 0000000000..2e166c8e94 --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_response @@ -0,0 +1 @@ +boom \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_status b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/dest01_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/source b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/source new file mode 100644 index 0000000000..2e166c8e94 --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/02-transformer-error-fails-the-destination/source @@ -0,0 +1 @@ +boom \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_processed_response b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_processed_response new file mode 100644 index 0000000000..68601d9bdb --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_processed_response @@ -0,0 +1 @@ +rewritten \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_response_error b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_response_error new file mode 100644 index 0000000000..81975b705d --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_response_error @@ -0,0 +1 @@ +Invalid response status. Cannot set status to QUEUED while queuing is disabled. Status updated to ERROR. \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_status b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/dest01_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/source b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/source new file mode 100644 index 0000000000..3f8cd74914 --- /dev/null +++ b/ci/tests/190-response-handling/channels/04-response-transformer/messages/03-queued-status-without-a-queue/source @@ -0,0 +1 @@ +queue-me \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/channel.xml b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/channel.xml new file mode 100644 index 0000000000..deb6ae0bed --- /dev/null +++ b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/channel.xml @@ -0,0 +1,182 @@ + + f5d4ea16-7082-4eb5-9b5c-428f601e8855 + 2 + response-from-unknown-name + + 1 + + 0 + sourceConnector + + + + d9 + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/dest01_response b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/dest01_response new file mode 100644 index 0000000000..471e51e821 --- /dev/null +++ b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/dest01_response @@ -0,0 +1 @@ +the destination answered \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source new file mode 100644 index 0000000000..7e77c51412 --- /dev/null +++ b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source @@ -0,0 +1 @@ +no-one-to-respond-from \ No newline at end of file diff --git a/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source_response b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source_response new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/190-response-handling/channels/05-respond-from-unknown-name/messages/01-no-response-is-stored/source_response @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java index 1bac478ccd..c6c08aab1c 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java @@ -16,7 +16,6 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.util.Map; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -26,16 +25,13 @@ import com.mirth.connect.donkey.model.channel.ConnectorProperties; import com.mirth.connect.donkey.model.channel.DeployedState; import com.mirth.connect.donkey.model.channel.DestinationConnectorProperties; -import com.mirth.connect.donkey.model.channel.DestinationConnectorPropertiesInterface; import com.mirth.connect.donkey.model.message.ConnectorMessage; import com.mirth.connect.donkey.model.message.ContentType; -import com.mirth.connect.donkey.model.message.MessageContent; import com.mirth.connect.donkey.model.message.RawMessage; import com.mirth.connect.donkey.model.message.Response; import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.channel.DestinationChainProvider; import com.mirth.connect.donkey.server.channel.DestinationConnector; import com.mirth.connect.donkey.server.channel.DispatchResult; @@ -50,7 +46,6 @@ import com.mirth.connect.donkey.test.util.TestResponseTransformer; import com.mirth.connect.donkey.test.util.TestSourceConnector; import com.mirth.connect.donkey.test.util.TestUtils; -import com.mirth.connect.donkey.util.Serializer; public class DestinationConnectorTests { private static int TEST_SIZE = 10; @@ -514,77 +509,7 @@ public void run() { } /* - * Create new channel where the response transformer changes the message and status of the - * Response object If the response status was changed to QUEUED and queuing is not enabled, or - * if the status was changed to something invalid (RECEIVED/TRANSFORMED/PENDING), then assume - * that it was changed to ERROR - * - * Send messages, assert that: - The processed response was stored - The destination entry in - * the response map was overwritten - The connector message status was changed based on the - * response status - * - * Do the above steps for all statuses + * testRunResponseTransformer is re-implemented as CI fixtures in + * ci/tests/190-response-handling. */ - @Test - public final void testRunResponseTransformer() throws Exception { - for (Status status : Status.values()) { - testRunResponseTransformer(status); - } - } - - private void testRunResponseTransformer(Status responseStatus) throws Exception { - final Response testResponse = new Response(responseStatus, TestUtils.TEST_HL7_ACK); - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - Response finalResponse = new Response(testResponse.getStatus(), testResponse.getMessage()); - if (finalResponse.getStatus() != Status.ERROR && finalResponse.getStatus() != Status.SENT && finalResponse.getStatus() != Status.QUEUED) { - // If the response is invalid for a final destination finalResponse.getStatus(), change the status to ERROR - finalResponse.setStatus(Status.ERROR); - } else if (channel.getDestinationConnector(1).getConnectorProperties() instanceof DestinationConnectorPropertiesInterface) { - // If the destination connector isn't queuing, and the response status is QUEUED, then it should have changed to ERROR - DestinationConnectorProperties destinationConnectorProperties = ((DestinationConnectorPropertiesInterface) channel.getDestinationConnector(1).getConnectorProperties()).getDestinationConnectorProperties(); - if ((destinationConnectorProperties == null || !destinationConnectorProperties.isQueueEnabled()) && finalResponse.getStatus() == Status.QUEUED) { - finalResponse.setStatus(Status.ERROR); - } - } else if (finalResponse.getStatus() == Status.QUEUED) { - // If the destination connector isn't queuing, and the response status is QUEUED, then it should have changed to ERROR - finalResponse.setStatus(Status.ERROR); - } - - class TestResponseTransformer2 extends TestResponseTransformer { - @Override - public String doTransform(Response response, ConnectorMessage connectorMessage) throws DonkeyException, InterruptedException { - response.setMessage(testResponse.getMessage()); - response.setStatus(testResponse.getStatus()); - connectorMessage.getResponseTransformed().setContent(testResponse.getMessage()); - return super.doTransform(response, connectorMessage); - } - } - channel.getDestinationConnector(1).getResponseTransformerExecutor().setResponseTransformer(new TestResponseTransformer2()); - - //ChannelController.getInstance().deleteAllMessages(channel.getChannelId()); - channel.deploy(); - channel.start(null); - - for (int i = 1; i <= TEST_SIZE; i++) { - DispatchResult messageResponse = ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - Serializer serializer = Donkey.getInstance().getSerializer(); - String responseString = serializer.serialize(finalResponse); - - // Assert that the processed response was stored - MessageContent messageContent = new MessageContent(channel.getChannelId(), messageResponse.getMessageId(), 1, ContentType.PROCESSED_RESPONSE, responseString, null, false); - TestUtils.assertMessageContentExists(messageContent); - - // Assert that the entry in the response map was overwritten - Map responseMap = TestUtils.getResponseMap(channel.getChannelId(), messageResponse.getMessageId(), 1); - assertTrue(responseMap.get("d1").equals(finalResponse)); - - // Assert that the message status was changed - TestUtils.assertConnectorMessageStatusEquals(channel.getChannelId(), messageResponse.getMessageId(), 1, finalResponse.getStatus()); - } - - channel.stop(); - channel.undeploy(); - //ChannelController.getInstance().removeChannel(channel.getChannelId()); - } } diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/SourceConnectorTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/SourceConnectorTests.java index c4c8560167..1d414afe86 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/SourceConnectorTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/SourceConnectorTests.java @@ -21,7 +21,6 @@ import com.mirth.connect.donkey.model.channel.SourceConnectorProperties; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.RawMessage; -import com.mirth.connect.donkey.model.message.Response; import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; @@ -157,134 +156,7 @@ public final void testHandleRawMessage() throws Exception { } /* - * Deploy a new channel, send messages, assert that: - The message was stored in the database - - * The MessageResponse returned is not null - The response is null - The source connector - * response was not stored - * - * Call storeMessageResponse using a null MessageResponse assert: - The source connector - * response was not stored - * - * Call storeMessageResponse using the returned MessageResponse, assert: - The source connector - * response was not stored - * - * Modify the MessageResponse, creating/setting a new Response object Call storeMessageResponse - * using the returned MessageResponse, assert: - The source connector response was stored - */ - @Test - public final void testStoreMessageResponse() throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - - TestSourceConnector sourceConnector = (TestSourceConnector) channel.getSourceConnector(); - sourceConnector.setRespondAfterProcessing(true); - channel.getResponseSelector().setRespondFromName(SourceConnectorProperties.RESPONSE_SOURCE_TRANSFORMED); - - channel.deploy(); - channel.start(null); - - for (int i = 1; i <= TEST_SIZE; i++) { - RawMessage rawMessage = new RawMessage(testMessage); - DispatchResult dispatchResult = null; - - try { - dispatchResult = sourceConnector.dispatchRawMessage(rawMessage); - dispatchResult.setAttemptedResponse(true); - - if (dispatchResult.getSelectedResponse() != null) { - dispatchResult.getSelectedResponse().setMessage("response"); - } - } finally { - sourceConnector.finishDispatch(dispatchResult); - } - - if (dispatchResult != null) { - sourceConnector.getMessageIds().add(dispatchResult.getMessageId()); - } - - // Assert that the message was created - Message message = new Message(); - message.setChannelId(channel.getChannelId()); - message.setMessageId(dispatchResult.getMessageId()); - message.setServerId(channel.getServerId()); - message.setProcessed(true); - TestUtils.assertMessageExists(message, false); - - // Assert that the message response is not null - assertNotNull(dispatchResult); - - // Assert that the response is not null - assertNotNull(dispatchResult.getSelectedResponse()); - - // Assert that the source connector response was created - TestUtils.assertResponseExists(channel.getChannelId(), dispatchResult.getMessageId()); - } - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Deploys and starts a channel, sets the source respond-from name to - * RESPONSE_SOURCE_TRANSFORMED, sends messages, and asserts that: - Each response returned is - * TRANSFORMED - TEST_SIZE messages are processed - * - * Then sets the source respond-from name to RESPONSE_DESTINATIONS_COMPLETED, sends messages, - * and asserts that: - Each response returned is SENT - 2*TEST_SIZE messages are processed - * - * Then sets the source respond-from name to the destination name, sends messages, and asserts - * that: - Each response returned is SENT - 3*TEST_SIZE messages are processed - * - * Then sets the source respond-from name to an invalid destination name, sends messages, and - * asserts that: - Each response returned is null - 4*TEST_SIZE messages are processed + * testStoreMessageResponse and testGetResponse are re-implemented as CI fixtures in + * ci/tests/190-response-handling. */ - @Test - public final void testGetResponse() throws Exception { - String destinationName = TestUtils.DEFAULT_DESTINATION_NAME; - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - TestSourceConnector sourceConnector = (TestSourceConnector) channel.getSourceConnector(); - Response response = null; - - channel.deploy(); - channel.start(null); - - channel.getResponseSelector().setRespondFromName(SourceConnectorProperties.RESPONSE_SOURCE_TRANSFORMED); - - for (int i = 0; i < TEST_SIZE; i++) { - response = sourceConnector.readTestMessage(testMessage).getSelectedResponse(); - assertEquals(Status.TRANSFORMED, response.getStatus()); - } - - assertEquals(TEST_SIZE, channel.getNumMessages()); - - channel.getResponseSelector().setRespondFromName(SourceConnectorProperties.RESPONSE_DESTINATIONS_COMPLETED); - - for (int i = 0; i < TEST_SIZE; i++) { - response = sourceConnector.readTestMessage(testMessage).getSelectedResponse(); - assertEquals(Status.SENT, response.getStatus()); - } - - assertEquals(TEST_SIZE * 2, channel.getNumMessages()); - - channel.getResponseSelector().setRespondFromName("d1"); - - for (int i = 0; i < TEST_SIZE; i++) { - response = sourceConnector.readTestMessage(testMessage).getSelectedResponse(); - assertEquals(Status.SENT, response.getStatus()); - } - - assertEquals(TEST_SIZE * 3, channel.getNumMessages()); - - channel.getResponseSelector().setRespondFromName(destinationName + "lolwut"); - - for (int i = 0; i < TEST_SIZE; i++) { - response = sourceConnector.readTestMessage(testMessage).getSelectedResponse(); - assertEquals(null, response); - } - - assertEquals(TEST_SIZE * 4, channel.getNumMessages()); - - channel.stop(); - channel.undeploy(); - } } \ No newline at end of file diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index bc6c02f7a2..6a1729e221 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -172,6 +172,8 @@ private static String describe(Message message) { appendContent(detail, "encoded", connectorMessage.getEncoded()); appendContent(detail, "sent", connectorMessage.getSent()); appendContent(detail, "response", connectorMessage.getResponse()); + appendContent(detail, "responseTransformed", connectorMessage.getResponseTransformed()); + appendContent(detail, "processedResponse", connectorMessage.getProcessedResponse()); detail.append("\n connectorMap=").append(connectorMessage.getConnectorMap()) .append("\n metaDataMap=").append(connectorMessage.getMetaDataMap()); if (connectorMessage.getProcessingError() != null) { diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index f63d3ad931..3dd5da75a0 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -38,7 +38,8 @@ final class MessageAssertions { private static final Pattern RESPONSE_ENVELOPE = Pattern.compile("^\\s*].*", Pattern.DOTALL); /** Destination assertion files are {@code dest} plus an optional suffix. */ - private static final Pattern DEST_NAME = Pattern.compile("dest(\\d+)(_transformed|_response|_status|_metadata\\.yml)?"); + private static final Pattern DEST_NAME = Pattern.compile( + "dest(\\d+)(_transformed|_response|_processed_response|_processing_error|_response_error|_status|_metadata\\.yml)?"); /** Source connector metadata id; destination N is metadata id N. */ private static final int SOURCE_META_DATA_ID = 0; @@ -65,7 +66,7 @@ static void assertFixtureFile(Message message, String fileName, String content) case "source_processing_error" -> assertContent("source processing error", content, connector(message, SOURCE_META_DATA_ID, fileName).getProcessingError()); case "source_response" -> assertResponse("source response", content, - connector(message, SOURCE_META_DATA_ID, fileName)); + connector(message, SOURCE_META_DATA_ID, fileName).getResponse()); case "source_metadata.yml" -> assertMetadata("source_metadata.yml", parseYamlMap(content), connector(message, SOURCE_META_DATA_ID, fileName)); default -> assertDestination(message, fileName, content); @@ -85,7 +86,10 @@ private static void assertDestination(Message message, String fileName, String c switch (suffix) { case "" -> assertContent(fileName, content, content(destination.getSent())); case "_transformed" -> assertContent(fileName, content, content(destination.getTransformed())); - case "_response" -> assertResponse(fileName, content, destination); + case "_response" -> assertResponse(fileName, content, destination.getResponse()); + case "_processed_response" -> assertResponse(fileName, content, destination.getProcessedResponse()); + case "_processing_error" -> assertContent(fileName, content, destination.getProcessingError()); + case "_response_error" -> assertContent(fileName, content, destination.getResponseError()); case "_status" -> assertStatus(fileName, content, destination.getStatus()); case "_metadata.yml" -> assertMetadata(fileName, parseYamlMap(content), destination); default -> throw new IllegalStateException("Unhandled fixture suffix: " + suffix); @@ -128,8 +132,8 @@ private static void assertContent(String label, String expected, String actual) * fixture actually describes. Line endings are normalised because HL7 acknowledgements * come back CR-delimited while the fixture files are LF-delimited. */ - private static void assertResponse(String label, String expected, ConnectorMessage connectorMessage) { - String stored = content(connectorMessage.getResponse()); + private static void assertResponse(String label, String expected, MessageContent responseContent) { + String stored = content(responseContent); String actual = stored; if (stored != null && RESPONSE_ENVELOPE.matcher(stored).matches()) { Response response = ObjectXMLSerializer.getInstance().deserialize(stored.trim(), Response.class); From cc90f18def52fbf2412db43aa004ab524ec1bf88 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 19:03:14 -0500 Subject: [PATCH 15/28] Translate testAfterSend to fixture test Signed-off-by: Mitch Gaffigan --- ci/tests/190-response-handling/README.md | 5 + .../test/DestinationConnectorTests.java | 160 +------------- .../BlockingResponseTransformerTest.java | 82 ++++++++ .../smoketest/Harness.java | 36 +++- .../smoketest/MessageAssertions.java | 17 +- .../smoketest/OieServer.java | 13 ++ .../blocking-response-transformer.xml | 199 ++++++++++++++++++ 7 files changed, 347 insertions(+), 165 deletions(-) create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/BlockingResponseTransformerTest.java create mode 100644 smoketest/src/test/resources/channels/blocking-response-transformer.xml diff --git a/ci/tests/190-response-handling/README.md b/ci/tests/190-response-handling/README.md index 900985ed68..3cc3346dcb 100644 --- a/ci/tests/190-response-handling/README.md +++ b/ci/tests/190-response-handling/README.md @@ -33,3 +33,8 @@ so the channels here take the remaining "Respond from" choices plus the response `d9`, which no destination owns. The destination answers (`dest01_response`) but nothing is selected, so `source_response` is `((NONE))`: an unresolvable name yields no response rather than falling back to another one. + +The sixth case in this theme is a Java test, `smoketest` `BlockingResponseTransformerTest`: a +destination whose response transformer has not returned yet sits at PENDING with its sent content +already stored. The fixture harness retries until the message is terminal, so it cannot see that +status. Its channel lives in `smoketest/src/test/resources/channels/`. diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java index c6c08aab1c..a06ad092ed 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DestinationConnectorTests.java @@ -21,14 +21,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mirth.connect.donkey.model.DonkeyException; import com.mirth.connect.donkey.model.channel.ConnectorProperties; import com.mirth.connect.donkey.model.channel.DeployedState; import com.mirth.connect.donkey.model.channel.DestinationConnectorProperties; -import com.mirth.connect.donkey.model.message.ConnectorMessage; import com.mirth.connect.donkey.model.message.ContentType; -import com.mirth.connect.donkey.model.message.RawMessage; -import com.mirth.connect.donkey.model.message.Response; import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; @@ -43,7 +39,6 @@ import com.mirth.connect.donkey.test.util.TestDispatcherProperties; import com.mirth.connect.donkey.test.util.TestPostProcessor; import com.mirth.connect.donkey.test.util.TestPreProcessor; -import com.mirth.connect.donkey.test.util.TestResponseTransformer; import com.mirth.connect.donkey.test.util.TestSourceConnector; import com.mirth.connect.donkey.test.util.TestUtils; @@ -359,157 +354,8 @@ private void testProcess(boolean queueNull, boolean queueEnabled, boolean queueS } /* - * Create channel where the response transformer blocks the thread Send messages in asynchronous - * thread (so that the response transformer is waiting), assert that: - The destination - * connector response content was stored - The message status was updated to PENDING in the - * database - * - * Then allow the response transformer to finish, join the thread, and assert: - The response - * transformer was successfully run - The message status was updated to SENT in the database - */ - @Test - public final void testAfterSend() throws Exception { - ChannelController.getInstance().getLocalChannelId(channelId); - - final TestChannel channel = new TestChannel(); - - channel.setChannelId(channelId); - channel.setServerId(serverId); - - channel.setPreProcessor(new TestPreProcessor()); - channel.setPostProcessor(new TestPostProcessor()); - - final TestSourceConnector sourceConnector = (TestSourceConnector) TestUtils.createDefaultSourceConnector(); - sourceConnector.setChannelId(channel.getChannelId()); - sourceConnector.setChannel(channel); - channel.setSourceConnector(sourceConnector); - channel.getSourceConnector().setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - final ConnectorProperties connectorProperties = new TestDispatcherProperties(); - ((TestDispatcherProperties) connectorProperties).getDestinationConnectorProperties().setQueueEnabled(true); - ((TestDispatcherProperties) connectorProperties).getDestinationConnectorProperties().setSendFirst(true); - ((TestDispatcherProperties) connectorProperties).getDestinationConnectorProperties().setRegenerateTemplate(true); - - final DestinationConnector destinationConnector = new TestDispatcher(); - TestUtils.initDefaultDestinationConnector(destinationConnector, connectorProperties); - destinationConnector.setChannelId(channelId); - ((TestDispatcher) destinationConnector).setReturnStatus(Status.SENT); - - class BlockingTestResponseTransformer extends TestResponseTransformer { - public volatile boolean waiting = true; - - @Override - public String doTransform(Response response, ConnectorMessage connectorMessage) throws DonkeyException, InterruptedException { - while (waiting) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - return super.doTransform(response, connectorMessage); - } - } - final BlockingTestResponseTransformer responseTransformer = new BlockingTestResponseTransformer(); - - destinationConnector.setMetaDataReplacer(sourceConnector.getMetaDataReplacer()); - destinationConnector.setMetaDataColumns(channel.getMetaDataColumns()); - destinationConnector.setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - destinationConnector.setResponseTransformerExecutor(TestUtils.createDefaultResponseTransformerExecutor()); - destinationConnector.getResponseTransformerExecutor().setResponseTransformer(responseTransformer); - - DestinationChainProvider chain = new DestinationChainProvider(); - chain.setChannelId(channelId); - chain.addDestination(1, destinationConnector); - channel.addDestinationChainProvider(chain); - - if (ChannelController.getInstance().channelExists(channelId)) { - ChannelController.getInstance().deleteAllMessages(channelId); - } - - channel.deploy(); - channel.start(null); - - class TempClass { - public long messageId; - } - final TempClass tempClass = new TempClass(); - - for (int i = 1; i <= TEST_SIZE; i++) { - responseTransformer.waiting = true; - - Thread thread = new Thread() { - @Override - public void run() { - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId()).getConnectorMessages().get(0); - tempClass.messageId = sourceMessage.getMessageId(); - - try { - channel.process(sourceMessage, false); - } catch (InterruptedException e) { - throw new AssertionError(e); - } - } - }; - thread.start(); - - Thread.sleep(100); - // Assert that the response content was stored - Connection connection = null; - PreparedStatement statement = null; - ResultSet result = null; - - try { - connection = TestUtils.getConnection(); - long localChannelId = ChannelController.getInstance().getLocalChannelId(channelId); - statement = connection.prepareStatement("SELECT * FROM d_mc" + localChannelId + " WHERE message_id = ? AND metadata_id = ? AND content_type = ?"); - statement.setLong(1, tempClass.messageId); - statement.setInt(2, 1); - statement.setInt(3, ContentType.SENT.getContentTypeCode()); - result = statement.executeQuery(); - assertTrue(result.next()); - result.close(); - statement.close(); - - // Assert that the message status was updated to PENDING - statement = connection.prepareStatement("SELECT * FROM d_mm" + localChannelId + " WHERE message_id = ? AND id = ? AND status = ?"); - statement.setLong(1, tempClass.messageId); - statement.setInt(2, 1); - statement.setString(3, String.valueOf(Status.PENDING.getStatusCode())); - result = statement.executeQuery(); - assertTrue(result.next()); - result.close(); - statement.close(); - - responseTransformer.waiting = false; - thread.join(); - - // Assert that the response transformer was run - assertTrue(responseTransformer.isTransformed()); - - // Assert that the message status was updated to SENT - statement = connection.prepareStatement("SELECT * FROM d_mm" + localChannelId + " WHERE message_id = ? AND id = ? AND status = ?"); - statement.setLong(1, tempClass.messageId); - statement.setInt(2, 1); - statement.setString(3, String.valueOf(Status.SENT.getStatusCode())); - result = statement.executeQuery(); - assertTrue(result.next()); - result.close(); - statement.close(); - } finally { - TestUtils.close(result); - TestUtils.close(statement); - TestUtils.close(connection); - } - } - - channel.stop(); - channel.undeploy(); - //ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * testRunResponseTransformer is re-implemented as CI fixtures in - * ci/tests/190-response-handling. + * testAfterSend and testRunResponseTransformer are re-implemented against the CI harness: + * ci/tests/190-response-handling for the response transformer, and + * smoketest BlockingResponseTransformerTest for a transformer that has not returned yet. */ } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/BlockingResponseTransformerTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/BlockingResponseTransformerTest.java new file mode 100644 index 0000000000..0e9e87e88b --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/BlockingResponseTransformerTest.java @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.LinkedHashMap; +import java.util.UUID; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Status; + +/** + * A destination whose response transformer has not returned yet, the one part of + * ci/tests/190-response-handling that is not a fixture: the harness retries every fixture + * assertion until the message is terminal, so it can never see the PENDING the engine parks + * the destination at while the transformer runs. + * + *

      Nothing here waits on a clock. The channel queues at its source, so the submit returns + * the message id straight away, and its response transformer parks until the gate property + * holds that message's token. The token is fresh per run, so a gate left set by an earlier run + * cannot release this one. + */ +@DisplayName("190-response-handling/06-blocking-response-transformer") +@TestInstance(PER_CLASS) +class BlockingResponseTransformerTest { + + private static final String CHANNEL = "channels/blocking-response-transformer.xml"; + + /** The configuration property the response transformer parks on. */ + private static final String GATE = "oie.smoketest.releaseResponse"; + + private static final int DESTINATION = 1; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void destinationStaysPendingUntilTheResponseTransformerReturns() throws Exception { + // The payload is this run's token: the destination echoes it back, so it is also the + // response the transformer parks on and the content it rewrites. + String token = UUID.randomUUID().toString(); + long messageId = SharedServer.get().submitMessage(channelId, token, new LinkedHashMap<>()); + + try { + ConnectorMessage blocked = Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.PENDING); + assertNotNull(blocked.getSent(), + "the destination sent its message before the response transformer ran, so the" + + " sent content should already be stored alongside the PENDING status"); + assertNull(blocked.getProcessedResponse(), + "the response transformer has not returned, so there is no processed response yet"); + } finally { + // Also on failure, so a wedged transformer never outlives the test. + Harness.setConfigurationProperty(GATE, token); + } + + ConnectorMessage finished = Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.SENT); + assertNotNull(finished.getProcessedResponse(), "no processed response was stored"); + assertEquals("released<" + token + ">", + MessageAssertions.responsePayload(finished.getProcessedResponse().getContent()), + "the response transformer's output should be the destination's processed response"); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index 6a1729e221..3593ee24b3 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -36,6 +36,9 @@ public final class Harness { */ private static final Duration TERMINAL_GRACE = Duration.ofSeconds(5); + /** How often to re-read a message while waiting for it to reach a state. */ + private static final Duration POLL_INTERVAL = Duration.ofMillis(250); + private Harness() { } @@ -114,7 +117,7 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa } } } - Thread.sleep(500); + Thread.sleep(POLL_INTERVAL.toMillis()); } if (lastFailure != null) { @@ -125,6 +128,37 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa + messageId + " for fixture " + base + "\n\n" + describe(lastMessage)); } + /** + * Polls until one connector of one message reaches {@code status}, and returns it. Java + * tests need this where {@link #runMessage} cannot help: it stops at the first terminal + * state, so it can never observe a message mid-flight. + */ + public static ConnectorMessage awaitConnectorStatus(String channelId, long messageId, int metaDataId, + Status status) throws Exception { + long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); + Status lastStatus = null; + do { + Message message = server().fetchMessage(channelId, messageId); + ConnectorMessage connectorMessage = message == null ? null + : message.getConnectorMessages().get(metaDataId); + if (connectorMessage != null) { + lastStatus = connectorMessage.getStatus(); + if (lastStatus == status) { + return connectorMessage; + } + } + Thread.sleep(POLL_INTERVAL.toMillis()); + } while (System.nanoTime() < deadline); + + throw new AssertionError("Timed out after " + HarnessConfig.TIMEOUT.toSeconds() + "s waiting for connector " + + metaDataId + " of message " + messageId + " to reach " + status + "; last status was " + lastStatus); + } + + /** Sets one configuration map entry, which channel scripts read back as {@code configurationMap}. */ + public static void setConfigurationProperty(String key, String value) throws Exception { + server().setConfigurationProperty(key, value); + } + /** Reads a staged fixture from the classpath. */ static String resource(String path) { try (InputStream in = Harness.class.getClassLoader().getResourceAsStream(path)) { diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index 3dd5da75a0..8dfeed5f12 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -133,14 +133,17 @@ private static void assertContent(String label, String expected, String actual) * come back CR-delimited while the fixture files are LF-delimited. */ private static void assertResponse(String label, String expected, MessageContent responseContent) { - String stored = content(responseContent); - String actual = stored; - if (stored != null && RESPONSE_ENVELOPE.matcher(stored).matches()) { - Response response = ObjectXMLSerializer.getInstance().deserialize(stored.trim(), Response.class); - String payload = response == null ? null : response.getMessage(); - actual = payload == null ? null : payload.replace("\r\n", "\n").replace('\r', '\n'); + assertMatches(label, expected, responsePayload(content(responseContent))); + } + + /** Unwraps a stored {@link Response} to the payload a fixture describes, or passes it through. */ + static String responsePayload(String stored) { + if (stored == null || !RESPONSE_ENVELOPE.matcher(stored).matches()) { + return stored; } - assertMatches(label, expected, actual); + Response response = ObjectXMLSerializer.getInstance().deserialize(stored.trim(), Response.class); + String payload = response == null ? null : response.getMessage(); + return payload == null ? null : payload.replace("\r\n", "\n").replace('\r', '\n'); } /** diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index 51ded95d85..77cd938d05 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.util.ArrayDeque; import java.util.Deque; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -18,6 +19,7 @@ import com.mirth.connect.model.LoginStatus; import com.mirth.connect.model.converters.ObjectXMLSerializer; import com.mirth.connect.model.filters.MessageFilter; +import com.mirth.connect.util.ConfigurationProperty; import com.mirth.connect.util.MirthSSLUtil; /** @@ -132,6 +134,17 @@ long submitMessage(String channelId, String rawData, Map sourceM return messageId; } + /** + * Sets one configuration map entry, leaving the rest alone. This is the only server-side + * state a client can write that channel scripts can read back, which makes it the harness's + * way to signal a running script. + */ + void setConfigurationProperty(String key, String value) throws ClientException { + Map properties = new LinkedHashMap<>(client.getConfigurationMap()); + properties.put(key, new ConfigurationProperty(value, null)); + client.setConfigurationMap(properties); + } + /** Reads one message back, with content, so assertions can inspect every connector. */ Message fetchMessage(String channelId, long messageId) throws ClientException { MessageFilter filter = new MessageFilter(); diff --git a/smoketest/src/test/resources/channels/blocking-response-transformer.xml b/smoketest/src/test/resources/channels/blocking-response-transformer.xml new file mode 100644 index 0000000000..8c800757d0 --- /dev/null +++ b/smoketest/src/test/resources/channels/blocking-response-transformer.xml @@ -0,0 +1,199 @@ + + 6a9c1b80-2d34-4f57-8a61-93b7c05de266 + 2 + blocking-response-transformer + + 1 + + 0 + sourceConnector + + + + None + false + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Wait for the gate + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From e304e30cce8e3b756645832d90fc10bdad929be5 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 19:33:36 -0500 Subject: [PATCH 16/28] Translate metadata tests to fixtures Signed-off-by: Mitch Gaffigan --- ci/README.md | 5 +- .../200-custom-metadata-columns/README.md | 34 +++ .../channels/01-column-types/channel.xml | 201 ++++++++++++++++ .../messages/01-all-types/dest01_metadata.yml | 2 + .../messages/01-all-types/source | 1 + .../messages/01-all-types/source_metadata.yml | 4 + .../01-all-types/source_sourcemap.yml | 4 + .../messages/02-value-casting/source | 1 + .../02-value-casting/source_metadata.yml | 4 + .../02-value-casting/source_sourcemap.yml | 4 + .../messages/03-absent-and-uncastable/source | 1 + .../source_metadata.yml | 4 + .../source_sourcemap.yml | 2 + .../03-absent-and-uncastable/source_status | 1 + .../connect/donkey/test/ChannelTests.java | 129 +---------- .../connect/donkey/test/DonkeyDaoTests.java | 215 +----------------- .../CustomMetaDataColumnRedeployTest.java | 105 +++++++++ .../smoketest/MessageAssertions.java | 37 ++- .../smoketest/OieServer.java | 17 +- .../custom-metadata-columns-redeploy.xml | 189 +++++++++++++++ 20 files changed, 622 insertions(+), 338 deletions(-) create mode 100644 ci/tests/200-custom-metadata-columns/README.md create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/channel.xml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_sourcemap.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_sourcemap.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_metadata.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_sourcemap.yml create mode 100644 ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_status create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/CustomMetaDataColumnRedeployTest.java create mode 100644 smoketest/src/test/resources/channels/custom-metadata-columns-redeploy.xml diff --git a/ci/README.md b/ci/README.md index 9966df9e34..601e85e3c5 100644 --- a/ci/README.md +++ b/ci/README.md @@ -57,7 +57,10 @@ the payload sent to the channel. The other files are optional assertions: `NN` is the destination connector's metadata ID: `dest01` is the first destination, `dest02` the second, and so on. Metadata files are YAML mappings; list -only the keys that matter to the test. Content assertions are byte-for-byte, except +only the keys that matter to the test. A key whose value is `((NONE))` asserts that +nothing is stored under it, which is how a custom metadata column with no value is +asserted. A TIMESTAMP custom metadata column is compared as its UTC instant, so write +it as `2010-01-02T13:01:02Z`. Content assertions are byte-for-byte, except that `((ANY))` matches variable content such as generated IDs or timestamps. A content assertion file whose entire contents are `((NONE))` asserts the opposite: that the server stored no such content at all, which is not the same as storing an empty string. diff --git a/ci/tests/200-custom-metadata-columns/README.md b/ci/tests/200-custom-metadata-columns/README.md new file mode 100644 index 0000000000..64c1bbb34b --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/README.md @@ -0,0 +1,34 @@ +# 200-custom-metadata-columns + +Custom metadata columns: a channel declares them, the engine adds a real database column per +declared column on deploy, and each connector message gets its own row of values. One RAW channel +with four columns, one per `MetaDataColumnType`, each mapped to a lower-case source map key: + +| column | type | mapping name | +| --- | --- | --- | +| `MDSTRING` | STRING | `mdstring` | +| `MDNUMBER` | NUMBER | `mdnumber` | +| `MDBOOLEAN` | BOOLEAN | `mdboolean` | +| `MDTIMESTAMP` | TIMESTAMP | `mdtimestamp` | + +Values arrive in the source map rather than from a transformer script, so each message is nothing +but the values in and the stored values out. `source_metadata.yml` asserts what came back out of +the database, keyed by column name — never by mapping name, which would also match the connector +map and prove nothing about storage. A NUMBER column is `DECIMAL(31, 15)` in every dialect, so its +values come back with fifteen decimal places. + +- `01-all-types` - one value per type survives the round trip. Destination 1's transformer puts its + own `mdstring` in the connector map, which the replacer prefers over the source map, so + `dest01_metadata.yml` shows the destination's row holding a different string from the source's + while its number is unchanged. Two rows, not one copied. +- `02-value-casting` - the same four columns fed values that are not already of the column's type: + `YES` becomes the boolean `true`, an HL7-style `20100102130102` becomes the same instant as + `01-all-types`' `2010-01-02 13:01:02`, and an over-long string is truncated to 255 characters, + which is where the `|255|` marker in the expected value sits. +- `03-absent-and-uncastable` - a column with nothing mapped to it, and a NUMBER column fed `not a + number`, both end up with no value. Casting is best-effort: the failure is logged and the message + still reaches TRANSFORMED, which `source_status` asserts. + +Adding a column is all a fixture can reach, because it deploys each channel exactly once. Removing +a column, and the drop-then-add that changing a column's type compiles to, need a channel that is +edited and redeployed, which is `CustomMetaDataColumnRedeployTest`. diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/channel.xml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/channel.xml new file mode 100644 index 0000000000..6d4bb4a885 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/channel.xml @@ -0,0 +1,201 @@ + + 7c1f0a94-2d63-4b85-9e17-0a5d3b6c2001 + 2 + custom-metadata-column-types + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + + Override the string mapping for this destination + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + MDSTRING + STRING + mdstring + + + MDNUMBER + NUMBER + mdnumber + + + MDBOOLEAN + BOOLEAN + mdboolean + + + MDTIMESTAMP + TIMESTAMP + mdtimestamp + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml new file mode 100644 index 0000000000..5059722fad --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml @@ -0,0 +1,2 @@ +MDSTRING: "set by destination 1" +MDNUMBER: "1234.567800000000000" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml new file mode 100644 index 0000000000..dbd38e2a9b --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml @@ -0,0 +1,4 @@ +MDSTRING: "a string value" +MDNUMBER: "1234.567800000000000" +MDBOOLEAN: "true" +MDTIMESTAMP: "2010-01-02T13:01:02Z" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_sourcemap.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_sourcemap.yml new file mode 100644 index 0000000000..c78bb0aeb7 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_sourcemap.yml @@ -0,0 +1,4 @@ +mdstring: "a string value" +mdnumber: "1234.5678" +mdboolean: "true" +mdtimestamp: "2010-01-02 13:01:02" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml new file mode 100644 index 0000000000..5630c2c110 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml @@ -0,0 +1,4 @@ +MDSTRING: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|255|" +MDNUMBER: "-3.500000000000000" +MDBOOLEAN: "true" +MDTIMESTAMP: "2010-01-02T13:01:02Z" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_sourcemap.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_sourcemap.yml new file mode 100644 index 0000000000..ead4412633 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_sourcemap.yml @@ -0,0 +1,4 @@ +mdstring: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|255|this tail is past the 255 character limit" +mdnumber: "-3.5" +mdboolean: "YES" +mdtimestamp: "20100102130102" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_metadata.yml new file mode 100644 index 0000000000..46b1d49c4e --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_metadata.yml @@ -0,0 +1,4 @@ +MDSTRING: "((NONE))" +MDNUMBER: "((NONE))" +MDTIMESTAMP: "((NONE))" +MDBOOLEAN: "true" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_sourcemap.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_sourcemap.yml new file mode 100644 index 0000000000..a058ae0b87 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_sourcemap.yml @@ -0,0 +1,2 @@ +mdnumber: "not a number" +mdboolean: "true" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_status b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_status new file mode 100644 index 0000000000..1316c06a69 --- /dev/null +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/03-absent-and-uncastable/source_status @@ -0,0 +1 @@ +TRANSFORMED \ No newline at end of file diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java index 76a826fa41..160377c368 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java @@ -15,19 +15,11 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.List; - import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.mirth.connect.donkey.model.channel.DeployedState; -import com.mirth.connect.donkey.model.channel.MetaDataColumn; -import com.mirth.connect.donkey.model.channel.MetaDataColumnException; -import com.mirth.connect.donkey.model.channel.MetaDataColumnType; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; @@ -307,120 +299,6 @@ public final void testControllerRemoveChannel() throws Exception { TestUtils.assertChannelDoesNotExist(channelId); } - /* - * Creates and deploys a channel, and asserts that: - No extra columns exist on the custom - * metadata table - * - * Adds metadata columns (one of each type), redeploys the channel, and asserts that: - All the - * added columns are in the database with the correct name and type - * - * Removes one of the columns, redeploys, and asserts that: - The column is no longer in the - * database - * - * Alters the name of one of the columns, redeploys, and asserts that: - The old column is - * dropped correctly - The new column is added correctly - * - * Alters the type one of the columns, redeploys, and asserts that: - The old column is dropped - * correctly - The new column is added correctly - * - * Alters the name and type of one of the columns, redeploys, and asserts that: - The old column - * is dropped correctly - The new column is added correctly - */ - @Test - public final void testUpdateMetaDataColumns() throws Exception { - ChannelController.getInstance().removeChannel(channelId); - - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - - channel.deploy(); - - // Assert that there are no columns currently - assertEquals(TestUtils.getExistingMetaDataColumns(channelId).size(), 0); - - // Add all the columns - channel.getMetaDataColumns().add(new MetaDataColumn("stringcolumn", MetaDataColumnType.STRING, null)); - channel.getMetaDataColumns().add(new MetaDataColumn("numbercolumn", MetaDataColumnType.NUMBER, null)); - channel.getMetaDataColumns().add(new MetaDataColumn("booleancolumn", MetaDataColumnType.BOOLEAN, null)); - channel.getMetaDataColumns().add(new MetaDataColumn("timestampcolumn", MetaDataColumnType.TIMESTAMP, null)); - - channel.undeploy(); - channel.deploy(); - - // Assert that each column exists - List columns = TestUtils.getExistingMetaDataColumns(channelId); - assertTrue(columns.contains(new MetaDataColumn("stringcolumn", MetaDataColumnType.STRING, null))); - assertTrue(columns.contains(new MetaDataColumn("numbercolumn", MetaDataColumnType.NUMBER, null))); - assertTrue(columns.contains(new MetaDataColumn("booleancolumn", MetaDataColumnType.BOOLEAN, null))); - assertTrue(columns.contains(new MetaDataColumn("timestampcolumn", MetaDataColumnType.TIMESTAMP, null))); - - // Remove the string column - channel.getMetaDataColumns().remove(0); - - channel.undeploy(); - channel.deploy(); - - // Assert that the string column doesn't exist anymore - columns = TestUtils.getExistingMetaDataColumns(channelId); - assertFalse(columns.contains(new MetaDataColumn("stringcolumn", MetaDataColumnType.STRING, null))); - - // Alter the long column's name - channel.getMetaDataColumns().get(0).setName("longcolumn2"); - - channel.undeploy(); - channel.deploy(); - - // Assert that the long column got dropped/added correctly - columns = TestUtils.getExistingMetaDataColumns(channelId); - assertFalse(columns.contains(new MetaDataColumn("numbercolumn", MetaDataColumnType.NUMBER, null))); - assertTrue(columns.contains(new MetaDataColumn("numbercolumn2", MetaDataColumnType.NUMBER, null))); - - // Alter the double column's type - channel.getMetaDataColumns().get(1).setType(MetaDataColumnType.TIMESTAMP); - - channel.undeploy(); - channel.deploy(); - - // Assert that the double column got dropped/added correctly as a timestamp column - columns = TestUtils.getExistingMetaDataColumns(channelId); - assertFalse(columns.contains(new MetaDataColumn("numbercolumn", MetaDataColumnType.NUMBER, null))); - assertTrue(columns.contains(new MetaDataColumn("numbercolumn", MetaDataColumnType.TIMESTAMP, null))); - - // Alter the boolean column's name and type - channel.getMetaDataColumns().get(2).setName("booleancolumn2"); - channel.getMetaDataColumns().get(2).setType(MetaDataColumnType.TIMESTAMP); - - channel.undeploy(); - channel.deploy(); - - // Assert that the boolean column got dropped/added correctly as a time column - columns = TestUtils.getExistingMetaDataColumns(channelId); - assertFalse(columns.contains(new MetaDataColumn("booleancolumn", MetaDataColumnType.BOOLEAN, null))); - assertTrue(columns.contains(new MetaDataColumn("booleancolumn2", MetaDataColumnType.TIMESTAMP, null))); - - channel.undeploy(); - } - - @Test - public final void testMetaDataCasting() throws MetaDataColumnException { - MetaDataColumnType columnType = MetaDataColumnType.BOOLEAN; - Boolean booleanValue = (Boolean) columnType.castValue("TRUE"); - assertEquals(Boolean.TRUE, booleanValue); - booleanValue = (Boolean) columnType.castValue("FALSE"); - assertEquals(Boolean.FALSE, booleanValue); - - columnType = MetaDataColumnType.NUMBER; - BigDecimal bigDecimalValue = (BigDecimal) columnType.castValue("1.0234567890123456789"); - assertEquals(new BigDecimal(1.0234567890123456789), bigDecimalValue); - - columnType = MetaDataColumnType.STRING; - String stringValue = (String) columnType.castValue(" test !@# String 123 "); - assertEquals(" test !@# String 123 ", stringValue); - - columnType = MetaDataColumnType.TIMESTAMP; - Calendar dateValue = (Calendar) columnType.castValue("2010-01-02 13:01:02"); - assertEquals("13 01 02 01 02 2010", new SimpleDateFormat("HH mm ss MM dd yyyy").format(dateValue.getTimeInMillis())); - } - @Test public final void testEncryption() throws Exception { //TODO UPDATE THIS TEST! @@ -496,6 +374,13 @@ public final void testEncryption() throws Exception { // } } + /* + * Replaced by the ci/tests/200-custom-metadata-columns fixtures (a column of each type, + * value casting, and values that are absent or uncastable) and + * CustomMetaDataColumnRedeployTest (adding, removing and retyping a deployed channel's + * columns, which is what testUpdateMetaDataColumns redeployed for). + */ + /* * Replaced by the ci/tests/160-message-storage-levels fixtures (DEVELOPMENT, PRODUCTION, RAW * and METADATA), MessageStorageDisabledTest (DISABLED) and the ci/tests/170-content-removal diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java index c7a4f8569c..4ec7ea1405 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java @@ -32,8 +32,6 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mirth.connect.donkey.model.channel.MetaDataColumn; -import com.mirth.connect.donkey.model.channel.MetaDataColumnType; import com.mirth.connect.donkey.model.message.ConnectorMessage; import com.mirth.connect.donkey.model.message.ContentType; import com.mirth.connect.donkey.model.message.Message; @@ -354,74 +352,6 @@ public final void testInsertMessageAttachment() throws Exception { } } - /* - * Create a new channel, and create metadata columns for it Deploy the channel, assert that: - - * The columns were successfully added to the table - * - * Create source connector messages Insert source/destination metadata for each message, assert - * that: - Each of the metadata columns was inserted successfully - */ - @Test - public final void testInsertMetaData() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - for (MetaDataColumnType columnType : MetaDataColumnType.values()) { - channel.getMetaDataColumns().add(new MetaDataColumn(columnType.toString() + "test", columnType, null)); - } - - channel.deploy(); - - // Assert that the columns were added successfully - List existingColumns = TestUtils.getExistingMetaDataColumns(channel.getChannelId()); - List channelColumns = channel.getMetaDataColumns(); - - assertEquals(channelColumns.size(), existingColumns.size()); - - for (MetaDataColumn metaDataColumn : channelColumns) { - assertTrue(metaDataColumn.getName(), existingColumns.contains(metaDataColumn)); - } - - Map sourceMap = new HashMap(); - sourceMap.put(MetaDataColumnType.BOOLEAN.toString() + "test", true); - sourceMap.put(MetaDataColumnType.NUMBER.toString() + "test", 1); - sourceMap.put(MetaDataColumnType.STRING.toString() + "test", "testing"); - sourceMap.put(MetaDataColumnType.TIMESTAMP.toString() + "test", Calendar.getInstance()); - - Map destinationMap = new HashMap(); - destinationMap.put(MetaDataColumnType.BOOLEAN.toString() + "test", false); - destinationMap.put(MetaDataColumnType.NUMBER.toString() + "test", 1); - destinationMap.put(MetaDataColumnType.STRING.toString() + "test", ""); - destinationMap.put(MetaDataColumnType.TIMESTAMP.toString() + "test", Calendar.getInstance()); - - logger.info("Testing DonkeyDao.insertMetaData..."); - - DonkeyDao dao = daoFactory.getDao(); - - try { - for (int i = 1; i <= TEST_SIZE; i++) { - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - - sourceMessage.setMetaDataMap(sourceMap); - dao.insertMetaData(sourceMessage, channel.getMetaDataColumns()); - dao.commit(); - - ConnectorMessage destinationMessage = TestUtils.createAndStoreDestinationConnectorMessage(daoFactory, channel.getChannelId(), channel.getName(), channel.getServerId(), sourceMessage.getMessageId(), 1, testMessage, Status.RECEIVED); - destinationMessage.setMetaDataMap(destinationMap); - dao.insertMetaData(destinationMessage, channel.getMetaDataColumns()); - dao.commit(); - - // Assert the custom metadata was inserted correctly - TestUtils.compareMetaDataMaps(channel.getMetaDataColumns(), sourceMap, TestUtils.getCustomMetaData(channel.getChannelId(), sourceMessage.getMessageId(), 0)); - TestUtils.compareMetaDataMaps(channel.getMetaDataColumns(), destinationMap, TestUtils.getCustomMetaData(channel.getChannelId(), sourceMessage.getMessageId(), 1)); - } - - System.out.println(daoTimer.getLog()); - } finally { - dao.close(); - channel.undeploy(); - } - } - /* * Create new channel and connector messages Insert content for the messages and assert that: - * Each MessageContent row was inserted correctly @@ -1127,102 +1057,6 @@ public final void testRemoveChannel() throws Exception { System.out.println(daoTimer.getLog()); } - /* - * Deploy a new channel, manually add metadata columns using addMetaDataColumn, and assert that: - * - All the columns were successfully added - */ - @Test - public final void testAddMetaDataColumn() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - List metaDataColumns = new ArrayList(); - - try { - logger.info("Testing DonkeyDao.addMetaDataColumn..."); - - channel.deploy(); - - for (int i = 1; i <= TEST_SIZE; i++) { - DonkeyDao dao = null; - - try { - dao = daoFactory.getDao(); - - for (MetaDataColumnType type : MetaDataColumnType.values()) { - MetaDataColumn metaDataColumn = new MetaDataColumn(type.toString() + "column" + i, type, null); - dao.addMetaDataColumn(channel.getChannelId(), metaDataColumn); - metaDataColumns.add(metaDataColumn); - } - - logger.debug("Adding metadata column set " + i); - dao.commit(); - } finally { - TestUtils.close(dao); - } - - // Assert that the columns were added - assertEquals(metaDataColumns, TestUtils.getExistingMetaDataColumns(channel.getChannelId())); - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.undeploy(); - } - } - - /* - * Deploy a new channel, add metadata columns, then use removeMetaDataColumn to delete all the - * columns added Get the list of existing metadata columns in the database, and assert: - All - * the columns previously added were successfully removed - */ - @Test - public final void testRemoveMetaDataColumn() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - List metaDataColumns = new ArrayList(); - - try { - logger.info("Testing DonkeyDao.addMetaDataColumn..."); - - channel.deploy(); - DonkeyDao dao = null; - - try { - dao = daoFactory.getDao(); - - for (int i = 1; i <= TEST_SIZE; i++) { - for (MetaDataColumnType type : MetaDataColumnType.values()) { - MetaDataColumn metaDataColumn = new MetaDataColumn(type.toString() + "column" + i, type, null); - dao.addMetaDataColumn(channel.getChannelId(), metaDataColumn); - metaDataColumns.add(metaDataColumn); - } - } - - dao.commit(); - - // Remove the columns - for (MetaDataColumn metaDataColumn : metaDataColumns) { - dao.removeMetaDataColumn(channel.getChannelId(), metaDataColumn.getName()); - } - - dao.commit(); - } finally { - TestUtils.close(dao); - } - - List databaseMetaDataColumns = TestUtils.getExistingMetaDataColumns(channel.getChannelId()); - - // Assert that the columns in the database do not contain any of the columns previously added - for (MetaDataColumn metaDataColumn : metaDataColumns) { - assertFalse(databaseMetaDataColumns.contains(metaDataColumn)); - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.undeploy(); - } - } - // TODO testResetStatistics // TODO testResetAllStatistics @@ -1761,48 +1595,6 @@ public final void testGetUnfinishedMessages() throws Exception { } } - /* - * Create a list of metadata columns and add the list to the channel's metadata columns Deploy - * the channel, and assert that: - The list of metadata columns matches the one returned by - * getMetaDataColumns - */ - @Test - public final void testGetMetaDataColumns() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - List metaDataColumns = new ArrayList(); - for (MetaDataColumnType type : MetaDataColumnType.values()) { - metaDataColumns.add(new MetaDataColumn(type.toString() + "column", type, null)); - } - channel.setMetaDataColumns(metaDataColumns); - - try { - logger.info("Testing DonkeyDao.getMetaDataColumns..."); - - channel.deploy(); - - List daoMetaDataColumns; - DonkeyDao dao = null; - - try { - dao = daoFactory.getDao(); - daoMetaDataColumns = dao.getMetaDataColumns(channel.getChannelId()); - } finally { - TestUtils.close(dao); - } - - assertEquals(metaDataColumns.size(), daoMetaDataColumns.size()); - - for (MetaDataColumn column : daoMetaDataColumns) { - assertTrue(column.getName(), metaDataColumns.contains(column)); - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.undeploy(); - } - } - // TODO testGetMessageAttachment /* @@ -1916,4 +1708,11 @@ public final void testJdbcDaoStatementCache() throws Exception { // channel.undeploy(); // } // } + /* + * Replaced by the ci/tests/200-custom-metadata-columns fixtures, which deploy a channel with a + * column of each type and assert the values the engine stored and read back, and by + * CustomMetaDataColumnRedeployTest, which edits a deployed channel's column list to reach + * removeMetaDataColumn. Covered there: testInsertMetaData, testAddMetaDataColumn, + * testRemoveMetaDataColumn and testGetMetaDataColumns. + */ } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/CustomMetaDataColumnRedeployTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/CustomMetaDataColumnRedeployTest.java new file mode 100644 index 0000000000..ea4b5acb5a --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/CustomMetaDataColumnRedeployTest.java @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.math.BigDecimal; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.channel.MetaDataColumn; +import com.mirth.connect.donkey.model.channel.MetaDataColumnType; +import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.model.Channel; +import com.mirth.connect.model.converters.ObjectXMLSerializer; + +/** + * The half of custom metadata columns that ci/tests/200-custom-metadata-columns cannot express: a + * fixture deploys each channel once, so it only ever reaches {@code addMetaDataColumn}. Editing a + * deployed channel's column list and redeploying it is what reaches {@code removeMetaDataColumn}, + * and what turns a column's type change into a drop followed by an add. + */ +@DisplayName("200-custom-metadata-columns/02-redeploy") +@TestInstance(PER_CLASS) +class CustomMetaDataColumnRedeployTest { + + private static final String CHANNEL = "channels/custom-metadata-columns-redeploy.xml"; + + private String channelId; + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void redeployAddsRemovesAndRetypesColumns() throws Exception { + OieServer server = SharedServer.get(); + Channel channel = ObjectXMLSerializer.getInstance().deserialize(Harness.resource(CHANNEL), Channel.class); + + // The channel starts with KEPT, DROPPED and RETYPED, all STRING. + channelId = server.deployChannel(channel, CHANNEL); + long first = submit(server, "kept", "one", "dropped", "one", "retyped", "1.5"); + + Map firstMetaData = metaData(first); + assertEquals("one", firstMetaData.get("KEPT")); + assertEquals("one", firstMetaData.get("DROPPED")); + assertEquals("1.5", firstMetaData.get("RETYPED"), "a STRING column stores the value verbatim"); + + // Drop one column, retype another, add a third, and redeploy the same channel. + List columns = channel.getProperties().getMetaDataColumns(); + assertTrue(columns.removeIf(column -> "DROPPED".equals(column.getName())), + "Channel fixture has no DROPPED column"); + column(columns, "RETYPED").setType(MetaDataColumnType.NUMBER); + columns.add(new MetaDataColumn("ADDED", MetaDataColumnType.BOOLEAN, "added")); + server.deployChannel(channel, CHANNEL); + + long second = submit(server, "kept", "two", "dropped", "two", "retyped", "1.5", "added", "true"); + Map secondMetaData = metaData(second); + assertEquals("two", secondMetaData.get("KEPT")); + assertEquals(true, secondMetaData.get("ADDED"), "the column added on redeploy stores a BOOLEAN"); + assertFalse(secondMetaData.containsKey("DROPPED"), + () -> "DROPPED was removed from the channel but is still a column: " + secondMetaData.keySet()); + assertEquals(0, new BigDecimal("1.5").compareTo((BigDecimal) secondMetaData.get("RETYPED")), + "the retyped column now stores a NUMBER"); + + // The table survived both ALTER TABLEs, so the message sent before the redeploy is still + // readable - minus the column that was dropped, and minus the value in the column that was + // retyped, which a type change drops and re-adds. + Map firstAfterRedeploy = metaData(first); + assertEquals("one", firstAfterRedeploy.get("KEPT"), "an untouched column kept its stored value"); + assertFalse(firstAfterRedeploy.containsKey("DROPPED")); + assertNull(firstAfterRedeploy.get("RETYPED"), "a retyped column is dropped and re-added, losing old values"); + } + + /** Submits a message whose source map is the given key/value pairs. */ + private long submit(OieServer server, String... sourceMapEntries) throws Exception { + Map sourceMap = new LinkedHashMap<>(); + for (int i = 0; i < sourceMapEntries.length; i += 2) { + sourceMap.put(sourceMapEntries[i], sourceMapEntries[i + 1]); + } + return server.submitMessage(channelId, "Hello world!", sourceMap); + } + + /** Reads one message's source custom metadata back off the server. */ + private Map metaData(long messageId) throws Exception { + return Harness.awaitConnectorStatus(channelId, messageId, 0, Status.TRANSFORMED).getMetaDataMap(); + } + + private static MetaDataColumn column(List columns, String name) { + return columns.stream().filter(column -> name.equals(column.getName())).findFirst() + .orElseThrow(() -> new AssertionError("Channel fixture has no " + name + " column")); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index 8dfeed5f12..1be95c034c 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -3,6 +3,8 @@ package org.openintegrationengine.smoketest; +import java.time.Instant; +import java.util.Calendar; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; @@ -32,7 +34,10 @@ final class MessageAssertions { /** Fixture wildcard: matches any run of characters, for timestamps and generated ids. */ private static final String ANY_WILDCARD = "((ANY))"; - /** Fixture sentinel: the whole file asserts that the server stored no such content at all. */ + /** + * Fixture sentinel asserting that nothing is stored: a whole content file, or one key of a + * metadata file. + */ private static final String NONE_SENTINEL = "((NONE))"; private static final Pattern RESPONSE_ENVELOPE = Pattern.compile("^\\s*].*", Pattern.DOTALL); @@ -169,13 +174,23 @@ private static void assertSubset(String label, String path, Map Map actual) { for (Map.Entry entry : expected.entrySet()) { String keyPath = path.isEmpty() ? entry.getKey() : path + "." + entry.getKey(); + Object expectedValue = entry.getValue(); + Object actualValue = actual.get(entry.getKey()); + + // A key whose value is the sentinel asserts the opposite: nothing was stored for it. + if (NONE_SENTINEL.equals(expectedValue)) { + if (actualValue != null) { + throw new AssertionError("Metadata mismatch for " + label + " at " + keyPath + + ": expected no value, found " + describe(actualValue)); + } + continue; + } + if (!actual.containsKey(entry.getKey())) { throw new AssertionError("Metadata mismatch for " + label + ": missing key " + keyPath + "; present keys: " + actual.keySet()); } - Object expectedValue = entry.getValue(); - Object actualValue = actual.get(entry.getKey()); if (expectedValue instanceof Map expectedMap) { if (!(actualValue instanceof Map actualMap)) { throw new AssertionError("Metadata mismatch for " + label + " at " + keyPath @@ -197,7 +212,19 @@ private static boolean scalarsEqual(Object expected, Object actual) { if (expected == null || actual == null) { return Objects.equals(expected, actual); } - return String.valueOf(expected).equals(String.valueOf(actual)); + return scalarText(expected).equals(scalarText(actual)); + } + + /** + * Renders a scalar the way a fixture writes it. A TIMESTAMP custom metadata column comes back + * as a {@link Calendar}, whose {@code toString} spells out every field and the JVM's time zone, + * so it is rendered as its UTC instant instead: a fixture writes {@code 2010-01-02T13:01:02Z}. + */ + private static String scalarText(Object value) { + if (value instanceof Calendar calendar) { + return Instant.ofEpochMilli(calendar.getTimeInMillis()).toString(); + } + return String.valueOf(value); } /** @@ -247,7 +274,7 @@ private static String content(MessageContent messageContent) { } private static String describe(Object value) { - return value == null ? "" : "\"" + value + "\""; + return value == null ? "" : "\"" + scalarText(value) + "\""; } @SuppressWarnings("unchecked") diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index 77cd938d05..f5a119a654 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -90,7 +90,18 @@ private static synchronized void initSerializer(String serverVersion) throws Exc * @return the deployed channel's id */ String deployChannel(String xml, String label) throws Exception { - Channel channel = ObjectXMLSerializer.getInstance().deserialize(xml, Channel.class); + return deployChannel(ObjectXMLSerializer.getInstance().deserialize(xml, Channel.class), label); + } + + /** + * Deploys a channel model, creating or overwriting whatever is on the server under its id. + * Deploying the same id twice redeploys it, which is how a test changes a channel in place. + * + * @param channel the channel to deploy + * @param label a human-readable name for the channel, used only in error messages + * @return the deployed channel's id + */ + String deployChannel(Channel channel, String label) throws Exception { String channelId = channel.getId(); if (channelId == null || channelId.isBlank()) { throw new IllegalArgumentException("Channel fixture has no id: " + label); @@ -100,7 +111,9 @@ String deployChannel(String xml, String label) throws Exception { if (!client.createChannel(channel)) { client.updateChannel(channel, true, null); } - deployedChannelIds.push(channelId); + if (!deployedChannelIds.contains(channelId)) { + deployedChannelIds.push(channelId); + } // returnErrors=true so a deploy failure surfaces here instead of only as a status // that never reaches STARTED. The String overload avoids DebuggerUtil parsing. diff --git a/smoketest/src/test/resources/channels/custom-metadata-columns-redeploy.xml b/smoketest/src/test/resources/channels/custom-metadata-columns-redeploy.xml new file mode 100644 index 0000000000..3794c5ceb0 --- /dev/null +++ b/smoketest/src/test/resources/channels/custom-metadata-columns-redeploy.xml @@ -0,0 +1,189 @@ + + 7c1f0a94-2d63-4b85-9e17-0a5d3b6c2002 + 2 + custom-metadata-columns-redeploy + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + KEPT + STRING + kept + + + DROPPED + STRING + dropped + + + RETYPED + STRING + retyped + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From 842f92f16764cb76d2a1c474d3e826284d66cb04 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 19:51:54 -0500 Subject: [PATCH 17/28] Translate testEncryption to ci Signed-off-by: Mitch Gaffigan --- .../connect/donkey/test/ChannelTests.java | 78 +------ .../smoketest/EncryptionAtRestTest.java | 125 ++++++++++++ .../smoketest/OieServer.java | 17 +- .../resources/channels/encryption-at-rest.xml | 191 ++++++++++++++++++ 4 files changed, 336 insertions(+), 75 deletions(-) create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/EncryptionAtRestTest.java create mode 100644 smoketest/src/test/resources/channels/encryption-at-rest.xml diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java index 160377c368..146e62e69d 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelTests.java @@ -299,80 +299,10 @@ public final void testControllerRemoveChannel() throws Exception { TestUtils.assertChannelDoesNotExist(channelId); } - @Test - public final void testEncryption() throws Exception { - //TODO UPDATE THIS TEST! -// final String prefix = "Encrypted: "; -// final int prefixLength = prefix.length(); -// -// TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); -// channel.setEncryptor(new Encryptor() { -// @Override -// public String encrypt(String text) { -// return prefix + text; -// } -// -// @Override -// public String decrypt(String text) { -// return text.substring(prefixLength); -// } -// }); -// -// SourceConnector sourceConnector = channel.getSourceConnector(); -// -// channel.deploy(); -// channel.start(); -// -// DispatchResult dispatchResult = sourceConnector.dispatchRawMessage(new RawMessage(testMessage)); -// sourceConnector.finishDispatch(dispatchResult); -// -// channel.stop(); -// channel.undeploy(); -// -// Connection connection = null; -// PreparedStatement statement = null; -// ResultSet resultSet = null; -// -// try { -// connection = TestUtils.getConnection(); -// -// long messageId = dispatchResult.getProcessedMessage().getMessageId(); -// -// statement = connection.prepareStatement("SELECT content, is_encrypted FROM d_mc" + ChannelController.getInstance().getLocalChannelId(channelId) + " WHERE message_id = ? AND metadata_id = ? AND content_type = ?"); -// statement.setLong(1, messageId); -// -// for (ConnectorMessage connectorMessage : dispatchResult.getProcessedMessage().getConnectorMessages().values()) { -// int metaDataId = connectorMessage.getMetaDataId(); -// statement.setInt(2, metaDataId); -// -// for (ContentType contentType : ContentType.getMessageTypes()) { -// MessageContent messageContent = connectorMessage.getContent(contentType); -// -// if (messageContent != null) { -// assertNotNull(messageContent.getContent()); -// //TODO Update this test, no longer valid -//// assertEquals(prefix + messageContent.getContent(), messageContent.getEncryptedContent()); -// } -// -// statement.setInt(3, contentType.getContentTypeCode()); -// resultSet = statement.executeQuery(); -// -// if (resultSet.next()) { -// assertEquals(prefix + messageContent.getContent(), resultSet.getString("content")); -// assertTrue(resultSet.getBoolean("is_encrypted")); -// } else if (messageContent != null && (metaDataId == 0 || !contentType.equals(ContentType.RAW))) { -// throw new AssertionError("Message content was not stored in the database (" + messageId + "/" + metaDataId + "/" + contentType.getContentTypeCode() + ")"); -// } -// -// resultSet.close(); -// } -// } -// } finally { -// TestUtils.close(resultSet); -// TestUtils.close(statement); -// TestUtils.close(connection); -// } - } + /* + * Replaced by EncryptionAtRestTest: a channel with encryptData set stores every content stage + * as ciphertext, and the decrypting read path hands the original back. + */ /* * Replaced by the ci/tests/200-custom-metadata-columns fixtures (a column of each type, diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/EncryptionAtRestTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/EncryptionAtRestTest.java new file mode 100644 index 0000000000..6dc4b5e655 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/EncryptionAtRestTest.java @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.LinkedHashMap; +import java.util.List; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Message; +import com.mirth.connect.donkey.model.message.MessageContent; +import com.mirth.connect.donkey.model.message.Status; + +/** + * A channel with {@code encryptData} set stores its message content encrypted. No fixture can + * assert this: encryption is per-message randomised, so the stored value is different every run, + * and the only fixed part of it is the header the ciphertext carries. + * + *

      Which of the two read APIs is used decides what comes back. {@code getMessages} with content + * leaves the DAO's decryption off, so it hands back the column as stored; {@code getMessageContent} + * decrypts. The two together are what makes "encrypted at rest" observable from a client. + */ +@DisplayName("210-encryption-at-rest") +@TestInstance(PER_CLASS) +class EncryptionAtRestTest { + + private static final String CHANNEL = "channels/encryption-at-rest.xml"; + + /** Prefix {@code KeyEncryptor} writes in front of every ciphertext, carrying the IV. */ + private static final String ENCRYPTION_HEADER = "{alg="; + + private static final String RAW = "Hello world!"; + /** The source transformer prefixes the message, so transformed and encoded differ from raw. */ + private static final String TRANSFORMED = "transformed:" + RAW; + + private static final int SOURCE = 0; + private static final int DESTINATION = 1; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void storesEveryContentStageEncrypted() throws Exception { + Message stored = process(); + ConnectorMessage source = connector(stored, SOURCE); + ConnectorMessage destination = connector(stored, DESTINATION); + + assertStoredEncrypted("source raw", source.getRaw()); + assertStoredEncrypted("source transformed", source.getTransformed()); + assertStoredEncrypted("source encoded", source.getEncoded()); + // The destination's own content, written by a different DAO call than the source's. + assertStoredEncrypted("destination sent", destination.getSent()); + } + + @Test + void decryptsContentWhenReadBack() throws Exception { + Message stored = process(); + ConnectorMessage source = connector( + SharedServer.get().fetchDecryptedMessage(channelId, stored.getMessageId(), + List.of(SOURCE, DESTINATION)), + SOURCE); + + assertDecrypted("source raw", source.getRaw(), RAW); + assertDecrypted("source transformed", source.getTransformed(), TRANSFORMED); + assertDecrypted("source encoded", source.getEncoded(), TRANSFORMED); + } + + /** Submits one message and returns it as stored, once the destination has finished with it. */ + private Message process() throws Exception { + OieServer server = SharedServer.get(); + long messageId = server.submitMessage(channelId, RAW, new LinkedHashMap<>()); + Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.SENT); + return server.fetchMessage(channelId, messageId); + } + + /** + * Asserts that what the server stored is ciphertext: flagged encrypted, carrying the + * encryptor's header, and not the plaintext it was made from. + */ + private static void assertStoredEncrypted(String label, MessageContent content) { + assertNotNull(content, () -> label + " was not stored at all"); + String stored = content.getContent(); + assertTrue(content.isEncrypted(), () -> label + " is not flagged as encrypted: " + stored); + assertTrue(stored.startsWith(ENCRYPTION_HEADER), + () -> label + " does not carry an encryption header: " + stored); + assertFalse(stored.contains(RAW), () -> label + " leaks the plaintext payload: " + stored); + } + + /** Asserts that the decrypting read path recovers the original content. */ + private static void assertDecrypted(String label, MessageContent content, String expected) { + assertNotNull(content, () -> label + " was not returned by the decrypting read"); + assertEquals(expected, content.getContent(), () -> label + " did not decrypt to its original"); + assertFalse(content.isEncrypted(), () -> label + " is still flagged as encrypted after decryption"); + } + + private static ConnectorMessage connector(Message message, int metaDataId) { + assertNotNull(message, "The server returned no message"); + ConnectorMessage connectorMessage = message.getConnectorMessages().get(metaDataId); + assertNotNull(connectorMessage, + () -> "Message " + message.getMessageId() + " has no connector " + metaDataId + + "; present ids: " + message.getConnectorMessages().keySet()); + return connectorMessage; + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index f5a119a654..1e8c3a6754 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -158,7 +158,12 @@ void setConfigurationProperty(String key, String value) throws ClientException { client.setConfigurationMap(properties); } - /** Reads one message back, with content, so assertions can inspect every connector. */ + /** + * Reads one message back, with content, so assertions can inspect every connector. Asking + * for the content switches the server's DAO out of decrypting mode, so the content is + * whatever is stored - ciphertext for a channel with {@code encryptData} set. See + * {@link #fetchDecryptedMessage}. + */ Message fetchMessage(String channelId, long messageId) throws ClientException { MessageFilter filter = new MessageFilter(); filter.setMinMessageId(messageId); @@ -171,6 +176,16 @@ Message fetchMessage(String channelId, long messageId) throws ClientException { return messages.get(0); } + /** + * Reads one message back through the decrypting path. {@link #fetchMessage} asks the server + * for the content as stored, so an encrypting channel's content arrives as ciphertext; this + * call leaves the DAO decrypting, which is what the administrator sees in the message browser. + */ + Message fetchDecryptedMessage(String channelId, long messageId, List metaDataIds) + throws ClientException { + return client.getMessageContent(channelId, messageId, metaDataIds); + } + /** Undeploys and removes a channel, tolerating failures so teardown always continues. */ void removeChannel(String channelId) { deployedChannelIds.remove(channelId); diff --git a/smoketest/src/test/resources/channels/encryption-at-rest.xml b/smoketest/src/test/resources/channels/encryption-at-rest.xml new file mode 100644 index 0000000000..765376cb75 --- /dev/null +++ b/smoketest/src/test/resources/channels/encryption-at-rest.xml @@ -0,0 +1,191 @@ + + bfeb4c3b-d1f5-4c31-9645-947a70411175 + 2 + encryption-at-rest + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Prefix the message + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + true + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From 484d9cb3f8b23613d9223745432936bc93cb03a4 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 21:24:45 -0500 Subject: [PATCH 18/28] Add atomic set configuration map entry endpoint Signed-off-by: Mitch Gaffigan --- .../java/com/mirth/connect/client/core/Client.java | 10 ++++++++++ .../api/servlets/ConfigurationServletInterface.java | 8 ++++++++ .../server/api/servlets/ConfigurationServlet.java | 9 +++++++++ .../server/controllers/ConfigurationController.java | 13 +++++++++++++ .../controllers/DefaultConfigurationController.java | 7 +++++++ 5 files changed, 47 insertions(+) diff --git a/server/src/main/java/com/mirth/connect/client/core/Client.java b/server/src/main/java/com/mirth/connect/client/core/Client.java index a927508d67..e5d0a3688e 100644 --- a/server/src/main/java/com/mirth/connect/client/core/Client.java +++ b/server/src/main/java/com/mirth/connect/client/core/Client.java @@ -809,6 +809,16 @@ public void setConfigurationMap(Map map) throws C getServlet(ConfigurationServletInterface.class).setConfigurationMap(map); } + /** + * Updates a single entry in the configuration map, leaving the rest alone. + * + * @see ConfigurationServletInterface#setConfigurationProperty + */ + @Override + public void setConfigurationProperty(String key, ConfigurationProperty property) throws ClientException { + getServlet(ConfigurationServletInterface.class).setConfigurationProperty(key, property); + } + /** * Returns the database driver list. * diff --git a/server/src/main/java/com/mirth/connect/client/core/api/servlets/ConfigurationServletInterface.java b/server/src/main/java/com/mirth/connect/client/core/api/servlets/ConfigurationServletInterface.java index 9f8d391bfe..4c9ca4907e 100644 --- a/server/src/main/java/com/mirth/connect/client/core/api/servlets/ConfigurationServletInterface.java +++ b/server/src/main/java/com/mirth/connect/client/core/api/servlets/ConfigurationServletInterface.java @@ -306,6 +306,14 @@ public void setConfigurationMap(@Param("map") @RequestBody(description = "The ne @Content(mediaType = MediaType.APPLICATION_JSON, examples = { @ExampleObject(name = "configurationMap", ref = "../apiexamples/configuration_map_json") }) }) Map map) throws ClientException; + @PUT + @Path("/configurationMap/{key}") + @Operation(summary = "Updates a single entry in the configuration map, leaving the rest alone.") + @MirthOperation(name = "setConfigurationProperty", display = "Set configuration map entry", permission = Permissions.CONFIGURATION_MAP_EDIT) + public void setConfigurationProperty( + @Param("key") @Parameter(description = "The key of the entry to set.", required = true) @PathParam("key") String key, + @Param("property") @RequestBody(description = "The value and comment to store under the key.", required = true) ConfigurationProperty property) throws ClientException; + @GET @Path("/databaseDrivers") @Operation(summary = "Returns the database driver list.") diff --git a/server/src/main/java/com/mirth/connect/server/api/servlets/ConfigurationServlet.java b/server/src/main/java/com/mirth/connect/server/api/servlets/ConfigurationServlet.java index 67dd3419fc..e58740be3a 100644 --- a/server/src/main/java/com/mirth/connect/server/api/servlets/ConfigurationServlet.java +++ b/server/src/main/java/com/mirth/connect/server/api/servlets/ConfigurationServlet.java @@ -306,6 +306,15 @@ public void setConfigurationMap(Map map) { } } + @Override + public void setConfigurationProperty(String key, ConfigurationProperty property) { + try { + configurationController.setConfigurationProperty(key, property); + } catch (ControllerException e) { + throw new MirthApiException(e); + } + } + @Override public List getDatabaseDrivers() { try { diff --git a/server/src/main/java/com/mirth/connect/server/controllers/ConfigurationController.java b/server/src/main/java/com/mirth/connect/server/controllers/ConfigurationController.java index e4a9ce88c3..7aa1d49dd1 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/ConfigurationController.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/ConfigurationController.java @@ -328,6 +328,19 @@ public static ConfigurationController getInstance() { */ public abstract void setConfigurationProperties(Map map, boolean persist) throws ControllerException; + /** + * Sets a single configuration map entry, leaving every other entry alone. Doing the + * read-modify-write here rather than in the caller is what makes it atomic: a client can only + * replace the whole map, so two clients updating different keys at once would otherwise drop + * each other's writes. + * + * @param key + * The key of the entry to set. + * @param property + * The value and comment to store under the key. + */ + public abstract void setConfigurationProperty(String key, ConfigurationProperty property) throws ControllerException; + // properties public Properties getPropertiesForGroup(String group) { return getPropertiesForGroup(group, null); diff --git a/server/src/main/java/com/mirth/connect/server/controllers/DefaultConfigurationController.java b/server/src/main/java/com/mirth/connect/server/controllers/DefaultConfigurationController.java index bfee2eddbf..bc01bd9e94 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/DefaultConfigurationController.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/DefaultConfigurationController.java @@ -938,6 +938,13 @@ public synchronized void setConfigurationProperties(Map properties = getConfigurationProperties(); + properties.put(key, property); + setConfigurationProperties(properties, true); + } + @Override public void setStatus(int status) { this.status = status; From 3bb6ea9410dca69e9fbd0c581616d8bd231b3531 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 20:44:43 -0500 Subject: [PATCH 19/28] Translate QueueTests and others to ci and unit tests Signed-off-by: Mitch Gaffigan --- .../queue/ConnectorMessageQueueTest.java | 294 ++++++++++ .../mirth/connect/donkey/test/QueueTests.java | 504 ------------------ .../DestinationQueueRotationTest.java | 118 ++++ .../smoketest/DestinationQueueTest.java | 102 ++++ .../smoketest/Harness.java | 55 ++ .../smoketest/HarnessConfig.java | 12 +- .../smoketest/OieServer.java | 70 ++- .../smoketest/SourceQueueTest.java | 229 ++++++++ .../channels/destination-queue-rotate.xml | 197 +++++++ .../resources/channels/destination-queue.xml | 195 +++++++ .../resources/channels/source-queue-order.xml | 198 +++++++ 11 files changed, 1460 insertions(+), 514 deletions(-) create mode 100644 donkey/src/test/java/com/mirth/connect/donkey/server/queue/ConnectorMessageQueueTest.java delete mode 100644 donkey/src/test/java/com/mirth/connect/donkey/test/QueueTests.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueRotationTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/SourceQueueTest.java create mode 100644 smoketest/src/test/resources/channels/destination-queue-rotate.xml create mode 100644 smoketest/src/test/resources/channels/destination-queue.xml create mode 100644 smoketest/src/test/resources/channels/source-queue-order.xml diff --git a/donkey/src/test/java/com/mirth/connect/donkey/server/queue/ConnectorMessageQueueTest.java b/donkey/src/test/java/com/mirth/connect/donkey/server/queue/ConnectorMessageQueueTest.java new file mode 100644 index 0000000000..4cc8b63c14 --- /dev/null +++ b/donkey/src/test/java/com/mirth/connect/donkey/server/queue/ConnectorMessageQueueTest.java @@ -0,0 +1,294 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package com.mirth.connect.donkey.server.queue; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.donkey.server.Donkey; +import com.mirth.connect.donkey.server.event.EventDispatcher; + +/** + * The buffer arithmetic in {@link ConnectorMessageQueue}: how much of the queue is held in + * memory, what {@code add} does once the buffer is full, and that polling still walks the + * whole queue in order by going back to the data source. + * + *

      The queue is a window onto rows the engine has already committed, so the data source + * here is a plain map standing in for those rows rather than a database. That is the whole + * point of testing it at this level: the arithmetic is the same on every dialect, and a fake + * makes the buffer boundaries exact instead of a race against a live channel. + */ +public class ConnectorMessageQueueTest { + + private static final String CHANNEL_ID = "ConnectorMessageQueueTest"; + private static final String CHANNEL_NAME = "ConnectorMessageQueueTest"; + private static final String SERVER_ID = "ConnectorMessageQueueTestServer"; + private static final int META_DATA_ID = 0; + + private static final int BUFFER_CAPACITY = 3; + private static final int QUEUE_SIZE = 10; + + private FakeDataSource dataSource; + private SourceQueue queue; + + /** + * {@link ConnectorMessageQueue} dispatches a queue-size event on every mutation and reads + * its dispatcher off the {@link Donkey} singleton, which is only populated by a started + * engine. Inject a mock one instead, as ChannelTest does. + */ + @BeforeClass + public static void injectDonkey() { + Donkey donkey = mock(Donkey.class); + when(donkey.getEventDispatcher()).thenReturn(mock(EventDispatcher.class)); + + Injector injector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + requestStaticInjection(Donkey.class); + bind(Donkey.class).toInstance(donkey); + } + }); + injector.getInstance(Donkey.class); + + assertTrue("Donkey singleton injection failed", donkey == Donkey.getInstance()); + } + + @Before + public void setUp() { + dataSource = new FakeDataSource(); + queue = new SourceQueue(); + queue.setBufferCapacity(BUFFER_CAPACITY); + queue.setDataSource(dataSource); + } + + /** + * The buffer is a window, not a copy: filling it from a data source holding more messages + * than the buffer can take leaves the queue reporting the full size and the buffer the + * capacity. + */ + @Test + public void fillBufferReadsAtMostTheBufferCapacity() { + storeMessages(QUEUE_SIZE); + + queue.updateSize(); + queue.fillBuffer(); + + assertEquals(BUFFER_CAPACITY, queue.getBufferCapacity()); + assertEquals(QUEUE_SIZE, queue.size()); + assertEquals(BUFFER_CAPACITY, queue.getBufferSize()); + } + + /** + * {@code add} is called once per message the engine has just committed. Up to the capacity + * it puts the message straight into the buffer; past it the buffer stops growing while the + * queue keeps counting, so the extra messages are only reachable through the data source. + */ + @Test + public void addPastTheBufferCapacityGrowsTheQueueButNotTheBuffer() { + syncWithEmptyDataSource(); + + for (int i = 1; i <= BUFFER_CAPACITY; i++) { + queue.add(storeMessage(i)); + assertEquals("queue size after adding message " + i, i, queue.size()); + assertEquals("buffer size after adding message " + i, i, queue.getBufferSize()); + } + + for (int i = BUFFER_CAPACITY + 1; i <= QUEUE_SIZE; i++) { + queue.add(storeMessage(i)); + assertEquals("queue size after adding message " + i, i, queue.size()); + assertEquals("buffer size after adding message " + i, BUFFER_CAPACITY, queue.getBufferSize()); + } + } + + /** + * Polling past the buffer is the behaviour the capacity exists for: the queue refills from + * the data source when the buffer runs dry, so every message comes out exactly once and in + * the order the data source holds them, and the queue ends empty. + * + *

      Every message here is committed and then added, which is what the engine guarantees by + * doing both under this queue's own lock. + * {@link #rowsCommittedWithoutBeingAddedAreStrandedUntilTheQueueResyncs} is the counterfactual + * for what that lock is holding off. + */ + @Test + public void pollingRefillsTheBufferAndReturnsEveryMessageInOrder() { + syncWithEmptyDataSource(); + for (int i = 1; i <= QUEUE_SIZE; i++) { + queue.add(storeMessage(i)); + } + + List polled = drain(); + + assertEquals(expectedIds(QUEUE_SIZE), polled); + assertEquals(0, queue.size()); + assertTrue("the buffer only holds " + BUFFER_CAPACITY + " of " + QUEUE_SIZE + " messages, so" + + " draining the queue must have gone back to the data source for more", + dataSource.readCount > 1); + } + + /** + * The queue's size is a count of what has been added to it, not of what is committed, so a + * row committed without a matching {@code add} is invisible to it: the queue hands over the + * message it does know about, then reports itself empty while those rows are still there. + * + *

      This is why the engine commits a source message and adds it to the queue under the same + * lock. Nothing a client can do opens this window - it takes a write that bypasses the queue, + * which is what this test does directly - but it is also what an unclean shutdown leaves + * behind, and the recovery at the end is the same resync a redeploy performs. + */ + @Test + public void rowsCommittedWithoutBeingAddedAreStrandedUntilTheQueueResyncs() { + syncWithEmptyDataSource(); + + // Committed, but the add never happened. + int strandedCount = BUFFER_CAPACITY + 1; + storeMessages(strandedCount); + + // A later message committed and added the ordinary way. + long addedId = strandedCount + 1; + queue.add(storeMessage(addedId)); + + assertEquals("the queue counts what was added to it", 1, queue.size()); + assertEquals("every message is committed", strandedCount + 1, dataSource.getSize()); + + // The one message the queue knows about comes out, and then it calls itself empty. + ConnectorMessage polled = queue.poll(); + assertEquals(addedId, polled.getMessageId()); + dataSource.rows.remove(polled.getMessageId()); + queue.finish(polled); + assertNull("the queue reports itself empty while committed rows are still there", + queue.poll()); + + // Resyncing against the data source is what finds them again, in order. + queue.invalidate(false, true); + queue.updateSize(); + + assertEquals(strandedCount, queue.size()); + assertEquals(expectedIds(strandedCount), drain()); + } + + /** + * Shrinking the capacity discards the buffer rather than truncating it, because the + * messages it holds may no longer be the ones a smaller window should start from. The + * queue size is untouched and the next poll refills, so nothing is lost or reordered. + */ + @Test + public void shrinkingTheBufferCapacityDiscardsTheBufferWithoutLosingMessages() { + storeMessages(QUEUE_SIZE); + queue.updateSize(); + queue.fillBuffer(); + assertEquals(BUFFER_CAPACITY, queue.getBufferSize()); + + queue.setBufferCapacity(1); + + assertEquals(0, queue.getBufferSize()); + assertEquals(QUEUE_SIZE, queue.size()); + assertEquals(expectedIds(QUEUE_SIZE), drain()); + } + + /** + * Brings the queue in sync with an empty data source. {@code setDataSource} invalidates the + * queue, and until it is filled once, {@code add} takes its resync path rather than the + * buffering path under test. + */ + private void syncWithEmptyDataSource() { + queue.updateSize(); + queue.fillBuffer(); + assertEquals(0, queue.size()); + } + + /** + * Polls the queue dry the way a queue thread does: every message that comes out is finished + * and its row removed, so a refill sees only what is genuinely still queued. + */ + private List drain() { + List polled = new ArrayList(); + + ConnectorMessage connectorMessage; + while ((connectorMessage = queue.poll()) != null) { + polled.add(connectorMessage.getMessageId()); + dataSource.rows.remove(connectorMessage.getMessageId()); + queue.finish(connectorMessage); + } + + assertNull(queue.poll()); + return polled; + } + + private void storeMessages(int count) { + for (int i = 1; i <= count; i++) { + storeMessage(i); + } + } + + private ConnectorMessage storeMessage(long messageId) { + ConnectorMessage connectorMessage = new ConnectorMessage(CHANNEL_ID, CHANNEL_NAME, messageId, META_DATA_ID, + SERVER_ID, Calendar.getInstance(), Status.RECEIVED); + dataSource.rows.put(messageId, connectorMessage); + return connectorMessage; + } + + private static List expectedIds(int count) { + List ids = new ArrayList(); + for (long i = 1; i <= count; i++) { + ids.add(i); + } + return ids; + } + + /** + * The committed queue rows, in message id order. The real data source runs a bounded + * {@code getConnectorMessages} query against the channel's queue table; this one pages the + * same way over a map, and counts the reads so a test can tell a refill happened. + */ + private static final class FakeDataSource extends ConnectorMessageQueueDataSource { + + final Map rows = new LinkedHashMap(); + int readCount; + + FakeDataSource() { + super(CHANNEL_ID, SERVER_ID, META_DATA_ID, Status.RECEIVED, false, null); + } + + @Override + public int getSize() { + return rows.size(); + } + + @Override + public Map getItems(int offset, int limit) { + readCount++; + + Map page = new LinkedHashMap(); + for (ConnectorMessage connectorMessage : rows.values()) { + if (offset > 0) { + offset--; + } else if (page.size() < limit) { + page.put(connectorMessage.getMessageId(), connectorMessage); + } else { + break; + } + } + return page; + } + } +} diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/QueueTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/QueueTests.java deleted file mode 100644 index ccc259a182..0000000000 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/QueueTests.java +++ /dev/null @@ -1,504 +0,0 @@ -/* - * 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.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mirth.connect.donkey.model.channel.DeployedState; -import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.Message; -import com.mirth.connect.donkey.model.message.RawMessage; -import com.mirth.connect.donkey.model.message.Status; -import com.mirth.connect.donkey.server.Donkey; -import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.ChannelException; -import com.mirth.connect.donkey.server.channel.DestinationChainProvider; -import com.mirth.connect.donkey.server.channel.DispatchResult; -import com.mirth.connect.donkey.server.controllers.ChannelController; -import com.mirth.connect.donkey.server.data.DonkeyDaoFactory; -import com.mirth.connect.donkey.server.queue.ConnectorMessageQueue; -import com.mirth.connect.donkey.server.queue.ConnectorMessageQueueDataSource; -import com.mirth.connect.donkey.server.queue.SourceQueue; -import com.mirth.connect.donkey.test.util.TestChannel; -import com.mirth.connect.donkey.test.util.TestDispatcher; -import com.mirth.connect.donkey.test.util.TestDispatcherProperties; -import com.mirth.connect.donkey.test.util.TestPostProcessor; -import com.mirth.connect.donkey.test.util.TestPreProcessor; -import com.mirth.connect.donkey.test.util.TestSourceConnector; -import com.mirth.connect.donkey.test.util.TestUtils; - -public class QueueTests { - private static int TEST_SIZE = 10; - private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; - private static String channelName = TestUtils.DEFAULT_CHANNEL_ID; - private static String serverId = TestUtils.DEFAULT_SERVER_ID; - private static String testMessage = TestUtils.TEST_HL7_MESSAGE; - private static DonkeyDaoFactory daoFactory; - - @BeforeClass - final public static void beforeClass() throws StartException { - Donkey.getInstance().startEngine(TestUtils.getDonkeyTestConfiguration()); - daoFactory = TestUtils.getDaoFactory(); - } - - @AfterClass - final public static void afterClass() throws StartException { - Donkey.getInstance().stopEngine(); - } - - /* - * Create a new DatabaseLinkedBlockingQueue Set the select and count statements, fill the queue - * buffer, and assert that: - The buffer capacity was set correctly - The buffer size is correct - * - * Send messages, then assert that: - All messages were successfully put in the queue - The - * buffer size is still correct - * - * Flush the queue, then assert that: - The queue size shrank correctly - The buffer size shrank - * correctly - */ - @Test - public final void testDatabaseLinkedBlockingQueue() throws SQLException { - int testSize = TEST_SIZE; - int bufferCapacity = 10; - - TestUtils.initChannel(channelId); - - SourceQueue queue = new SourceQueue(); - queue.setBufferCapacity(bufferCapacity); - queue.setDataSource(new ConnectorMessageQueueDataSource(channelId, serverId, 0, Status.RECEIVED, false, daoFactory)); - queue.updateSize(); - queue.fillBuffer(); - - assertEquals(bufferCapacity, queue.getBufferCapacity()); - assertEquals(Math.min(bufferCapacity, queue.size()), queue.getBufferSize()); - - int initialSize = queue.size(); - int initialBufferSize = queue.getBufferSize(); - - for (int i = 0; i < testSize; i++) { - ConnectorMessage connectorMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channelId, channelName, serverId, daoFactory).getConnectorMessages().get(0); - queue.add(connectorMessage); - } - - assertEquals(initialSize + testSize, queue.size()); - assertEquals(Math.min(bufferCapacity, queue.size()), queue.getBufferSize()); - - for (int i = 0; i < testSize; i++) { - try { - queue.poll(10, TimeUnit.MILLISECONDS); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - assertEquals(initialSize, queue.size()); - assertEquals(Math.max(0, initialBufferSize - testSize), queue.getBufferSize()); - } - - /* - * Start up a new channel, and assert that: - The channel's queue thread is currently running - * Then stop the channel and assert that: - The channel's queue thread has stopped running - * - * While the channel is stopped, send messages, assert that: - The queue size is equal to the - * test size Start the channel back up, wait a while, assert that: - The queue size is zero - * - * While the channel is still running, send messages, assert that: - The queue size is greater - * than zero Wait a while, then assert that: - The queue size is zero - */ - @Test - public final void testSourceQueue() throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - channel.getSourceConnector().setRespondAfterProcessing(false); - - // Start up a default channel - channel.deploy(); - channel.start(null); - - // give the queue thread time to start - Thread.sleep(3000); - - // Assert that the source queue thread is running - assertTrue(channel.isQueueThreadRunning()); - - // Stop the channel - channel.stop(); - - // Assert that the source queue thread is not longer running - assertFalse(channel.isQueueThreadRunning()); - - // Place messages in the channel's source queue while the channel is stopped - for (int i = 1; i <= TEST_SIZE; i++) { - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - channel.queue(sourceMessage); - } - - // Assert that all the messages were successfully placed in the queue - assertEquals(channel.getSourceQueue().size(), TEST_SIZE); - - // Start up the channel - channel.start(null); - - Thread.sleep(500 * TEST_SIZE); - - // Assert that the queue has been cleared - assertEquals(channel.getSourceQueue().size(), 0); - - // Place messages in the channel's source queue while the channel is started - for (int i = 1; i <= TEST_SIZE; i++) { - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - channel.queue(sourceMessage); - } - - // Assert that the queue size is greater than zero (may fail for small test sizes) - assertTrue(channel.getSourceQueue().size() > 0); - - Thread.sleep(500 * TEST_SIZE); - - // Assert that the queue has cleared - assertEquals(channel.getSourceQueue().size(), 0); - - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channelId); - } - - /* - * Start up a new channel, queue up more messages in the channel than the size of the source - * queue buffer - * - * Send a message (not waiting for destinations) that will cause the data to get written to the - * database, but the queue size is never incremented - * - * Asynchronously queue up another message normally, wait a bit to let the asynchronous message - * get written to the database and queued - * - * Queue up the message from before that wasn't queued, wait for the queue to clear, then assert - * that: - The number of messages processed through the channel is less than the initial number - * of messages sent plus two - The second-to-last message in the messageIds list was processed, - * but the last one was not - */ - @Test - public final void testSourceQueueOrderAsync() throws Exception { - int testSize = 2; - final List messageIds = new ArrayList(); - final TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - channel.getSourceConnector().setRespondAfterProcessing(false); - - // Deploy a default channel - channel.deploy(); - channel.start(null); - - ConnectorMessageQueue sourceQueue = channel.getSourceQueue(); - int initialSize = sourceQueue.getBufferCapacity() * testSize + 1; - - // Queue up messages normally - System.out.println("Queuing " + initialSize + " messages normally..."); - for (int i = 1; i <= initialSize; i++) { - DispatchResult dispatchResult = channel.getSourceConnector().dispatchRawMessage(new RawMessage(testMessage, null, null)); - messageIds.add(dispatchResult.getMessageId()); - channel.getSourceConnector().finishDispatch(dispatchResult); - } - - ConnectorMessage sourceMessage = null; - - /* - * Send a message (not waiting for destinations) that will cause the data to get written to - * the database, but the queue size is never incremented - */ - System.out.println("Saving a message to the database without calling the queue method..."); - RawMessage rawMessage = new RawMessage(testMessage, null, null); - sourceMessage = TestUtils.createAndStoreNewMessage(rawMessage, channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - messageIds.add(sourceMessage.getMessageId()); - - // Asynchronously queue up another message normally - Thread thread = new Thread() { - @Override - public void run() { - System.out.println("Queuing another message normally and asynchronously..."); - DispatchResult dispatchResult = null; - - try { - dispatchResult = channel.getSourceConnector().dispatchRawMessage(new RawMessage(testMessage, null, null)); - } catch (ChannelException e) { - throw new AssertionError(e); - } finally { - channel.getSourceConnector().finishDispatch(dispatchResult); - } - - messageIds.add(dispatchResult.getMessageId()); - } - }; - thread.start(); - - /* - * Wait until the queue has cleared to simulate a delay between committing the message to - * the database and adding it to the channel's queue. Meanwhile the asynchronous message - * should be queued - */ - while (sourceQueue.size() > 0 && channel.isQueueThreadRunning() && channel.getCurrentState() == DeployedState.STARTED) { - System.out.println("Waiting for queue to clear, size: " + sourceQueue.size()); - Thread.sleep(1000); - } - - /* - * Queue up the message from before that wasn't queued. Even though this message has the - * lower message ID, because the asynchronous message was queued before this one (increasing - * the queue size), the queue buffer will have been filled with THIS message (not the - * asynchronous one). Therefore, this message should have already been processed through the - * channel. Queuing the same message again should cause a foreign key constraint violation. - */ - System.out.println("Calling the queue method for the previous message that wasn't queued..."); - channel.queue(sourceMessage); - - // Wait until the queue has cleared - while (sourceQueue.size() > 0 && channel.isQueueThreadRunning() && channel.getCurrentState() == DeployedState.STARTED) { - System.out.println("Waiting for queue to clear, size: " + sourceQueue.size()); - Thread.sleep(5000); - } - - // Assert that the number of messages processed through the channel is NOT correct - assertTrue(channel.getNumMessages() < initialSize + 2); - - // Assert that the second-to-last message in the messageIds list was processed, but the last one was not - assertTrue(channel.getMessageIds().contains(messageIds.get(messageIds.size() - 2))); - assertFalse(channel.getMessageIds().contains(messageIds.get(messageIds.size() - 1))); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Start up a new channel, queue up more messages in the channel than the size of the source - * queue buffer - * - * Synchronize on the channel's source queue so that commits and queue additions happen in the - * same thread always - * - * Send a message (not waiting for destinations) that will cause the data to get written to the - * database, but the queue size is never incremented - * - * Asynchronously queue up another message normally, wait a while to simulate a delay between - * the commit and queue addition (the asynchronous message should not be queued) - * - * Queue up the message from before that wasn't queued, wait for the queue to clear, then assert - * that: - The number of messages processed through the channel is equal to the initial number - * of messages sent plus two - The messageIds list is identical (size and order) to the message - * ID list generated by the test channel (that is, all messages successfully processed through - * the channel and in the right order) - */ - @Test - public final void testSourceQueueOrderSync() throws Exception { - int testSize = 2; - final List messageIds = new ArrayList(); - final TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId); - channel.getSourceConnector().setRespondAfterProcessing(false); - - // Deploy a default channel - channel.deploy(); - channel.start(null); - - ConnectorMessageQueue sourceQueue = channel.getSourceQueue(); - int initialSize = sourceQueue.getBufferCapacity() * testSize + 1; - - // Queue up messages normally - System.out.println("Queuing " + initialSize + " messages normally..."); - for (int i = 1; i <= initialSize; i++) { - DispatchResult dispatchResult = channel.getSourceConnector().dispatchRawMessage(new RawMessage(testMessage, null, null)); - messageIds.add(dispatchResult.getMessageId()); - channel.getSourceConnector().finishDispatch(dispatchResult); - } - - ConnectorMessage sourceMessage = null; - - synchronized (channel.getSourceQueue()) { - /* - * Send a message (not waiting for destinations) that will cause the data to get written - * to the database, but the queue size is never incremented - */ - System.out.println("Saving a message to the database without calling the queue method..."); - RawMessage rawMessage = new RawMessage(testMessage, null, null); - sourceMessage = TestUtils.createAndStoreNewMessage(rawMessage, channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - messageIds.add(sourceMessage.getMessageId()); - - // Asynchronously queue up another message normally - Thread thread = new Thread() { - @Override - public void run() { - System.out.println("Queuing another message normally and asynchronously..."); - DispatchResult dispatchResult = null; - - try { - dispatchResult = channel.getSourceConnector().dispatchRawMessage(new RawMessage(testMessage, null, null)); - } catch (ChannelException e) { - throw new AssertionError(e); - } finally { - channel.getSourceConnector().finishDispatch(dispatchResult); - } - - messageIds.add(dispatchResult.getMessageId()); - } - }; - thread.start(); - - /* - * Wait a while to simulate a delay between committing the message to the database and - * adding it to the channel's queue. The thread processing the asynchronous message - * should be waiting on this block to finish, so it should not add the message to the - * source queue - */ - System.out.println("Waiting ten seconds..."); - Thread.sleep(10000); - - // Queue up the message from before that wasn't queued - System.out.println("Calling the queue method for the previous message that wasn't queued..."); - channel.queue(sourceMessage); - } - - // Wait until the queue has cleared - while (sourceQueue.size() > 0 && channel.isQueueThreadRunning() && channel.getCurrentState() == DeployedState.STARTED) { - System.out.println("Waiting for queue to clear, size: " + sourceQueue.size()); - Thread.sleep(5000); - } - - // Assert that the number of messages processed through the channel is correct - assertEquals(initialSize + 2, channel.getNumMessages()); - // Assert that all messages were processed through the channel in the order of database insertion - assertTrue(messageIds.equals(channel.getMessageIds())); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Create a new channel with a test dispatcher destination connector The dispatcher initially - * queues all messages Start up the channel, and assert that: - The destination connector queue - * thread is running - * - * Send messages, and assert that: - The queue size is equal to the test size - * - * Change the response status that the dispatcher returns to SENT Wait a bit, then assert that: - * - The queue size is zero - * - * Stop the channel, assert that: - The destination connector queue thread is not running - * - * Place messages directly in the destination connector queue, assert that: - All the messages - * were successfully put in the queue - * - * Start the channel, wait a bit, then assert that: - The queue size is zero - */ - @Test - public final void testDestinationQueue() throws Exception { - TestUtils.initChannel(channelId); - - TestChannel channel = new TestChannel(); - - channel.setChannelId(channelId); - channel.setServerId(serverId); - - channel.setPreProcessor(new TestPreProcessor()); - channel.setPostProcessor(new TestPostProcessor()); - - TestSourceConnector sourceConnector = (TestSourceConnector) TestUtils.createDefaultSourceConnector(); - sourceConnector.setChannelId(channel.getChannelId()); - sourceConnector.setChannel(channel); - channel.setSourceConnector(sourceConnector); - channel.getSourceConnector().setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - // The TestDispatcher send method initially always returns a response of QUEUED - TestDispatcher destinationConnector = new TestDispatcher(); - - TestDispatcherProperties connectorProperties = new TestDispatcherProperties(); - connectorProperties.setTemplate(testMessage); - connectorProperties.getDestinationConnectorProperties().setQueueEnabled(true); - connectorProperties.getDestinationConnectorProperties().setRegenerateTemplate(true); - - TestUtils.initDefaultDestinationConnector(destinationConnector, connectorProperties); - destinationConnector.setChannelId(channelId); - - destinationConnector.setMetaDataReplacer(sourceConnector.getMetaDataReplacer()); - destinationConnector.setMetaDataColumns(channel.getMetaDataColumns()); - destinationConnector.setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - DestinationChainProvider chain = new DestinationChainProvider(); - chain.setChannelId(channelId); - chain.addDestination(1, destinationConnector); - channel.addDestinationChainProvider(chain); - - // Start up the channel - channel.deploy(); - channel.start(null); - - Thread.sleep(1000); - - // Assert that the destination connector queue thread is running - assertTrue(destinationConnector.isQueueThreadRunning()); - - // Send messages while the channel is started - for (int i = 1; i <= TEST_SIZE; i++) { - sourceConnector.readTestMessage(testMessage); - } - - // Since the messages should all get queued, assert that the queue size is equal to the test size - assertEquals(destinationConnector.getQueue().size(), TEST_SIZE); - - // Tell the dispatcher to now send a response status of SENT - destinationConnector.setReturnStatus(Status.SENT); - - Thread.sleep(500 * TEST_SIZE); - - // Assert that all the queued messages have been sent - assertEquals(destinationConnector.getQueue().size(), 0); - - // Stop the channel - channel.stop(); - - // Assert that the destination connector queue thread is not running - assertFalse(destinationConnector.isQueueThreadRunning()); - - // Place messages directly into the destination connector's queue - for (int i = 1; i <= TEST_SIZE; i++) { - synchronized (destinationConnector.getQueue()) { - Message message = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channelId, channelName, serverId, daoFactory); - ConnectorMessage destinationMessage = TestUtils.createAndStoreDestinationConnectorMessage(daoFactory, channelId, channelName, serverId, message.getMessageId(), destinationConnector.getMetaDataId(), testMessage, Status.QUEUED); - destinationConnector.getQueue().add(destinationMessage); - } - } - - // Assert that all the messages were successfully placed in the queue - assertEquals(TEST_SIZE, destinationConnector.getQueue().size() - 1); - - // Start the channel back up - channel.start(null); - - Thread.sleep(500 * TEST_SIZE); - - // Since the dispatcher should still always be returning a response status of SENT, the queue should be clear again - assertEquals(0, destinationConnector.getQueue().size()); - - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channelId); - } -} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueRotationTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueRotationTest.java new file mode 100644 index 0000000000..635dc0aeb8 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueRotationTest.java @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Status; + +/** + * A rotating destination queue steps over the message at its head rather than retrying it + * forever, so one message that never sends does not hold up the ones behind it. + * + *

      The first message submitted is the one the destination never accepts, and it therefore + * owns the head of the queue for the whole test. Without rotation the queue thread would keep + * re-acquiring it and nothing else would ever be sent, so every later message reaching SENT is + * the rotation, not just a slow queue. + * + *

      The order they are sent in is deliberately not asserted. Rotation moves the queue's starting + * point past whatever it just returned, so a message can come round on a later cycle than the one + * that was queued after it - a run of this has produced 2, 3, 4, 1. Reordering is what rotation + * is; the claim is that each message is sent exactly once. + * + *

      That the stuck message is still queued is read once, after the others are all sent: by then + * the queue thread has demonstrably been past it, so nothing has to be inferred from a wait. + */ +@DisplayName("220-queueing/03-destination-queue-rotation") +@TestInstance(PER_CLASS) +class DestinationQueueRotationTest { + + private static final String CHANNEL = "channels/destination-queue-rotate.xml"; + + /** The configuration property the destination leaves messages queued on until it holds this run's token. */ + private static final String GATE = "oie.smoketest.releaseDestinationQueueRotate"; + + private static final int DESTINATION = 1; + + /** What the destination prefixes its handover position with. */ + private static final String POSITION = "order="; + + /** Messages behind the stuck one, which all send once the gate is open. */ + private static final int SENDABLE_COUNT = 4; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void aMessageThatNeverSendsDoesNotBlockTheOnesQueuedBehindIt() throws Exception { + // The payload carries this run's token, so a gate left open by an earlier run cannot + // release this one. The first message is the stuck one, and being first it is also the + // one the queue would otherwise acquire over and over. + String token = UUID.randomUUID().toString(); + long stuckMessageId; + List sendableMessageIds = new ArrayList<>(); + + try { + stuckMessageId = SharedServer.get().submitMessage(channelId, token + "#stuck", new LinkedHashMap<>()); + for (int i = 1; i <= SENDABLE_COUNT; i++) { + sendableMessageIds.add( + SharedServer.get().submitMessage(channelId, token + "#" + i, new LinkedHashMap<>())); + } + + Harness.awaitQueueSizeAtLeast(channelId, DESTINATION, SENDABLE_COUNT + 1); + } finally { + // Also on failure, so the gate is never left holding an earlier run's token. + Harness.setConfigurationProperty(GATE, token); + } + + List positions = new ArrayList<>(); + for (long messageId : sendableMessageIds) { + ConnectorMessage sent = Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.SENT); + String stamp = MessageAssertions.responsePayload(sent.getResponse().getContent()); + assertTrue(stamp != null && stamp.startsWith(POSITION), + "message " + messageId + " has an unexpected destination response: " + stamp); + positions.add(Integer.valueOf(stamp.substring(POSITION.length()))); + } + + // Sorted, because which cycle a message comes round on is rotation's business. That the + // positions are distinct and leave no gap is the claim: four messages, four handovers. + Collections.sort(positions); + List distinctPositions = new ArrayList<>(); + for (int i = 1; i <= SENDABLE_COUNT; i++) { + distinctPositions.add(i); + } + assertEquals(distinctPositions, positions, + "rotation should step over the stuck message and send each of the others exactly once"); + + // Every message behind it has been sent, so the queue thread has acquired and returned the + // stuck one at least that many times. It is still queued: rotation moved past it rather + // than failing it or dropping it. + assertEquals(Status.QUEUED, Harness.connectorMessage(channelId, stuckMessageId, DESTINATION).getStatus(), + "rotation should leave the stuck message on the queue, not end it"); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueTest.java new file mode 100644 index 0000000000..130e7dba2e --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/DestinationQueueTest.java @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Status; + +/** + * A destination queue outlives the channel that owns it: messages a failing destination could + * not send are still queued after the channel is stopped and started, and the queue thread + * drains them in message order once the destination accepts them. + * + *

      The destination's in-memory buffer is set to 3 and the test queues eight messages, so the + * queue the restarted channel drains cannot be the buffer it filled before the stop - it has to + * be reloaded from the database and paged through. + * + *

      The gate stays shut across the whole stop and start, so every step here is a positive + * signal the server reports - queue depth, deployed state, connector status - and nothing is + * inferred from time passing. That a stopped channel does not send at all is a channel + * lifecycle claim rather than a queueing one, and is not asserted here. + */ +@DisplayName("220-queueing/02-destination-queue") +@TestInstance(PER_CLASS) +class DestinationQueueTest { + + private static final String CHANNEL = "channels/destination-queue.xml"; + + /** The configuration property the destination fails on until it holds this run's token. */ + private static final String GATE = "oie.smoketest.releaseDestinationQueue"; + + private static final int DESTINATION = 1; + + private static final int MESSAGE_COUNT = 8; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void queuedMessagesSurviveAChannelRestartAndDrainInOrder() throws Exception { + // The payload carries this run's token, so a gate left open by an earlier run cannot + // release this one, and an index, so a failure names the message that came out of order. + String token = UUID.randomUUID().toString(); + List messageIds = new ArrayList<>(); + + try { + for (int i = 1; i <= MESSAGE_COUNT; i++) { + messageIds.add(SharedServer.get().submitMessage(channelId, token + "#" + i, new LinkedHashMap<>())); + } + // The destination leaves every message on the queue while the gate is shut, so the + // queue is at its full depth - past the buffer it holds in memory - before the stop. + Harness.awaitQueueSizeAtLeast(channelId, DESTINATION, MESSAGE_COUNT); + + // Take the channel down and back up with the queue full and the gate still shut, so + // the queue the restarted channel drains is the one it reloaded from the database. + Harness.stopChannel(channelId); + Harness.startChannel(channelId); + + Harness.awaitQueueSizeAtLeast(channelId, DESTINATION, MESSAGE_COUNT); + } finally { + // Also on failure, so a channel left behind by this test is not a wedged one. + Harness.setConfigurationProperty(GATE, token); + } + + List observedOrder = new ArrayList<>(); + for (long messageId : messageIds) { + ConnectorMessage sent = Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.SENT); + observedOrder.add(MessageAssertions.responsePayload(sent.getResponse().getContent())); + } + + // The destination stamps each message with the position it was drained in, so the messages + // queued first must carry the lowest positions. + List queueOrder = new ArrayList<>(); + for (int i = 1; i <= MESSAGE_COUNT; i++) { + queueOrder.add("order=" + i); + } + assertEquals(queueOrder, observedOrder, "the destination queue should drain in message order"); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index 3593ee24b3..1fab6cd412 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -154,6 +154,61 @@ public static ConnectorMessage awaitConnectorStatus(String channelId, long messa + metaDataId + " of message " + messageId + " to reach " + status + "; last status was " + lastStatus); } + /** + * Polls until at least {@code minimum} messages are queued for one connector. Queue tests use + * this to know a queue has really built up - past its in-memory buffer, say - before releasing + * whatever is holding it, so that the depth is a precondition the test enforces rather than one + * it hopes for. + */ + public static void awaitQueueSizeAtLeast(String channelId, int metaDataId, long minimum) throws Exception { + long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); + Long lastSize = null; + do { + lastSize = server().queueSize(channelId, metaDataId); + if (lastSize != null && lastSize >= minimum) { + return; + } + Thread.sleep(POLL_INTERVAL.toMillis()); + } while (System.nanoTime() < deadline); + + throw new AssertionError("Timed out after " + HarnessConfig.TIMEOUT.toSeconds() + "s waiting for connector " + + metaDataId + " of channel " + channelId + " to have at least " + minimum + + " messages queued; last size was " + lastSize); + } + + /** + * Reads one connector of one message as it stands right now, without waiting for anything. + * This is for asserting where a message has not got to, which is only sound once + * something else has proved the engine went past it - never on its own, as a message that has + * simply not been picked up yet looks identical. + */ + public static ConnectorMessage connectorMessage(String channelId, long messageId, int metaDataId) + throws Exception { + Message message = server().fetchMessage(channelId, messageId); + ConnectorMessage connectorMessage = message == null ? null + : message.getConnectorMessages().get(metaDataId); + if (connectorMessage == null) { + throw new AssertionError("Message " + messageId + " of channel " + channelId + + " has no connector " + metaDataId); + } + return connectorMessage; + } + + /** Stops a deployed channel, so its queue threads are no longer running. */ + public static void stopChannel(String channelId) throws Exception { + server().stopChannel(channelId); + } + + /** Halts a deployed channel, interrupting whatever it is processing rather than waiting. */ + public static void haltChannel(String channelId) throws Exception { + server().haltChannel(channelId); + } + + /** Starts a stopped channel back up. */ + public static void startChannel(String channelId) throws Exception { + server().startChannel(channelId); + } + /** Sets one configuration map entry, which channel scripts read back as {@code configurationMap}. */ public static void setConfigurationProperty(String key, String value) throws Exception { server().setConfigurationProperty(key, value); diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/HarnessConfig.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/HarnessConfig.java index 59fef4fe22..0de84fbae1 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/HarnessConfig.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/HarnessConfig.java @@ -37,11 +37,17 @@ final class HarnessConfig { Duration.ofSeconds(Long.parseLong(System.getProperty("oie.timeoutSeconds", "90"))); /** - * Per-request socket timeout. {@code new Client(address)} defaults to an infinite - * timeout, which would let a wedged server hang CI instead of failing it. + * Per-request socket timeout. {@code new Client(address)} defaults to an infinite timeout, + * which would let a wedged server hang CI instead of failing it. + * + *

      This has to clear the slowest thing one request can legitimately queue behind, not the + * time a request normally takes: test classes run in parallel against one server, and a + * channel deploy holds it long enough that an unrelated {@code getChannelStatus} can wait + * seconds. {@link #TIMEOUT} still bounds the test as a whole, so a genuinely wedged server + * fails - just not on the first read that was merely waiting its turn. */ static final int REQUEST_TIMEOUT_MILLIS = - Integer.parseInt(System.getProperty("oie.requestTimeoutMillis", "15000")); + Integer.parseInt(System.getProperty("oie.requestTimeoutMillis", "30000")); private HarnessConfig() { } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index 1e8c3a6754..2267120696 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -6,7 +6,6 @@ import java.io.IOException; import java.util.ArrayDeque; import java.util.Deque; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -16,6 +15,7 @@ import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.RawMessage; import com.mirth.connect.model.Channel; +import com.mirth.connect.model.DashboardStatus; import com.mirth.connect.model.LoginStatus; import com.mirth.connect.model.converters.ObjectXMLSerializer; import com.mirth.connect.model.filters.MessageFilter; @@ -123,20 +123,75 @@ String deployChannel(Channel channel, String label) throws Exception { } private void awaitStarted(String channelId, String label) throws Exception { + try { + awaitState(channelId, DeployedState.STARTED); + } catch (AssertionError e) { + throw new AssertionError("Channel " + label + " (" + channelId + ") did not start: " + e.getMessage(), e); + } + } + + private void awaitState(String channelId, DeployedState state) throws Exception { long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); DeployedState lastState = null; while (System.nanoTime() < deadline) { - var status = client.getChannelStatus(channelId); + DashboardStatus status = client.getChannelStatus(channelId); lastState = status == null ? null : status.getState(); - if (lastState == DeployedState.STARTED) { + if (lastState == state) { return; } Thread.sleep(500); } - throw new AssertionError("Channel " + label + " (" + channelId + ") did not start within " + throw new AssertionError("Channel " + channelId + " did not reach " + state + " within " + HarnessConfig.TIMEOUT.toSeconds() + "s; last state was " + lastState); } + /** + * The number of messages queued for one connector, as the dashboard reports it: the source + * queue for metadata id 0, a destination's queue otherwise. Returns null while the channel + * has no status for that connector. + */ + Long queueSize(String channelId, int metaDataId) throws ClientException { + DashboardStatus status = client.getChannelStatus(channelId); + if (status == null) { + return null; + } + for (DashboardStatus connectorStatus : status.getChildStatuses()) { + if (Integer.valueOf(metaDataId).equals(connectorStatus.getMetaDataId())) { + return connectorStatus.getQueued(); + } + } + return Integer.valueOf(metaDataId).equals(status.getMetaDataId()) ? status.getQueued() : null; + } + + /** Stops a channel, leaving it deployed, and waits for it to report {@link DeployedState#STOPPED}. */ + void stopChannel(String channelId) throws Exception { + client.stopChannel(channelId, true); + awaitState(channelId, DeployedState.STOPPED); + } + + /** + * Halts a channel, which interrupts whatever it is processing instead of waiting for it, and + * waits for it to report {@link DeployedState#STOPPED}. + */ + void haltChannel(String channelId) throws Exception { + client.haltChannel(channelId, true); + awaitState(channelId, DeployedState.STOPPED); + } + + /** + * Starts a channel and waits for it to report {@link DeployedState#STARTED}, doing nothing if + * it is already started. Tolerating that lets a test restore a channel it stopped from a + * {@code finally} without having to know whether the stop got that far. + */ + void startChannel(String channelId) throws Exception { + DashboardStatus status = client.getChannelStatus(channelId); + if (status != null && status.getState() == DeployedState.STARTED) { + return; + } + client.startChannel(channelId, true); + awaitState(channelId, DeployedState.STARTED); + } + /** Submits a source payload and returns the new message id. */ long submitMessage(String channelId, String rawData, Map sourceMap) throws ClientException { RawMessage rawMessage = new RawMessage(rawData, null, sourceMap); @@ -151,11 +206,12 @@ long submitMessage(String channelId, String rawData, Map sourceM * Sets one configuration map entry, leaving the rest alone. This is the only server-side * state a client can write that channel scripts can read back, which makes it the harness's * way to signal a running script. + * + *

      The server does the read-modify-write under its own lock, so test classes running in + * parallel can set their own gate properties without dropping each other's. */ void setConfigurationProperty(String key, String value) throws ClientException { - Map properties = new LinkedHashMap<>(client.getConfigurationMap()); - properties.put(key, new ConfigurationProperty(value, null)); - client.setConfigurationMap(properties); + client.setConfigurationProperty(key, new ConfigurationProperty(value, null)); } /** diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceQueueTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceQueueTest.java new file mode 100644 index 0000000000..d91bb610d1 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceQueueTest.java @@ -0,0 +1,229 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Status; + +/** + * The source queue: that it keeps its order once it is deeper than the buffer it holds in + * memory, that it survives the channel it belongs to being halted, and that concurrent + * submitters cannot lose a message between committing it and queueing it. + * + *

      The channel sets {@code queueBufferSize} to 3 and every test here queues more than that, + * so refilling the buffer from the database is the path most messages take rather than an edge + * case. Its destination parks until the gate property holds the run's token, which is what lets + * a queue build up before anything drains; the token is fresh per run, so a gate left open by an + * earlier run cannot release a later one. + * + *

      The destination stamps each message with the position it was handed over in, taken from a + * counter in the global channel map. Assertions are on the relative positions - a + * consecutive ascending run - because the counter carries across tests and resets when the + * channel restarts, and because relative positions are exactly what the ordering claim is. + */ +@DisplayName("220-queueing/01-source-queue") +@TestInstance(PER_CLASS) +class SourceQueueTest { + + private static final String CHANNEL = "channels/source-queue-order.xml"; + + /** The configuration property the destination parks on. */ + private static final String GATE = "oie.smoketest.releaseSourceQueue"; + + /** What the destination prefixes its handover position with. */ + private static final String POSITION = "order="; + + private static final int SOURCE = 0; + private static final int DESTINATION = 1; + + /** {@code queueBufferSize} in the channel: how much of the source queue is held in memory. */ + private static final int BUFFER_CAPACITY = 3; + + private static final int MESSAGE_COUNT = 10; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + /** + * A queue deeper than its buffer still hands every message to the destination exactly once + * and in the order they were received, which means the refill from the database picks up + * where the buffer left off rather than starting over or skipping. + */ + @Test + void drainsInReceiptOrderPastItsBufferCapacity() throws Exception { + String token = UUID.randomUUID().toString(); + List messageIds = new ArrayList<>(); + + try { + for (int i = 1; i <= MESSAGE_COUNT; i++) { + messageIds.add(SharedServer.get().submitMessage(channelId, token + "#" + i, new LinkedHashMap<>())); + } + + // The first message is parked in the destination and the rest are behind it. Waiting + // for the queue to pass its buffer is what makes the refill certain rather than hoped + // for; if it never happens the wait fails the test. + Harness.awaitQueueSizeAtLeast(channelId, SOURCE, BUFFER_CAPACITY + 1); + } finally { + // Also on failure, so a parked destination never outlives the test. + Harness.setConfigurationProperty(GATE, token); + } + + assertConsecutive(handoverPositions(messageIds), + "the source queue should drain in the order the messages were received"); + } + + /** + * Halting a channel with a full source queue leaves the queue alone, and starting it again + * drains it in order. A halt rather than a stop because a stop waits for the message the + * destination is parked on, which is the one thing this test needs to still be parked. + * + *

      That the queue thread is not running in between is not asserted - it cannot be, over an + * API that only reports state. What is asserted is the consequence that matters: the queue + * was still there afterwards, and the restarted channel reloaded and drained it. + */ + @Test + void survivesAHaltedChannelAndDrainsWhenItStartsAgain() throws Exception { + String token = UUID.randomUUID().toString(); + List messageIds = new ArrayList<>(); + + try { + for (int i = 1; i <= MESSAGE_COUNT; i++) { + messageIds.add(SharedServer.get().submitMessage(channelId, token + "#" + i, new LinkedHashMap<>())); + } + // One message is in the destination, so the rest are the queue. + int queued = MESSAGE_COUNT - 1; + Harness.awaitQueueSizeAtLeast(channelId, SOURCE, queued); + + Harness.haltChannel(channelId); + + assertEquals(Long.valueOf(queued), SharedServer.get().queueSize(channelId, SOURCE), + "halting the channel should leave its source queue intact, not drain or drop it"); + } finally { + // Also on failure, so neither a parked destination nor a halted channel outlives the + // test. Starting an already-started channel is a no-op, so this is safe either way. + Harness.setConfigurationProperty(GATE, token); + Harness.startChannel(channelId); + } + + assertConsecutive(handoverPositions(messageIds), + "the restarted channel should drain the queue it reloaded, in order"); + } + + /** + * Several connections dispatching at once still get every message processed exactly once. + * The engine commits a source message and adds it to the queue under the queue's own lock; + * without that, a message committed but not yet queued is picked up by another thread's + * buffer refill and the queue's count and contents disagree, stranding one of them. + * {@code ConnectorMessageQueueTest} pins that mechanism down directly - this is the same + * claim where a client can see it, so it catches the lock going missing rather than + * describing what happens when it does. + * + *

      A connection serialises its own requests, so each submitter needs its own; sharing one + * would serialise the very dispatch this is about. + */ + @Test + void concurrentSubmittersEachGetTheirMessageProcessedExactlyOnce() throws Exception { + String token = UUID.randomUUID().toString(); + int submitters = 3; + int perSubmitter = 8; + + List messageIds = new ArrayList<>(); + List connections = new ArrayList<>(); + ExecutorService submitterPool = Executors.newFixedThreadPool(submitters); + + try { + List>> submitted = new ArrayList<>(); + for (int submitter = 0; submitter < submitters; submitter++) { + OieServer connection = OieServer.connect(); + connections.add(connection); + + String prefix = token + "#" + submitter + "-"; + submitted.add(submitterPool.submit(() -> { + List mine = new ArrayList<>(); + for (int i = 1; i <= perSubmitter; i++) { + mine.add(connection.submitMessage(channelId, prefix + i, new LinkedHashMap<>())); + } + return mine; + })); + } + for (Future> batch : submitted) { + messageIds.addAll(batch.get()); + } + + Harness.awaitQueueSizeAtLeast(channelId, SOURCE, BUFFER_CAPACITY + 1); + } finally { + Harness.setConfigurationProperty(GATE, token); + submitterPool.shutdown(); + connections.forEach(OieServer::close); + } + + // Which submitter won a given position is a race and not asserted; that every message got + // a position, and no two got the same one, is the claim. + List positions = handoverPositions(messageIds); + Collections.sort(positions); + assertEquals(submitters * perSubmitter, positions.size(), "a message went missing"); + assertConsecutive(positions, "every concurrently submitted message should be handed over" + + " exactly once, so their positions are distinct and leave no gap"); + } + + /** + * Waits for every message to be sent and returns the position its destination stamped it + * with, in the order the server committed them - which is message id order, since the id is + * assigned by the insert. + */ + private List handoverPositions(List messageIds) throws Exception { + List inCommitOrder = new ArrayList<>(messageIds); + Collections.sort(inCommitOrder); + + List positions = new ArrayList<>(); + for (long messageId : inCommitOrder) { + ConnectorMessage sent = Harness.awaitConnectorStatus(channelId, messageId, DESTINATION, Status.SENT); + String stamp = MessageAssertions.responsePayload(sent.getResponse().getContent()); + assertTrue(stamp != null && stamp.startsWith(POSITION), + "message " + messageId + " has an unexpected destination response: " + stamp); + positions.add(Integer.valueOf(stamp.substring(POSITION.length()))); + } + return positions; + } + + /** + * Asserts the positions are a consecutive ascending run. Where they start is the channel + * counter's business; that they rise by one each time is the queue's. + */ + private static void assertConsecutive(List positions, String message) { + List expected = new ArrayList<>(); + for (int i = 0; i < positions.size(); i++) { + expected.add(positions.get(0) + i); + } + assertEquals(expected, positions, message); + } +} diff --git a/smoketest/src/test/resources/channels/destination-queue-rotate.xml b/smoketest/src/test/resources/channels/destination-queue-rotate.xml new file mode 100644 index 0000000000..92bbf77c52 --- /dev/null +++ b/smoketest/src/test/resources/channels/destination-queue-rotate.xml @@ -0,0 +1,197 @@ + + beb47186-5e12-4300-8fdc-969ce73ea22f + 2 + destination-queue-rotate + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + true + false + 100 + false + 0 + true + false + 1 + + false + + + Default Resource + [Default Resource] + + + 3 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/smoketest/src/test/resources/channels/destination-queue.xml b/smoketest/src/test/resources/channels/destination-queue.xml new file mode 100644 index 0000000000..2446e52335 --- /dev/null +++ b/smoketest/src/test/resources/channels/destination-queue.xml @@ -0,0 +1,195 @@ + + 95d19768-faf7-41d0-9cb6-e32bd47b8bba + 2 + destination-queue + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + true + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 3 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/smoketest/src/test/resources/channels/source-queue-order.xml b/smoketest/src/test/resources/channels/source-queue-order.xml new file mode 100644 index 0000000000..0522f8527b --- /dev/null +++ b/smoketest/src/test/resources/channels/source-queue-order.xml @@ -0,0 +1,198 @@ + + a8f6f095-5dd0-43f5-be90-1d8fed13ebb7 + 2 + source-queue-order + + 1 + + 0 + sourceConnector + + + + None + false + false + false + 1 + + + Default Resource + [Default Resource] + + + 3 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From de52d222bee40409fd311d23833f2fa953d9b474 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 22:01:59 -0500 Subject: [PATCH 20/28] Translate testInsertMessageAttachment to fixture test Signed-off-by: Mitch Gaffigan --- ci/README.md | 11 + ci/tests/230-attachments/README.md | 25 +++ .../channels/01-regex-extraction/channel.xml | 202 +++++++++++++++++ .../messages/01-two-attachments/attachment01 | 1 + .../01-two-attachments/attachment01_type | 1 + .../messages/01-two-attachments/attachment02 | 1 + .../01-two-attachments/attachment02_type | 1 + .../messages/01-two-attachments/attachment03 | 1 + .../messages/01-two-attachments/source | 4 + .../messages/01-two-attachments/source_raw | 4 + .../attachment01 | 1 + .../attachment01_type | 1 + .../attachment02 | 1 + .../02-blank-attachment-not-extracted/source | 4 + .../source_raw | 4 + .../channels/02-reattachment/channel.xml | 209 ++++++++++++++++++ .../01-restored-in-transformer/source | 4 + .../01-restored-in-transformer/source_raw | 4 + .../source_transformed | 4 + .../03-remove-on-completion/channel.xml | 202 +++++++++++++++++ .../attachment01 | 1 + .../01-attachments-dropped-tokens-kept/source | 4 + .../source_raw | 4 + .../connect/donkey/test/DonkeyDaoTests.java | 32 +-- .../smoketest/Harness.java | 39 +++- .../smoketest/MessageAssertions.java | 98 +++++++- .../smoketest/OieServer.java | 11 + 27 files changed, 834 insertions(+), 40 deletions(-) create mode 100644 ci/tests/230-attachments/README.md create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/channel.xml create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01 create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01_type create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02 create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02_type create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment03 create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source_raw create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01 create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01_type create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment02 create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source create mode 100644 ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source_raw create mode 100644 ci/tests/230-attachments/channels/02-reattachment/channel.xml create mode 100644 ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source create mode 100644 ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_raw create mode 100644 ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_transformed create mode 100644 ci/tests/230-attachments/channels/03-remove-on-completion/channel.xml create mode 100644 ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/attachment01 create mode 100644 ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source create mode 100644 ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source_raw diff --git a/ci/README.md b/ci/README.md index 601e85e3c5..709ce46cb0 100644 --- a/ci/README.md +++ b/ci/README.md @@ -54,6 +54,8 @@ the payload sent to the channel. The other files are optional assertions: | `destNN_processing_error` | Processing error recorded against destination `NN` | | `destNN_metadata.yml` | Selected metadata for destination `NN` | | `destNN_status` | Status for destination `NN` | +| `attachmentNN` | Content of attachment `NN` | +| `attachmentNN_type` | MIME type of attachment `NN` | `NN` is the destination connector's metadata ID: `dest01` is the first destination, `dest02` the second, and so on. Metadata files are YAML mappings; list @@ -65,6 +67,15 @@ that `((ANY))` matches variable content such as generated IDs or timestamps. A c assertion file whose entire contents are `((NONE))` asserts the opposite: that the server stored no such content at all, which is not the same as storing an empty string. +For an attachment, `NN` is a position rather than an ID: `attachment01` is the attachment +whose `${ATTACH:id}` token appears first in the source raw content, `attachment02` the next, +and any attachment the message does not reference comes after those, ordered by ID. The +server's own list is ordered by ID, which is a generated UUID, so it is not something a +fixture can count along. An `attachmentNN` file holds raw bytes and is compared byte for +byte, so it can hold an image or any other binary attachment, and `((NONE))` in it asserts +that there is no attachment in that position - which is also how a fixture pins down how +many attachments there are. + A fixture case runs in every configuration by default. To limit it, add a `configurations` file at the case root with one configuration name per line: diff --git a/ci/tests/230-attachments/README.md b/ci/tests/230-attachments/README.md new file mode 100644 index 0000000000..8d13974dcc --- /dev/null +++ b/ci/tests/230-attachments/README.md @@ -0,0 +1,25 @@ +# 230-attachments + +Attachment storage and retrieval alongside the message. All three channels use the same Regex +attachment handler, whose two patterns pull the value out of `PHOTO:...;` as `image/jpeg` and out +of `REPORT:...;` as `text/plain`, leaving a `${ATTACH:id}` token in the message where each one was. +The payload carries a non-ASCII character so that the attachment content is not the same bytes as +its characters, which is what makes `attachmentNN`'s byte-for-byte comparison worth having. + +- `01-regex-extraction` - extraction and storage: the message keeps the tokens, the attachments keep + the content and the mime type of the pattern that matched. + - `01-two-attachments` - both patterns fire. `source_raw` carries a token in place of each + extracted value, `attachment01`/`attachment02` are what was taken out, in the order their tokens + appear, and `attachment03` is `((NONE))`: exactly two attachments were stored, not three. + - `02-blank-attachment-not-extracted` - `PHOTO:;` matches the pattern with an empty value. The + handler leaves a blank match in the message rather than storing an empty attachment, so + `source_raw` still reads `PHOTO:;` and the report is the only attachment. +- `02-reattachment` - retrieval: the same channel with a source transformer step calling + `AttachmentUtil.reAttachMessage(connectorMessage)`. `source_raw` is the tokenised message and + `source_transformed` is the original payload, so the engine read both attachments back out of + storage by ID and put them where their tokens were. This is the read a destination connector makes + when `reattachAttachments` is set. +- `03-remove-on-completion` - the same channel with `removeAttachmentsOnCompletion`. Once the message + completes, `attachment01` is `((NONE))` while `source_raw` still holds the tokens: the attachments + are dropped and the message is not, which is what makes the setting lossy. Content removal is off, + so this is the attachment half of 170-content-removal on its own. diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/channel.xml b/ci/tests/230-attachments/channels/01-regex-extraction/channel.xml new file mode 100644 index 0000000000..6e28d5507b --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/channel.xml @@ -0,0 +1,202 @@ + + a1d0f2c4-3b5e-4a07-9c11-2e6d7f480001 + 2 + Attachments Regex Extraction + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + com.mirth.connect.server.attachments.regex.RegexAttachmentHandlerProvider + Regex + + + regex.pattern0 + PHOTO:(.*?); + + + regex.mimetype0 + image/jpeg + + + regex.pattern1 + REPORT:(.*?); + + + regex.mimetype1 + text/plain + + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01 b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01 new file mode 100644 index 0000000000..eb86b696b8 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01 @@ -0,0 +1 @@ +PHOTO-CONTENT-café \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01_type b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01_type new file mode 100644 index 0000000000..29e455a21e --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment01_type @@ -0,0 +1 @@ +image/jpeg \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02 b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02 new file mode 100644 index 0000000000..b02bbeb98f --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02 @@ -0,0 +1 @@ +REPORT-CONTENT-TWO \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02_type b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02_type new file mode 100644 index 0000000000..f1148cc2ba --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment02_type @@ -0,0 +1 @@ +text/plain \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment03 b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment03 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/attachment03 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source new file mode 100644 index 0000000000..a747530273 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:PHOTO-CONTENT-café; +REPORT:REPORT-CONTENT-TWO; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source_raw b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source_raw new file mode 100644 index 0000000000..1086e00735 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/01-two-attachments/source_raw @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:${ATTACH:((ANY))}; +REPORT:${ATTACH:((ANY))}; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01 b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01 new file mode 100644 index 0000000000..22fd6e87ab --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01 @@ -0,0 +1 @@ +REPORT-ONLY \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01_type b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01_type new file mode 100644 index 0000000000..f1148cc2ba --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment01_type @@ -0,0 +1 @@ +text/plain \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment02 b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment02 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/attachment02 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source new file mode 100644 index 0000000000..e9cb0d8bf0 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:; +REPORT:REPORT-ONLY; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source_raw b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source_raw new file mode 100644 index 0000000000..9ee13257f4 --- /dev/null +++ b/ci/tests/230-attachments/channels/01-regex-extraction/messages/02-blank-attachment-not-extracted/source_raw @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:; +REPORT:${ATTACH:((ANY))}; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/02-reattachment/channel.xml b/ci/tests/230-attachments/channels/02-reattachment/channel.xml new file mode 100644 index 0000000000..6e898e31db --- /dev/null +++ b/ci/tests/230-attachments/channels/02-reattachment/channel.xml @@ -0,0 +1,209 @@ + + a1d0f2c4-3b5e-4a07-9c11-2e6d7f480002 + 2 + Attachments Reattachment + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + Re-attach + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + com.mirth.connect.server.attachments.regex.RegexAttachmentHandlerProvider + Regex + + + regex.pattern0 + PHOTO:(.*?); + + + regex.mimetype0 + image/jpeg + + + regex.pattern1 + REPORT:(.*?); + + + regex.mimetype1 + text/plain + + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source new file mode 100644 index 0000000000..a747530273 --- /dev/null +++ b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:PHOTO-CONTENT-café; +REPORT:REPORT-CONTENT-TWO; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_raw b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_raw new file mode 100644 index 0000000000..1086e00735 --- /dev/null +++ b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_raw @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:${ATTACH:((ANY))}; +REPORT:${ATTACH:((ANY))}; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_transformed b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_transformed new file mode 100644 index 0000000000..a747530273 --- /dev/null +++ b/ci/tests/230-attachments/channels/02-reattachment/messages/01-restored-in-transformer/source_transformed @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:PHOTO-CONTENT-café; +REPORT:REPORT-CONTENT-TWO; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/03-remove-on-completion/channel.xml b/ci/tests/230-attachments/channels/03-remove-on-completion/channel.xml new file mode 100644 index 0000000000..9d9c1b994f --- /dev/null +++ b/ci/tests/230-attachments/channels/03-remove-on-completion/channel.xml @@ -0,0 +1,202 @@ + + a1d0f2c4-3b5e-4a07-9c11-2e6d7f480004 + 2 + Attachments Remove On Completion + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + true + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + com.mirth.connect.server.attachments.regex.RegexAttachmentHandlerProvider + Regex + + + regex.pattern0 + PHOTO:(.*?); + + + regex.mimetype0 + image/jpeg + + + regex.pattern1 + REPORT:(.*?); + + + regex.mimetype1 + text/plain + + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/attachment01 b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/attachment01 new file mode 100644 index 0000000000..20769dab04 --- /dev/null +++ b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/attachment01 @@ -0,0 +1 @@ +((NONE)) \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source new file mode 100644 index 0000000000..a747530273 --- /dev/null +++ b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:PHOTO-CONTENT-café; +REPORT:REPORT-CONTENT-TWO; +end \ No newline at end of file diff --git a/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source_raw b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source_raw new file mode 100644 index 0000000000..1086e00735 --- /dev/null +++ b/ci/tests/230-attachments/channels/03-remove-on-completion/messages/01-attachments-dropped-tokens-kept/source_raw @@ -0,0 +1,4 @@ +patient=12345 +PHOTO:${ATTACH:((ANY))}; +REPORT:${ATTACH:((ANY))}; +end \ No newline at end of file diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java index 4ec7ea1405..e275d06c6b 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java @@ -39,7 +39,6 @@ import com.mirth.connect.donkey.model.message.RawMessage; import com.mirth.connect.donkey.model.message.Response; import com.mirth.connect.donkey.model.message.Status; -import com.mirth.connect.donkey.model.message.attachment.Attachment; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; import com.mirth.connect.donkey.server.channel.Channel; @@ -322,35 +321,8 @@ public final void testInsertMessageContent() throws Exception { // TODO testBatchInsertMessageContent - /* - * Create new channel and message Insert attachments for the message, assert that: - The - * attachment was inserted correctly - */ - @Test - public final void testInsertMessageAttachment() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - DonkeyDao dao = daoFactory.getDao(); - - try { - logger.info("Testing DonkeyDao.insertMessageAttachment..."); - - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - - for (int i = 1; i <= TEST_SIZE; i++) { - Attachment attachment = new Attachment("attachment" + i, testMessage.getBytes(), "text/plain"); - - dao.insertMessageAttachment(channel.getChannelId(), sourceMessage.getMessageId(), attachment); - dao.commit(); - - // Assert that the attachment was inserted - TestUtils.assertAttachmentExists(channel.getChannelId(), sourceMessage.getMessageId(), attachment); - } - - System.out.println(daoTimer.getLog()); - } finally { - dao.close(); - } - } + // Attachment storage and retrieval is covered against every dialect by + // ci/tests/230-attachments. /* * Create new channel and connector messages Insert content for the messages and assert that: - diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index 1fab6cd412..bf6bc101fb 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.Arrays; @@ -19,6 +20,7 @@ import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.MessageContent; import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.donkey.model.message.attachment.Attachment; /** * The entry points the generated smoke tests call (see :smoketest:generateSmokeTests @@ -87,8 +89,11 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa // Load the fixtures once; the poll loop below may check them many times. Map assertions = new LinkedHashMap<>(); + // Attachments are a second read against the server, so only pay for it when asked. + boolean fetchAttachments = false; for (String fileName : assertionFiles) { - assertions.put(fileName, resource(base + "/" + fileName)); + assertions.put(fileName, resource(base + "/" + fileName, MessageAssertions.charsetFor(fileName))); + fetchAttachments |= MessageAssertions.isAttachmentFixture(fileName); } long messageId = server().submitMessage(channelId, source, sourceMap); @@ -96,14 +101,20 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); AssertionError lastFailure = null; Message lastMessage = null; + List lastAttachments = List.of(); long graceDeadline = 0; while (System.nanoTime() < deadline) { Message message = server().fetchMessage(channelId, messageId); if (message != null) { lastMessage = message; + List attachments = fetchAttachments + ? server().fetchAttachments(channelId, messageId) + : List.of(); + lastAttachments = attachments; try { for (Map.Entry assertion : assertions.entrySet()) { - MessageAssertions.assertFixtureFile(message, assertion.getKey(), assertion.getValue()); + MessageAssertions.assertFixtureFile(message, attachments, assertion.getKey(), + assertion.getValue()); } return; } catch (AssertionError e) { @@ -122,10 +133,10 @@ public static void runMessage(String channelId, String base, boolean hasSourceMa if (lastFailure != null) { throw new AssertionError(base + " failed: " + lastFailure.getMessage() - + "\n\n" + describe(lastMessage), lastFailure); + + "\n\n" + describe(lastMessage, lastAttachments), lastFailure); } throw new AssertionError("Timed out after " + HarnessConfig.TIMEOUT.toSeconds() + "s waiting for message " - + messageId + " for fixture " + base + "\n\n" + describe(lastMessage)); + + messageId + " for fixture " + base + "\n\n" + describe(lastMessage, lastAttachments)); } /** @@ -214,13 +225,22 @@ public static void setConfigurationProperty(String key, String value) throws Exc server().setConfigurationProperty(key, value); } - /** Reads a staged fixture from the classpath. */ + /** Reads a staged fixture from the classpath as UTF-8 text. */ static String resource(String path) { + return resource(path, StandardCharsets.UTF_8); + } + + /** + * Reads a staged fixture from the classpath. Most fixtures are text and are read as UTF-8; + * an attachment's content can be any bytes at all, so it is read as ISO-8859-1, which maps + * every byte to one char and back again and so compares byte for byte. + */ + static String resource(String path, Charset charset) { try (InputStream in = Harness.class.getClassLoader().getResourceAsStream(path)) { if (in == null) { throw new IllegalStateException("Missing fixture resource on the classpath: " + path); } - return new String(in.readAllBytes(), StandardCharsets.UTF_8); + return new String(in.readAllBytes(), charset); } catch (IOException e) { throw new UncheckedIOException("Could not read fixture resource " + path, e); } @@ -240,7 +260,7 @@ private static boolean isTerminal(Message message) { } /** Renders the message the way a fixture author needs to see it to fix a mismatch. */ - private static String describe(Message message) { + private static String describe(Message message, List attachments) { if (message == null) { return "No message was retrieved from the server."; } @@ -269,6 +289,11 @@ private static String describe(Message message) { detail.append("\n processingError=").append(connectorMessage.getProcessingError()); } }); + MessageAssertions.order(message, attachments).forEach(attachment -> detail + .append("\n attachment ").append(attachment.getId()) + .append(" type=").append(attachment.getType()) + .append(" content=") + .append(quote(new String(attachment.getContent(), StandardCharsets.ISO_8859_1)))); return detail.toString(); } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index 1be95c034c..56850537bc 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -3,9 +3,14 @@ package org.openintegrationengine.smoketest; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.time.Instant; +import java.util.ArrayList; import java.util.Calendar; +import java.util.Comparator; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.regex.Matcher; @@ -18,6 +23,7 @@ import com.mirth.connect.donkey.model.message.MessageContent; import com.mirth.connect.donkey.model.message.Response; import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.donkey.model.message.attachment.Attachment; import com.mirth.connect.model.converters.ObjectXMLSerializer; /** @@ -42,6 +48,16 @@ final class MessageAssertions { private static final Pattern RESPONSE_ENVELOPE = Pattern.compile("^\\s*].*", Pattern.DOTALL); + /** + * Attachment assertion files are {@code attachment} plus an optional suffix, where + * {@code NN} is the attachment's position in the message rather than its id, which is a + * UUID the server generates. + */ + private static final Pattern ATTACHMENT_NAME = Pattern.compile("attachment(\\d+)(_type)?"); + + /** The token an attachment handler leaves in the message where it took an attachment out. */ + private static final Pattern ATTACHMENT_TOKEN = Pattern.compile("\\$\\{ATTACH:([^}]+)\\}"); + /** Destination assertion files are {@code dest} plus an optional suffix. */ private static final Pattern DEST_NAME = Pattern.compile( "dest(\\d+)(_transformed|_response|_processed_response|_processing_error|_response_error|_status|_metadata\\.yml)?"); @@ -52,13 +68,38 @@ final class MessageAssertions { private MessageAssertions() { } + /** + * True for a fixture file that asserts an attachment rather than something on the message. + * Attachments are stored in their own table, so the harness has to ask the server for them + * separately, and only does so when a fixture names one. + */ + static boolean isAttachmentFixture(String fileName) { + return ATTACHMENT_NAME.matcher(fileName).matches(); + } + + /** + * The charset a fixture file is read with. An attachment's content is arbitrary bytes - an + * image, a DICOM object - so it is read as ISO-8859-1, which maps every byte to one char and + * back without loss, making the comparison a byte-for-byte one. Everything else is text. + */ + static Charset charsetFor(String fileName) { + Matcher matcher = ATTACHMENT_NAME.matcher(fileName); + return matcher.matches() && matcher.group(2) == null ? StandardCharsets.ISO_8859_1 + : StandardCharsets.UTF_8; + } + /** * Applies one fixture file's assertion to the message. * - * @param fileName the fixture file name, e.g. {@code source_status} or {@code dest01} - * @param content that file's text, already loaded from the classpath + * @param attachments the message's attachments, empty unless a fixture asked for them + * @param fileName the fixture file name, e.g. {@code source_status} or {@code dest01} + * @param content that file's text, already loaded from the classpath */ - static void assertFixtureFile(Message message, String fileName, String content) { + static void assertFixtureFile(Message message, List attachments, String fileName, String content) { + if (isAttachmentFixture(fileName)) { + assertAttachment(message, attachments, fileName, content); + return; + } switch (fileName) { case "source_status" -> assertStatus("source status", content, connector(message, SOURCE_META_DATA_ID, fileName).getStatus()); @@ -78,6 +119,57 @@ static void assertFixtureFile(Message message, String fileName, String content) } } + /** + * Asserts one attachment's content or mime type. {@code attachment01} is the attachment whose + * token appears first in the source raw content, not the first the server hands back: that + * list is ordered by id, which is a generated UUID and so bears no relation to the message. + * An attachment the message does not reference sorts after the ones it does, by id, so a + * handler that stores attachments without leaving tokens behind still has a stable order. + */ + private static void assertAttachment(Message message, List attachments, String fileName, + String content) { + Matcher matcher = ATTACHMENT_NAME.matcher(fileName); + if (!matcher.matches()) { + throw new IllegalStateException("Unrecognised fixture file name: " + fileName); + } + int position = Integer.parseInt(matcher.group(1)); + List ordered = order(message, attachments); + Attachment attachment = position >= 1 && position <= ordered.size() ? ordered.get(position - 1) : null; + + if ("_type".equals(matcher.group(2))) { + assertMatches(fileName, content.trim(), attachment == null ? null : attachment.getType()); + } else { + assertMatches(fileName, content, attachment == null ? null + : new String(attachment.getContent(), StandardCharsets.ISO_8859_1)); + } + } + + /** + * Puts a message's attachments into the order a fixture numbers them by: the order their + * tokens appear in the source raw content, then whatever is left over, by id. + */ + static List order(Message message, List attachments) { + Map byId = new LinkedHashMap<>(); + attachments.forEach(attachment -> byId.put(attachment.getId(), attachment)); + + List ordered = new ArrayList<>(); + Map connectorMessages = message.getConnectorMessages(); + ConnectorMessage source = connectorMessages == null ? null : connectorMessages.get(SOURCE_META_DATA_ID); + String raw = source == null ? null : content(source.getRaw()); + if (raw != null) { + Matcher tokens = ATTACHMENT_TOKEN.matcher(raw); + while (tokens.find()) { + Attachment referenced = byId.remove(tokens.group(1)); + if (referenced != null) { + ordered.add(referenced); + } + } + } + + byId.values().stream().sorted(Comparator.comparing(Attachment::getId)).forEach(ordered::add); + return ordered; + } + private static void assertDestination(Message message, String fileName, String content) { Matcher matcher = DEST_NAME.matcher(fileName); if (!matcher.matches()) { diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index 2267120696..c0c55c9357 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -14,6 +14,7 @@ import com.mirth.connect.donkey.model.channel.DeployedState; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.RawMessage; +import com.mirth.connect.donkey.model.message.attachment.Attachment; import com.mirth.connect.model.Channel; import com.mirth.connect.model.DashboardStatus; import com.mirth.connect.model.LoginStatus; @@ -242,6 +243,16 @@ Message fetchDecryptedMessage(String channelId, long messageId, List me return client.getMessageContent(channelId, messageId, metaDataIds); } + /** + * Every attachment stored against one message, with its content. Attachments live in their + * own table rather than on the message, so they never appear in {@link #fetchMessage}; the + * harness makes this second read only when a fixture names an {@code attachmentNN} file. + */ + List fetchAttachments(String channelId, long messageId) throws ClientException { + List attachments = client.getAttachmentsByMessageId(channelId, messageId); + return attachments == null ? List.of() : attachments; + } + /** Undeploys and removes a channel, tolerating failures so teardown always continues. */ void removeChannel(String channelId) { deployedChannelIds.remove(channelId); From 5c02198c0ed3d6b178b38fb7f5d15e7f9f0f3b62 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 22:22:30 -0500 Subject: [PATCH 21/28] Translate testDeleteMessage to ci test Signed-off-by: Mitch Gaffigan --- .../connect/donkey/test/DonkeyDaoTests.java | 261 +---------------- .../donkey/test/MessageControllerTests.java | 67 +---- .../smoketest/Harness.java | 41 +++ .../smoketest/MessageDeletionTest.java | 197 +++++++++++++ .../smoketest/OieServer.java | 29 ++ .../smoketest/QueuedMessageDeletionTest.java | 79 +++++ .../channels/message-deletion-queued.xml | 190 ++++++++++++ .../resources/channels/message-deletion.xml | 275 ++++++++++++++++++ 8 files changed, 816 insertions(+), 323 deletions(-) create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/MessageDeletionTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/QueuedMessageDeletionTest.java create mode 100644 smoketest/src/test/resources/channels/message-deletion-queued.xml create mode 100644 smoketest/src/test/resources/channels/message-deletion.xml diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java index e275d06c6b..8e27c0bb14 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -606,263 +605,9 @@ public final void testMarkAsProcessed() throws Exception { // TODO testResetMessage - /* - * Create a new channel Process messages directly through Channel.process, assert that: - Each - * message was inserted successfully - TEST_SIZE messages were added to the testing list - The - * channel statistics were updated correctly - * - * Iterate through each message in the list, assert that: - Each message, connector message, and - * message content row was deleted - The channel statistics were not deleted - * - * Do the same thing as above, except this time delete the channel statistics as well, assert - * that: - The channel statistics were deleted - */ - @Test - public void testDeleteMessage() throws Exception { // FIXME - TestChannel channel = TestUtils.createDefaultChannel(channelId, serverId); - - channel.deploy(); - channel.start(null); - - DonkeyDao dao = daoFactory.getDao(); - - try { - logger.info("Testing DonkeyDao.deleteMessage..."); - - // Test deleting messages without deleting statistics - testDeleteMessage(channel, false, dao); - - // Test deleting messages with deleting statistics - testDeleteMessage(channel, true, dao); - } finally { - dao.close(); - channel.stop(); - channel.undeploy(); - } - } - - private void testDeleteMessage(TestChannel channel, boolean deleteStatistics, DonkeyDao dao) throws Exception { - List messages = new ArrayList(); - TestUtils.deleteChannelStatistics(channel.getChannelId()); - - // Process a bunch of messages through the channel - for (int i = 1; i <= TEST_SIZE; i++) { - ConnectorMessage sourceMessage = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory).getConnectorMessages().get(0); - - // Bypass the source connector so we can retrieve the Message object - Message message = channel.process(sourceMessage, true); - - // Assert that each message was successfully created - TestUtils.assertMessageExists(message, true); - messages.add(message); - } - - // Assert that TEST_SIZE messages were added - assertEquals(TEST_SIZE, messages.size()); - - Map> channelStats = ChannelController.getInstance().getStatistics().getChannelStats(channelId); - - try { - // Assert that the statistics were updated, ignore the RECEIVED status for the source/aggregate - assertNotNull(channelStats); - assertNotNull(channelStats.get(null)); - assertNotNull(channelStats.get(null).get(Status.SENT)); - assertNotNull(channelStats.get(0)); - assertNotNull(channelStats.get(1)); - assertNotNull(channelStats.get(1).get(Status.RECEIVED)); - assertNotNull(channelStats.get(1).get(Status.SENT)); - - assertEquals(TEST_SIZE, channelStats.get(null).get(Status.SENT).intValue()); - assertEquals(TEST_SIZE, channelStats.get(1).get(Status.RECEIVED).intValue()); - assertEquals(TEST_SIZE, channelStats.get(1).get(Status.SENT).intValue()); - } catch (AssertionError e) { - for (Entry> entry : channelStats.entrySet()) { - System.out.printf("metaDataId %-5s: %s\n", entry.getKey(), entry.getValue()); - } - - throw e; - } - - // Delete all the messages that were processed - for (Message message : messages) { - if (deleteStatistics) { - dao.deleteMessageStatistics(message.getChannelId(), message.getMessageId(), null); - } - - dao.deleteMessage(message.getChannelId(), message.getMessageId()); - dao.commit(); - - // Assert that each message was successfully deleted - for (ConnectorMessage connectorMessage : message.getConnectorMessages().values()) { - for (ContentType contentType : ContentType.getMessageTypes()) { - if (connectorMessage.getMessageContent(contentType) != null) { - // Assert that each content row was deleted - TestUtils.assertMessageContentDoesNotExist(connectorMessage.getMessageContent(contentType)); - } - } - - // Assert that each metadata row was deleted - TestUtils.assertConnectorMessageDoesNotExist(connectorMessage); - } - - // Assert that the message row itself was deleted - TestUtils.assertMessageDoesNotExist(message); - } - - if (deleteStatistics) { - // Assert that the statistics were decremented - channelStats = ChannelController.getInstance().getStatistics().getChannelStats(channelId); - assertEquals(0, channelStats.get(null).get(Status.RECEIVED).intValue()); - assertEquals(0, channelStats.get(null).get(Status.SENT).intValue()); - assertEquals(0, channelStats.get(0).get(Status.RECEIVED).intValue()); - assertEquals(0, channelStats.get(1).get(Status.RECEIVED).intValue()); - assertEquals(0, channelStats.get(1).get(Status.SENT).intValue()); - } else { - // Assert that the statistics were not deleted, ignore the RECEIVED status for the source/aggregate - channelStats = ChannelController.getInstance().getStatistics().getChannelStats(channelId); - assertEquals(TEST_SIZE, channelStats.get(null).get(Status.SENT).intValue()); - assertEquals(TEST_SIZE, channelStats.get(1).get(Status.RECEIVED).intValue()); - assertEquals(TEST_SIZE, channelStats.get(1).get(Status.SENT).intValue()); - } - } - - /* - * Deploy a new channel, process messages For each message, assert that: - Each connector - * message and content was inserted - * - * Then delete the connector messages and assert: - Each connector message and content was - * deleted - */ - @Test - public final void testDeleteConnectorMessages() throws Exception { - TestChannel channel = TestUtils.createDefaultChannel(channelId, serverId); - - channel.deploy(); - channel.start(null); - - try { - logger.info("Testing DonkeyDao.deleteConnectorMessages..."); - - for (int i = 1; i <= TEST_SIZE; i++) { - Message message = TestUtils.createAndStoreNewMessage(new RawMessage(testMessage), channel.getChannelId(), channel.getName(), channel.getServerId(), daoFactory); - channel.process(message.getConnectorMessages().get(0), true); - - for (ConnectorMessage connectorMessage : message.getConnectorMessages().values()) { - TestUtils.assertConnectorMessageExists(connectorMessage, true); - } - - DonkeyDao dao = null; - - try { - dao = daoFactory.getDao(); - dao.deleteConnectorMessages(channel.getChannelId(), message.getMessageId(), message.getConnectorMessages().keySet()); - dao.commit(); - } finally { - TestUtils.close(dao); - } - - for (ConnectorMessage connectorMessage : message.getConnectorMessages().values()) { - for (ContentType contentType : ContentType.getMessageTypes()) { - MessageContent messageContent = connectorMessage.getMessageContent(contentType); - if (messageContent != null) { - TestUtils.assertMessageContentDoesNotExist(messageContent); - } - } - TestUtils.assertConnectorMessageDoesNotExist(connectorMessage); - } - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.stop(); - channel.undeploy(); - } - } - - // TODO testDeleteMessageContent - - // TODO testDeleteMessageAttachments - - // TODO testDeleteMessageStatistics - - /* - * Deploy a new channel, process messages Delete all messages for the channel and assert: - The - * message table was truncated - The message metadata table was truncated - The message content - * table was truncated - The message custom metadata table was truncated - The message - * attachment table was truncated - */ - @Test - public final void testDeleteAllMessages() throws Exception { - TestChannel channel = TestUtils.createDefaultChannel(channelId, serverId); - - channel.deploy(); - channel.start(null); - - logger.info("Testing DonkeyDao.deleteAllMessages..."); - - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - } - - DonkeyDao dao = null; - - try { - dao = daoFactory.getDao(); - dao.deleteAllMessages(channel.getChannelId()); - dao.commit(); - } finally { - TestUtils.close(dao); - } - - Connection connection = null; - PreparedStatement statement = null; - ResultSet result = null; - - try { - // Assert that all the message tables have been truncated - long localChannelId = ChannelController.getInstance().getLocalChannelId(channel.getChannelId()); - connection = TestUtils.getConnection(); - - statement = connection.prepareStatement("SELECT * FROM d_m" + localChannelId); - result = statement.executeQuery(); - assertFalse(result.next()); - result.close(); - statement.close(); - - statement = connection.prepareStatement("SELECT * FROM d_mm" + localChannelId); - result = statement.executeQuery(); - assertFalse(result.next()); - result.close(); - statement.close(); - - statement = connection.prepareStatement("SELECT * FROM d_mc" + localChannelId); - result = statement.executeQuery(); - assertFalse(result.next()); - result.close(); - statement.close(); - - statement = connection.prepareStatement("SELECT * FROM d_mcm" + localChannelId); - result = statement.executeQuery(); - assertFalse(result.next()); - result.close(); - statement.close(); - - statement = connection.prepareStatement("SELECT * FROM d_ma" + localChannelId); - result = statement.executeQuery(); - assertFalse(result.next()); - result.close(); - statement.close(); - - System.out.println(daoTimer.getLog()); - } finally { - TestUtils.close(result); - TestUtils.close(statement); - TestUtils.close(connection); - - channel.stop(); - channel.undeploy(); - } - } + // Deleting one message, one connector message, or every message in a channel - and the + // cascade into content, attachments, custom metadata and statistics that each one has to + // carry out - is covered against every dialect by the 240-message-deletion smoke tests. /* * Use createChannel to create some new channels; assert: - The channel ID and local channel ID diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/MessageControllerTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageControllerTests.java index e9dce58d9e..b4f3d60ef0 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/MessageControllerTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/MessageControllerTests.java @@ -14,10 +14,8 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.util.Calendar; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -27,20 +25,12 @@ import org.junit.Test; import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.ContentType; -import com.mirth.connect.donkey.model.message.Message; -import com.mirth.connect.donkey.model.message.MessageContent; import com.mirth.connect.donkey.model.message.RawMessage; -import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.controllers.ChannelController; -import com.mirth.connect.donkey.server.controllers.MessageController; -import com.mirth.connect.donkey.server.data.DonkeyDao; import com.mirth.connect.donkey.server.data.timed.TimedDaoFactory; -import com.mirth.connect.donkey.server.queue.ConnectorMessageQueueDataSource; -import com.mirth.connect.donkey.test.util.TestChannel; import com.mirth.connect.donkey.test.util.TestUtils; import com.mirth.connect.donkey.util.ActionTimer; @@ -126,59 +116,6 @@ public void testCreateNewMessage() throws Exception { } } - @Test - public void testDeleteMessage() throws Exception { - TestChannel channel = TestUtils.createDefaultChannel(channelId, serverId); - channel.getSourceConnector().setRespondAfterProcessing(false); - channel.getSourceQueue().setDataSource(new ConnectorMessageQueueDataSource(channelId, serverId, 0, Status.RECEIVED, false, TestUtils.getDaoFactory())); - channel.getSourceQueue().updateSize(); - - Message message = null; - ConnectorMessage sourceMessage = null; - DonkeyDao dao = null; - - try { - dao = TestUtils.getDaoFactory().getDao(); - - message = new Message(); - message.setMessageId(dao.getNextMessageId(channelId)); - message.setChannelId(channelId); - message.setServerId(serverId); - message.setReceivedDate(Calendar.getInstance()); - - sourceMessage = new ConnectorMessage(channelId, channel.getName(), message.getMessageId(), 0, serverId, message.getReceivedDate(), Status.RECEIVED); - sourceMessage.setRaw(new MessageContent(channelId, message.getMessageId(), 0, ContentType.RAW, testMessage, null, false)); - message.getConnectorMessages().put(0, sourceMessage); - - dao.insertMessage(message); - dao.insertConnectorMessage(sourceMessage, true, true); - dao.insertMessageContent(sourceMessage.getRaw()); - dao.commit(); - } finally { - TestUtils.close(dao); - } - - // put the message in the source queue - channel.queue(sourceMessage); - - // assert that the message exists in the database - TestUtils.assertMessageExists(message, true); - TestUtils.assertConnectorMessageExists(sourceMessage, true); - - // assert that the message exists in the source queue's memory - assertTrue(channel.getSourceQueue().contains(sourceMessage)); - - // delete the message - Map> messages = new HashMap>(); - messages.put(message.getMessageId(), null); - MessageController.getInstance().deleteMessages(channelId, messages); - channel.invalidateQueues(); - - // assert that the message does not exist in the database - TestUtils.assertMessageDoesNotExist(message); - TestUtils.assertConnectorMessageDoesNotExist(sourceMessage); - - // assert that the message does not exist in the source queue's memory - assertTrue(!channel.getSourceQueue().contains(sourceMessage)); - } + // Deleting a message, and the queue that still holds it noticing, is covered against every + // dialect by the 240-message-deletion smoke tests. } diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index bf6bc101fb..59a1784da0 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -165,6 +165,27 @@ public static ConnectorMessage awaitConnectorStatus(String channelId, long messa + metaDataId + " of message " + messageId + " to reach " + status + "; last status was " + lastStatus); } + /** + * Polls until the server has marked one message processed, and returns it. A connector reaching + * its final status is not the end of the message: the engine still has the postprocessor to run + * and the message row to mark, and that last commit is where the remaining statistics land. A + * test that reads anything channel-wide has to wait for it. + */ + public static Message awaitProcessed(String channelId, long messageId) throws Exception { + long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); + Message message = null; + do { + message = server().fetchMessage(channelId, messageId); + if (message != null && message.isProcessed()) { + return message; + } + Thread.sleep(POLL_INTERVAL.toMillis()); + } while (System.nanoTime() < deadline); + + throw new AssertionError("Timed out after " + HarnessConfig.TIMEOUT.toSeconds() + "s waiting for message " + + messageId + " of channel " + channelId + " to be processed\n\n" + describe(message, List.of())); + } + /** * Polls until at least {@code minimum} messages are queued for one connector. Queue tests use * this to know a queue has really built up - past its in-memory buffer, say - before releasing @@ -187,6 +208,26 @@ public static void awaitQueueSizeAtLeast(String channelId, int metaDataId, long + " messages queued; last size was " + lastSize); } + /** + * Polls until a connector's queue has fallen to {@code maximum} messages or fewer. The mirror of + * {@link #awaitQueueSizeAtLeast}, for a test that emptied a queue rather than filled one. + */ + public static void awaitQueueSizeAtMost(String channelId, int metaDataId, long maximum) throws Exception { + long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); + Long lastSize = null; + do { + lastSize = server().queueSize(channelId, metaDataId); + if (lastSize != null && lastSize <= maximum) { + return; + } + Thread.sleep(POLL_INTERVAL.toMillis()); + } while (System.nanoTime() < deadline); + + throw new AssertionError("Timed out after " + HarnessConfig.TIMEOUT.toSeconds() + "s waiting for connector " + + metaDataId + " of channel " + channelId + " to have at most " + maximum + + " messages queued; last size was " + lastSize); + } + /** * Reads one connector of one message as it stands right now, without waiting for anything. * This is for asserting where a message has not got to, which is only sound once diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageDeletionTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageDeletionTest.java new file mode 100644 index 0000000000..b55c57df71 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageDeletionTest.java @@ -0,0 +1,197 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestMethodOrder; + +import com.mirth.connect.donkey.model.message.ConnectorMessage; +import com.mirth.connect.donkey.model.message.Message; +import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.donkey.model.message.attachment.Attachment; +import com.mirth.connect.model.ChannelStatistics; + +/** + * Message pruning and deletion over the client API: the three deletes the message browser offers, + * and what each one takes with it. There is no fixture shape for this - a fixture submits a message + * and asserts what was stored, where every assertion here is about what is no longer stored after a + * later call. + * + *

      The channel carries an attachment per message, a custom metadata column, and two destinations, + * so every table a delete has to cascade into (content, attachments, custom metadata, connector + * messages) holds a row before the delete runs. The cascades themselves are the point: they are + * separate statements per dialect, and a database that keeps real foreign keys refuses the parent + * delete if a child row is left behind, so a delete that returns at all has already proved most of + * its own cascade. + */ +@DisplayName("240-message-deletion/01-cascades") +@TestInstance(PER_CLASS) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +class MessageDeletionTest { + + private static final String CHANNEL = "channels/message-deletion.xml"; + + /** Two regex attachments and a custom metadata value, so a delete has something to cascade into. */ + private static final String PAYLOAD = "PHOTO:snapshot bytes;REPORT:written up;body"; + + /** What {@link #PAYLOAD} looks like once stored: the attachment handler has taken both values out. */ + private static final Pattern STORED_PAYLOAD = Pattern + .compile("PHOTO:\\$\\{ATTACH:[0-9a-f-]+\\};REPORT:\\$\\{ATTACH:[0-9a-f-]+\\};body"); + + /** The last destination in the chain; once it is SENT the message is done. */ + private static final int LAST_DESTINATION = 2; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + @Order(1) + @DisplayName("deleting one message takes its content, metadata and attachments with it") + void deleteOneMessage() throws Exception { + OieServer server = SharedServer.get(); + long deleted = submit("deleted"); + long kept = submit("kept"); + + assertEquals(2, attachments(deleted).size(), "the channel should have stored both attachments"); + + server.removeMessage(channelId, deleted, null); + + assertNull(server.fetchMessage(channelId, deleted), "the message row survived the delete"); + assertEquals(List.of(), attachments(deleted), "the message's attachments outlived the message"); + + // The delete was scoped to one message id, not to the channel. + Message survivor = server.fetchMessage(channelId, kept); + assertNotNull(survivor, "deleting one message deleted another one too"); + assertEquals("kept", survivor.getConnectorMessages().get(0).getMetaDataMap().get("MDSTRING")); + assertEquals(2, attachments(kept).size(), "deleting one message took another message's attachments"); + } + + @Test + @Order(2) + @DisplayName("deleting one connector message leaves the rest of the message") + void deleteConnectorMessage() throws Exception { + OieServer server = SharedServer.get(); + long messageId = submit("partial"); + + server.removeMessage(channelId, messageId, LAST_DESTINATION); + + Message message = server.fetchMessage(channelId, messageId); + assertNotNull(message, "deleting a destination's connector message deleted the whole message"); + Map connectors = message.getConnectorMessages(); + assertFalse(connectors.containsKey(LAST_DESTINATION), + () -> "destination " + LAST_DESTINATION + " is still there: " + connectors.keySet()); + assertTrue(connectors.containsKey(0) && connectors.containsKey(1), + () -> "the source and the other destination should be untouched, but got " + connectors.keySet()); + + // The remaining connectors kept their own rows in every table the cascade touched. + ConnectorMessage source = connectors.get(0); + assertStoredPayload(source.getRaw().getContent(), "the source's content went with the destination's"); + assertEquals("partial", source.getMetaDataMap().get("MDSTRING"), + "the source's custom metadata went with the destination's"); + assertNotNull(connectors.get(1).getEncoded(), "destination 1's content went with destination 2's"); + assertEquals(2, attachments(messageId).size(), + "attachments belong to the message, not to one connector, so a connector delete keeps them"); + } + + @Test + @Order(3) + @DisplayName("removing all messages empties the channel and leaves it usable") + void removeAllMessages() throws Exception { + OieServer server = SharedServer.get(); + long messageId = submit("bulk"); + assertTrue(server.messageCount(channelId) > 0, "nothing to remove"); + ChannelStatistics before = server.statistics(channelId); + + server.removeAllMessages(channelId, false); + + assertEquals(0, server.messageCount(channelId), "the channel still holds messages"); + assertEquals(List.of(), attachments(messageId), "the attachment table was not truncated with the messages"); + + // Without clearStatistics the counters are a lifetime total and survive the delete. + assertStatistics(before, server.statistics(channelId), + "removing messages should not have touched the statistics"); + + // Emptying the channel drops and re-adds the foreign keys between its message tables; a + // message that processes and reads back afterwards is what proves they were all restored. + long after = submit("after-bulk-delete"); + Message message = server.fetchMessage(channelId, after); + assertNotNull(message, "the channel stored nothing after all its messages were removed"); + assertStoredPayload(message.getConnectorMessages().get(0).getRaw().getContent(), + "the message stored after the bulk delete did not come back intact"); + assertEquals(2, attachments(after).size()); + } + + @Test + @Order(4) + @DisplayName("removing all messages can reset the channel's statistics at the same time") + void removeAllMessagesClearingStatistics() throws Exception { + OieServer server = SharedServer.get(); + submit("statistics"); + ChannelStatistics before = server.statistics(channelId); + assertTrue(before.getReceived() > 0 && before.getSent() > 0, + () -> "the channel should have counted the messages it processed, but got " + before); + + server.removeAllMessages(channelId, true); + + assertEquals(0, server.messageCount(channelId)); + assertStatistics(new ChannelStatistics(), server.statistics(channelId), + "clearing the statistics should have zeroed every counter"); + } + + /** Submits one message whose {@code MDSTRING} column holds {@code label}, and waits for it to finish. */ + private long submit(String label) throws Exception { + Map sourceMap = new LinkedHashMap<>(); + sourceMap.put("mdstring", label); + long messageId = SharedServer.get().submitMessage(channelId, PAYLOAD, sourceMap); + Harness.awaitConnectorStatus(channelId, messageId, LAST_DESTINATION, Status.SENT); + // The statistics assertions read a channel-wide total, so wait for the commit that + // finishes the message rather than only for its last destination. + Harness.awaitProcessed(channelId, messageId); + return messageId; + } + + /** Asserts one stored raw payload is the whole message, with an attachment token per extracted value. */ + private static void assertStoredPayload(String raw, String message) { + assertTrue(raw != null && STORED_PAYLOAD.matcher(raw).matches(), () -> message + "; got " + raw); + } + + private List attachments(long messageId) throws Exception { + return SharedServer.get().fetchAttachments(channelId, messageId); + } + + /** Compares the four lifetime counters, which is what a delete can change. */ + private static void assertStatistics(ChannelStatistics expected, ChannelStatistics actual, String message) { + assertEquals( + List.of(expected.getReceived(), expected.getFiltered(), expected.getSent(), expected.getError()), + List.of(actual.getReceived(), actual.getFiltered(), actual.getSent(), actual.getError()), + () -> message + "; expected " + expected + " but got " + actual); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index c0c55c9357..7c8eed8852 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -16,6 +16,7 @@ import com.mirth.connect.donkey.model.message.RawMessage; import com.mirth.connect.donkey.model.message.attachment.Attachment; import com.mirth.connect.model.Channel; +import com.mirth.connect.model.ChannelStatistics; import com.mirth.connect.model.DashboardStatus; import com.mirth.connect.model.LoginStatus; import com.mirth.connect.model.converters.ObjectXMLSerializer; @@ -253,6 +254,34 @@ List fetchAttachments(String channelId, long messageId) throws Clien return attachments == null ? List.of() : attachments; } + /** + * Deletes one message, or one of its connector messages when {@code metaDataId} is not null. + * This is the message browser's delete: the server turns it into a one-message filter, so + * asking for metadata id 0 deletes the whole message rather than only the source. + */ + void removeMessage(String channelId, long messageId, Integer metaDataId) throws ClientException { + client.removeMessage(channelId, messageId, metaDataId, null); + } + + /** + * Deletes every message in a channel, stopping and restarting it if it is running, and + * optionally resetting its statistics at the same time. + */ + void removeAllMessages(String channelId, boolean clearStatistics) throws ClientException { + client.removeAllMessages(channelId, true, clearStatistics); + } + + /** How many messages the channel still holds. */ + long messageCount(String channelId) throws ClientException { + Long count = client.getMessageCount(channelId, new MessageFilter()); + return count == null ? 0L : count; + } + + /** The channel's aggregate lifetime counters, as the dashboard's statistics view reports them. */ + ChannelStatistics statistics(String channelId) throws ClientException { + return client.getStatistics(channelId); + } + /** Undeploys and removes a channel, tolerating failures so teardown always continues. */ void removeChannel(String channelId) { deployedChannelIds.remove(channelId); diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/QueuedMessageDeletionTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/QueuedMessageDeletionTest.java new file mode 100644 index 0000000000..a8bba03c06 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/QueuedMessageDeletionTest.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +/** + * Deleting messages a destination queue is still holding. A queue is a database table and an + * in-memory buffer at once, so a delete that only reaches the table leaves the queue thread + * retrying rows that are no longer there; the server is supposed to invalidate the queue as part + * of the delete, which is what makes the dashboard's depth fall to zero. + * + *

      The destination fails every send while the gate is shut, so the messages are on the queue and + * staying there when the delete lands, rather than racing the queue thread to be drained first. + */ +@DisplayName("240-message-deletion/02-queued-destination") +@TestInstance(PER_CLASS) +class QueuedMessageDeletionTest { + + private static final String CHANNEL = "channels/message-deletion-queued.xml"; + + /** The configuration property the destination fails on until it holds this run's token. */ + private static final String GATE = "oie.smoketest.releaseDeletionQueue"; + + private static final int DESTINATION = 1; + + private static final int MESSAGE_COUNT = 4; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void deletingQueuedMessagesEmptiesTheQueue() throws Exception { + OieServer server = SharedServer.get(); + // The payload carries this run's token, so a gate left open by an earlier run cannot + // release this one. + String token = UUID.randomUUID().toString(); + List messageIds = new ArrayList<>(); + + try { + for (int i = 1; i <= MESSAGE_COUNT; i++) { + messageIds.add(server.submitMessage(channelId, token, new LinkedHashMap<>())); + } + Harness.awaitQueueSizeAtLeast(channelId, DESTINATION, MESSAGE_COUNT); + + for (long messageId : messageIds) { + server.removeMessage(channelId, messageId, null); + } + + assertEquals(0, server.messageCount(channelId), "the queued messages were not deleted"); + Harness.awaitQueueSizeAtMost(channelId, DESTINATION, 0); + } finally { + // Also on failure, so a channel left behind by this test is not a wedged one. + Harness.setConfigurationProperty(GATE, token); + } + } +} diff --git a/smoketest/src/test/resources/channels/message-deletion-queued.xml b/smoketest/src/test/resources/channels/message-deletion-queued.xml new file mode 100644 index 0000000000..013616a2a4 --- /dev/null +++ b/smoketest/src/test/resources/channels/message-deletion-queued.xml @@ -0,0 +1,190 @@ + + c7b3a512-9d64-4f28-8a10-5e3b6c910402 + 2 + message-deletion-queued + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + true + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 3 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/smoketest/src/test/resources/channels/message-deletion.xml b/smoketest/src/test/resources/channels/message-deletion.xml new file mode 100644 index 0000000000..2f72cc37ec --- /dev/null +++ b/smoketest/src/test/resources/channels/message-deletion.xml @@ -0,0 +1,275 @@ + + c7b3a512-9d64-4f28-8a10-5e3b6c910401 + 3 + Message Deletion + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + No-op + 0 + true + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + 2 + Destination 2 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + MDSTRING + STRING + mdstring + + + + com.mirth.connect.server.attachments.regex.RegexAttachmentHandlerProvider + Regex + + + regex.pattern0 + PHOTO:(.*?); + + + regex.mimetype0 + image/jpeg + + + regex.pattern1 + REPORT:(.*?); + + + regex.mimetype1 + text/plain + + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file From b9ad24546277bc194a1fc92c6dab5dcee000c1c1 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 23:33:57 -0500 Subject: [PATCH 22/28] Fix statistics errors caused by channel ID scoping Issue: https://github.com/OpenIntegrationEngine/engine/issues/456 Issue: https://github.com/OpenIntegrationEngine/engine/issues/457 Signed-off-by: Mitch Gaffigan --- .../server/controllers/ChannelController.java | 17 ++++++++-- .../connect/donkey/server/data/DonkeyDao.java | 6 ++++ .../server/data/buffered/BufferedDao.java | 22 +++++++++++++ .../donkey/server/data/jdbc/JdbcDao.java | 24 +++++++++++--- .../server/data/passthru/PassthruDao.java | 10 ++++++ .../donkey/server/data/timed/TimedDao.java | 22 +++++++++++++ .../servlets/ChannelStatisticsServlet.java | 5 +++ .../server/controllers/ChannelController.java | 4 +++ .../controllers/DefaultChannelController.java | 10 ++++++ .../controllers/DonkeyEngineController.java | 31 ++++++++++++++++--- 10 files changed, 139 insertions(+), 12 deletions(-) diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/ChannelController.java b/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/ChannelController.java index c3b219087a..adac29ec2c 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/ChannelController.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/ChannelController.java @@ -86,10 +86,18 @@ public Statistics getTotalStatistics() { } public Statistics getStatisticsFromStorage(String serverId) { + return getStatisticsFromStorage(serverId, null); + } + + /** + * The stored current statistics of the given channels, or of every channel when + * {@code channelIds} is null or empty. + */ + public Statistics getStatisticsFromStorage(String serverId, Set channelIds) { DonkeyDao dao = donkey.getReadOnlyDaoFactory().getDao(); try { - return dao.getChannelStatistics(serverId); + return dao.getChannelStatistics(serverId, channelIds); } finally { dao.close(); } @@ -106,10 +114,15 @@ public List getPortsInUse() { } public Statistics getTotalStatisticsFromStorage(String serverId) { + return getTotalStatisticsFromStorage(serverId, null); + } + + /** The lifetime counterpart of {@link #getStatisticsFromStorage(String, Set)}. */ + public Statistics getTotalStatisticsFromStorage(String serverId, Set channelIds) { DonkeyDao dao = donkey.getReadOnlyDaoFactory().getDao(); try { - return dao.getChannelTotalStatistics(serverId); + return dao.getChannelTotalStatistics(serverId, channelIds); } finally { dao.close(); } diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/DonkeyDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/DonkeyDao.java index 032d65986e..320b7f2d60 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/DonkeyDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/DonkeyDao.java @@ -130,7 +130,13 @@ public interface DonkeyDao { public Statistics getChannelStatistics(String serverId); + /** The current statistics of the given channels only. A null or empty set means every channel. */ + public Statistics getChannelStatistics(String serverId, Set channelIds); + public Statistics getChannelTotalStatistics(String serverId); + + /** The lifetime counterpart of {@link #getChannelStatistics(String, Set)}. */ + public Statistics getChannelTotalStatistics(String serverId, Set channelIds); public List getPortsInUse(); diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/buffered/BufferedDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/buffered/BufferedDao.java index fc1c2efbaa..001aa93a2e 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/buffered/BufferedDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/buffered/BufferedDao.java @@ -579,6 +579,17 @@ public Statistics getChannelStatistics(String serverId) { } } + @Override + public Statistics getChannelStatistics(String serverId, Set channelIds) { + DonkeyDao dao = getDelegateDao(); + + try { + return dao.getChannelStatistics(serverId, channelIds); + } finally { + dao.close(); + } + } + @Override public Statistics getChannelTotalStatistics(String serverId) { DonkeyDao dao = getDelegateDao(); @@ -589,6 +600,17 @@ public Statistics getChannelTotalStatistics(String serverId) { dao.close(); } } + + @Override + public Statistics getChannelTotalStatistics(String serverId, Set channelIds) { + DonkeyDao dao = getDelegateDao(); + + try { + return dao.getChannelTotalStatistics(serverId, channelIds); + } finally { + dao.close(); + } + } @Override public List getPortsInUse() { diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java index 0a08874df3..5baa77e751 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java @@ -2353,21 +2353,35 @@ public void resetAllStatistics(String channelId) { @Override public Statistics getChannelStatistics(String serverId) { - return getChannelStatistics(serverId, false); + return getChannelStatistics(serverId, null, false); + } + + @Override + public Statistics getChannelStatistics(String serverId, Set channelIds) { + return getChannelStatistics(serverId, channelIds, false); } @Override public Statistics getChannelTotalStatistics(String serverId) { - return getChannelStatistics(serverId, true); + return getChannelStatistics(serverId, null, true); } - private Statistics getChannelStatistics(String serverId, boolean total) { - Map channelIds = getLocalChannelIds(); + @Override + public Statistics getChannelTotalStatistics(String serverId, Set channelIds) { + return getChannelStatistics(serverId, channelIds, true); + } + + private Statistics getChannelStatistics(String serverId, Set requestedChannelIds, boolean total) { + Map localChannelIds = getLocalChannelIds(); String queryId = (total) ? "getChannelTotalStatistics" : "getChannelStatistics"; Statistics statistics = new Statistics(!total); ResultSet resultSet = null; - for (String channelId : channelIds.keySet()) { + for (String channelId : localChannelIds.keySet()) { + if (CollectionUtils.isNotEmpty(requestedChannelIds) && !requestedChannelIds.contains(channelId)) { + continue; + } + PreparedStatement statement = null; try { statement = prepareStatement(queryId, channelId); diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/passthru/PassthruDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/passthru/PassthruDao.java index 9856290c6f..1d24dd06f0 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/passthru/PassthruDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/passthru/PassthruDao.java @@ -340,11 +340,21 @@ public Statistics getChannelStatistics(String serverId) { return new Statistics(false); } + @Override + public Statistics getChannelStatistics(String serverId, Set channelIds) { + return new Statistics(false); + } + @Override public Statistics getChannelTotalStatistics(String serverId) { return new Statistics(false); } + @Override + public Statistics getChannelTotalStatistics(String serverId, Set channelIds) { + return new Statistics(false); + } + @Override public List getConnectorMessages(String channelId, long messageId, Set metaDataIds, boolean includeContent) { return null; diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/timed/TimedDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/timed/TimedDao.java index b6234ef99d..a16a760213 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/timed/TimedDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/timed/TimedDao.java @@ -662,6 +662,17 @@ public Statistics getChannelStatistics(String serverId) { } } + @Override + public Statistics getChannelStatistics(String serverId, Set channelIds) { + long startTime = System.currentTimeMillis(); + + try { + return dao.getChannelStatistics(serverId, channelIds); + } finally { + timer.log("getChannelStatistics", System.currentTimeMillis() - startTime); + } + } + @Override public Statistics getChannelTotalStatistics(String serverId) { long startTime = System.currentTimeMillis(); @@ -672,6 +683,17 @@ public Statistics getChannelTotalStatistics(String serverId) { timer.log("getChannelTotalStatistics", System.currentTimeMillis() - startTime); } } + + @Override + public Statistics getChannelTotalStatistics(String serverId, Set channelIds) { + long startTime = System.currentTimeMillis(); + + try { + return dao.getChannelTotalStatistics(serverId, channelIds); + } finally { + timer.log("getChannelTotalStatistics", System.currentTimeMillis() - startTime); + } + } @Override public List getPortsInUse() { diff --git a/server/src/main/java/com/mirth/connect/server/api/servlets/ChannelStatisticsServlet.java b/server/src/main/java/com/mirth/connect/server/api/servlets/ChannelStatisticsServlet.java index 48467e6598..6f69628e7d 100644 --- a/server/src/main/java/com/mirth/connect/server/api/servlets/ChannelStatisticsServlet.java +++ b/server/src/main/java/com/mirth/connect/server/api/servlets/ChannelStatisticsServlet.java @@ -105,6 +105,11 @@ public ChannelStatistics getStatistics(String channelId) { if (CollectionUtils.isNotEmpty(channelStatisticsList)) { channelStatistics = channelStatisticsList.get(0); + + // Paranoia: verify that the channel ID matches the requested one + if (!channelId.equals(channelStatistics.getChannelId())) { + throw new IllegalStateException("Channel ID mismatch: expected " + channelId + " but got " + channelStatistics.getChannelId()); + } } else { channelStatistics = new ChannelStatistics(); channelStatistics.setChannelId(channelId); diff --git a/server/src/main/java/com/mirth/connect/server/controllers/ChannelController.java b/server/src/main/java/com/mirth/connect/server/controllers/ChannelController.java index b7897771c7..21b9eede6a 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/ChannelController.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/ChannelController.java @@ -86,8 +86,12 @@ public static ChannelController getInstance() { public abstract Statistics getStatisticsFromStorage(String serverId); + public abstract Statistics getStatisticsFromStorage(String serverId, Set channelIds); + public abstract Statistics getTotalStatisticsFromStorage(String serverId); + public abstract Statistics getTotalStatisticsFromStorage(String serverId, Set channelIds); + public abstract int getConnectorMessageCount(String channelId, String serverId, int metaDataId, Status status); public abstract void resetStatistics(Map> channelConnectorMap, Set statuses); diff --git a/server/src/main/java/com/mirth/connect/server/controllers/DefaultChannelController.java b/server/src/main/java/com/mirth/connect/server/controllers/DefaultChannelController.java index 2dba0303e5..b42aeb996f 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/DefaultChannelController.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/DefaultChannelController.java @@ -732,11 +732,21 @@ public Statistics getStatisticsFromStorage(String serverId) { return com.mirth.connect.donkey.server.controllers.ChannelController.getInstance().getStatisticsFromStorage(serverId); } + @Override + public Statistics getStatisticsFromStorage(String serverId, Set channelIds) { + return com.mirth.connect.donkey.server.controllers.ChannelController.getInstance().getStatisticsFromStorage(serverId, channelIds); + } + @Override public Statistics getTotalStatisticsFromStorage(String serverId) { return com.mirth.connect.donkey.server.controllers.ChannelController.getInstance().getTotalStatisticsFromStorage(serverId); } + @Override + public Statistics getTotalStatisticsFromStorage(String serverId, Set channelIds) { + return com.mirth.connect.donkey.server.controllers.ChannelController.getInstance().getTotalStatisticsFromStorage(serverId, channelIds); + } + @Override public int getConnectorMessageCount(String channelId, String serverId, int metaDataId, Status status) { return com.mirth.connect.donkey.server.controllers.ChannelController.getInstance().getConnectorMessageCount(channelId, serverId, metaDataId, status); diff --git a/server/src/main/java/com/mirth/connect/server/controllers/DonkeyEngineController.java b/server/src/main/java/com/mirth/connect/server/controllers/DonkeyEngineController.java index 1dbeb66b03..19d4a3f947 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/DonkeyEngineController.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/DonkeyEngineController.java @@ -739,7 +739,7 @@ private Map getDashboardChannels(Set channelIds) { synchronized (deployingChannels) { for (Channel channel : deployingChannels) { - if (!channels.containsKey(channel.getChannelId())) { + if (requested(channelIds, channel) && !channels.containsKey(channel.getChannelId())) { channels.put(channel.getChannelId(), channel); } } @@ -747,7 +747,7 @@ private Map getDashboardChannels(Set channelIds) { synchronized (undeployingChannels) { for (Channel channel : undeployingChannels) { - if (!channels.containsKey(channel.getChannelId())) { + if (requested(channelIds, channel) && !channels.containsKey(channel.getChannelId())) { channels.put(channel.getChannelId(), channel); } } @@ -755,6 +755,11 @@ private Map getDashboardChannels(Set channelIds) { return channels; } + /** Whether one channel is in the set a caller asked about; an empty set means all of them. */ + private boolean requested(Set channelIds, Channel channel) { + return CollectionUtils.isEmpty(channelIds) || channelIds.contains(channel.getChannelId()); + } + @Override public List getChannelStatusList(Set channelIds, boolean includeUndeployed) { List statusList = new ArrayList<>(); @@ -778,8 +783,16 @@ public List getChannelStatusList(Set channelIds, boolea private List getUndeployedDashboardStatuses(Collection channelModels, Map metadataMap) { List statuses = new ArrayList(); - Statistics stats = channelController.getStatisticsFromStorage(configurationController.getServerId()); - Statistics lifetimeStats = channelController.getTotalStatisticsFromStorage(configurationController.getServerId()); + if (channelModels.isEmpty()) { + return statuses; + } + + Set channelIds = new HashSet(); + for (com.mirth.connect.model.Channel channelModel : channelModels) { + channelIds.add(channelModel.getId()); + } + Statistics stats = channelController.getStatisticsFromStorage(configurationController.getServerId(), channelIds); + Statistics lifetimeStats = channelController.getTotalStatisticsFromStorage(configurationController.getServerId(), channelIds); String serverId = configurationController.getServerId(); for (com.mirth.connect.model.Channel channelModel : channelModels) { @@ -1043,7 +1056,15 @@ private List getDashboardChannelStatistics(Collection getUndeployedChannelStatistics(Collection channelModels, Set includeMetaDataIds, Set excludeMetaDataIds) { List statisticsList = new ArrayList(); - Statistics stats = channelController.getStatisticsFromStorage(configurationController.getServerId()); + if (channelModels.isEmpty()) { + return statisticsList; + } + + Set channelIds = new HashSet(); + for (com.mirth.connect.model.Channel channelModel : channelModels) { + channelIds.add(channelModel.getId()); + } + Statistics stats = channelController.getStatisticsFromStorage(configurationController.getServerId(), channelIds); String serverId = configurationController.getServerId(); From 483aa6d911e3117ec38865bb58a2b827032fc6f1 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Sun, 20 Sep 2026 23:38:29 -0500 Subject: [PATCH 23/28] Translate StatisticsTests to ci test Signed-off-by: Mitch Gaffigan --- .../donkey/test/ChannelControllerTests.java | 159 +---- .../connect/donkey/test/DonkeyDaoTests.java | 45 +- .../connect/donkey/test/StatisticsTests.java | 569 ------------------ .../smoketest/Harness.java | 5 + .../MixedDestinationStatisticsTest.java | 64 ++ .../smoketest/OieServer.java | 38 +- .../smoketest/PersistedStatisticsTest.java | 101 ++++ .../SourceFilteredStatisticsTest.java | 59 ++ .../StalledDestinationStatisticsTest.java | 86 +++ .../smoketest/StatisticsAccountingTest.java | 76 +++ .../smoketest/StatisticsAssertions.java | 124 ++++ .../statistics-mixed-destinations.xml | 321 ++++++++++ .../channels/statistics-normal-flow.xml | 244 ++++++++ .../channels/statistics-persisted.xml | 321 ++++++++++ .../statistics-queued-destination.xml | 182 ++++++ .../channels/statistics-source-filtered.xml | 183 ++++++ 16 files changed, 1810 insertions(+), 767 deletions(-) delete mode 100644 donkey/src/test/java/com/mirth/connect/donkey/test/StatisticsTests.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/MixedDestinationStatisticsTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/PersistedStatisticsTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/SourceFilteredStatisticsTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/StalledDestinationStatisticsTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAccountingTest.java create mode 100644 smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAssertions.java create mode 100644 smoketest/src/test/resources/channels/statistics-mixed-destinations.xml create mode 100644 smoketest/src/test/resources/channels/statistics-normal-flow.xml create mode 100644 smoketest/src/test/resources/channels/statistics-persisted.xml create mode 100644 smoketest/src/test/resources/channels/statistics-queued-destination.xml create mode 100644 smoketest/src/test/resources/channels/statistics-source-filtered.xml diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelControllerTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelControllerTests.java index 4927f9b60c..b7df00e374 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelControllerTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/ChannelControllerTests.java @@ -11,14 +11,6 @@ import static org.junit.Assert.assertEquals; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.Types; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.AfterClass; @@ -26,21 +18,21 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.controllers.ChannelController; import com.mirth.connect.donkey.server.data.timed.TimedDaoFactory; -import com.mirth.connect.donkey.test.util.TestSourceConnector; import com.mirth.connect.donkey.test.util.TestUtils; import com.mirth.connect.donkey.util.ActionTimer; +/** + * What is left of these tests after the statistics ones moved to the CI harness: the statistics + * cases live in {@code smoketest/.../*StatisticsTest.java} (250-statistics), which reads the same + * counters over the client API against every dialect instead of against the database directly. + */ public class ChannelControllerTests { private static int TEST_SIZE = 10; private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; - private static String serverId = TestUtils.DEFAULT_SERVER_ID; - private static String testMessage = TestUtils.TEST_HL7_MESSAGE; private static ActionTimer daoTimer = new ActionTimer(); private Logger logger = LogManager.getLogger(this.getClass()); @@ -89,145 +81,4 @@ final public void testGetLocalChannelId() throws Exception { ChannelController.getInstance().removeChannel(channelId); } } - - /* - * Remove the channel corresponding to channelId (if applicable), assert: - The channel - * statistics in the database are equal to the ones returned from getStatistics - * - * Create a new channel (use channelId), then assert: - The channel statistics in the database - * are equal to the ones returned from getStatistics - * - * Send messages through the channel, and after each message, assert: - The channel statistics - * in the database are equal to the ones returned from getStatistics - */ - @Test - public final void testGetTotals() throws Exception { - Channel channel = null; - - try { - logger.info("Testing ChannelController.getTotals..."); - - ChannelController.getInstance().removeChannel(channelId); - assertEquals(TestUtils.getChannelStatistics(channelId), ChannelController.getInstance().getStatistics().getChannelStats(channelId)); - - channel = TestUtils.createDefaultChannel(channelId, serverId); - channel.deploy(); - channel.start(null); - - assertEquals(TestUtils.getChannelStatistics(channel.getChannelId()), ChannelController.getInstance().getStatistics().getChannelStats(channelId)); - - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - assertEquals(TestUtils.getChannelStatistics(channel.getChannelId()), ChannelController.getInstance().getStatistics().getChannelStats(channelId)); - } - - System.out.println(daoTimer.getLog()); - } finally { - if (channel != null) { - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - } - } - - /* - * Create a new default channel Insert some random initial source/destination/aggregate - * statistics Start up the channel, send messages, and after each message assert: - The - * statistics returned from getStatistics is equal to the difference between the statistics in - * the database and the initial statistics - */ - @Test - public final void testGetStatistics() throws Exception { - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - - try { - logger.info("Testing ChannelController.getStatistics..."); - - // Insert some initial statistics - Connection connection = null; - PreparedStatement statement = null; - try { - long localChannelId = ChannelController.getInstance().getLocalChannelId(channelId); - connection = TestUtils.getConnection(); - statement = connection.prepareStatement("DELETE FROM d_ms" + localChannelId); - statement.executeUpdate(); - statement.close(); - - for (Integer metaDataId : new Integer[] { null, 0, 1 }) { - statement = connection.prepareStatement("INSERT INTO d_ms" + localChannelId + " (metadata_id, received, filtered, transformed, pending, sent, error) VALUES (?,?,?,?,?,?,?)"); - if (metaDataId != null) { - statement.setInt(1, metaDataId); - } else { - statement.setNull(1, Types.INTEGER); - } - for (int i = 2; i <= 7; i++) { - statement.setInt(i, (int) (Math.random() * 100)); - } - statement.executeUpdate(); - statement.close(); - } - connection.commit(); - } finally { - TestUtils.close(statement); - TestUtils.close(connection); - } - - // Get the initial statistics - Map> initialStats = TestUtils.getChannelStatistics(channel.getChannelId()); - - channel.deploy(); - channel.start(null); - - // Send messages - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - Map> dbStats = TestUtils.getChannelStatistics(channel.getChannelId()); - Map> vmStats = ChannelController.getInstance().getStatistics().getChannelStats(channel.getChannelId()); - Map> subtractedStats = subtractStats(dbStats, initialStats); - - // Assert that getStatistics returns the difference between the current database statistics and the initial statistics - assertEquals(subtractedStats, vmStats); - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.stop(); - channel.undeploy(); - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - } - - private Map> subtractStats(Map> minuend, Map> subtrahend) { - Map> stats = new HashMap>(); - - for (Integer metaDataId : joinSets(minuend.keySet(), subtrahend.keySet())) { - Map connectorStats = new HashMap(); - - for (Status status : Status.values()) { - if (status != Status.QUEUED) { - connectorStats.put(status, 0L); - if (minuend.containsKey(metaDataId) && minuend.get(metaDataId).containsKey(status)) { - connectorStats.put(status, minuend.get(metaDataId).get(status)); - } - if (subtrahend.containsKey(metaDataId) && subtrahend.get(metaDataId).containsKey(status)) { - connectorStats.put(status, connectorStats.get(status) - subtrahend.get(metaDataId).get(status)); - } - } - } - - stats.put(metaDataId, connectorStats); - } - - return stats; - } - - private Set joinSets(Set set1, Set set2) { - Set joinedSet = new HashSet(); - joinedSet.addAll(set1); - joinedSet.addAll(set2); - return joinedSet; - } } diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java index 8e27c0bb14..087fa24a22 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/test/DonkeyDaoTests.java @@ -42,7 +42,6 @@ import com.mirth.connect.donkey.server.StartException; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.channel.DestinationChainProvider; -import com.mirth.connect.donkey.server.channel.DispatchResult; import com.mirth.connect.donkey.server.channel.StorageSettings; import com.mirth.connect.donkey.server.controllers.ChannelController; import com.mirth.connect.donkey.server.data.DonkeyDao; @@ -1314,48 +1313,8 @@ public final void testGetUnfinishedMessages() throws Exception { // TODO testGetMessageAttachment - /* - * Start up a new channel, assert that: - The channel statistics in the database are the same as - * the ones returned from getChannelStatistics - * - * Then send messages, and after each one assert: - The channel statistics in the database are - * the same as the ones returned from getChannelStatistics - */ - @Test - public final void testGetChannelStatistics() throws Exception { - // TODO also test getChannelTotalStatistics here - - Channel channel = TestUtils.createDefaultChannel(channelId, serverId); - channel.deploy(); - channel.start(null); - - DispatchResult dispatchResult = null; - - try { - dispatchResult = channel.getSourceConnector().dispatchRawMessage(new RawMessage(TestUtils.TEST_HL7_MESSAGE)); - } finally { - channel.getSourceConnector().finishDispatch(dispatchResult); - } - - try { - logger.info("Testing DonkeyDao.getChannelStatistics..."); - - // Assert that the statistics are correct - assertEquals(TestUtils.getChannelStatistics(channel.getChannelId()), ChannelController.getInstance().getStatistics().getChannelStats(channel.getChannelId())); - - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - // Assert that the statistics are correct - assertEquals(TestUtils.getChannelStatistics(channel.getChannelId()), ChannelController.getInstance().getStatistics().getChannelStats(channel.getChannelId())); - } - - System.out.println(daoTimer.getLog()); - } finally { - channel.stop(); - channel.undeploy(); - } - } + // Reading a channel's statistics back - and the per-dialect statements that wrote them + // there - is covered against every dialect by the 250-statistics smoke tests. /** * Sends messages through 5 channels with (maxConnections * 2) asynchronous destinations for 10 diff --git a/donkey/src/test/java/com/mirth/connect/donkey/test/StatisticsTests.java b/donkey/src/test/java/com/mirth/connect/donkey/test/StatisticsTests.java deleted file mode 100644 index 10a93925d8..0000000000 --- a/donkey/src/test/java/com/mirth/connect/donkey/test/StatisticsTests.java +++ /dev/null @@ -1,569 +0,0 @@ -/* - * 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.assertTrue; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mirth.connect.donkey.model.DonkeyException; -import com.mirth.connect.donkey.model.channel.ConnectorProperties; -import com.mirth.connect.donkey.model.message.ConnectorMessage; -import com.mirth.connect.donkey.model.message.Response; -import com.mirth.connect.donkey.model.message.Status; -import com.mirth.connect.donkey.server.Donkey; -import com.mirth.connect.donkey.server.StartException; -import com.mirth.connect.donkey.server.channel.DestinationChainProvider; -import com.mirth.connect.donkey.server.channel.DestinationConnector; -import com.mirth.connect.donkey.server.channel.FilterTransformerExecutor; -import com.mirth.connect.donkey.server.channel.FilterTransformerResult; -import com.mirth.connect.donkey.server.channel.components.FilterTransformerException; -import com.mirth.connect.donkey.server.controllers.ChannelController; -import com.mirth.connect.donkey.server.data.DonkeyDaoFactory; -import com.mirth.connect.donkey.server.queue.ConnectorMessageQueueDataSource; -import com.mirth.connect.donkey.server.queue.DestinationQueue; -import com.mirth.connect.donkey.test.util.TestChannel; -import com.mirth.connect.donkey.test.util.TestDataType; -import com.mirth.connect.donkey.test.util.TestDispatcher; -import com.mirth.connect.donkey.test.util.TestDispatcherProperties; -import com.mirth.connect.donkey.test.util.TestFilterTransformer; -import com.mirth.connect.donkey.test.util.TestPostProcessor; -import com.mirth.connect.donkey.test.util.TestPreProcessor; -import com.mirth.connect.donkey.test.util.TestResponseTransformer; -import com.mirth.connect.donkey.test.util.TestSourceConnector; -import com.mirth.connect.donkey.test.util.TestUtils; - -public class StatisticsTests { - private static long TEST_SIZE = 100; - private static String channelId = TestUtils.DEFAULT_CHANNEL_ID; - private static String serverId = TestUtils.DEFAULT_SERVER_ID; - private static String testMessage = TestUtils.TEST_HL7_MESSAGE; - private static DonkeyDaoFactory daoFactory; - private Logger logger = LogManager.getLogger(this.getClass()); - - @BeforeClass - final public static void beforeClass() throws StartException { - Donkey.getInstance().startEngine(TestUtils.getDonkeyTestConfiguration()); - daoFactory = TestUtils.getDaoFactory(); - } - - @AfterClass - final public static void afterClass() throws StartException { - Donkey.getInstance().stopEngine(); - } - - /* - * Create a "normal" channel with four destination connectors where all messages process through - * the source connector with a final status of RECEIVED, and process through each destination - * connector with a status of SENT - * - * Send messages, assert that: - The source connector stats have TEST_SIZE for RECEIVED and - * TRANSFORMED - The destination connector stats have TEST_SIZE for RECEIVED and SENT - The - * aggregate stats are correct (RECEIVED/TRANSFORMED is the same as the source connector, - * PENDING/SENT/QUEUED is the same as the destination connectors combined, FILTERED/ERROR is the - * same as all connectors combined) - */ - @Test - public final void testStatistics1() throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId, true, 2, 2); - - channel.deploy(); - channel.start(null); - - // Send messages through the channel - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - } - - // Assert that the messages were sent - assertEquals(TEST_SIZE, channel.getNumMessages()); - - // Assert the source connector stats are correct - - statsEqual(channel.getChannelId(), 0, TEST_SIZE, 0l, TEST_SIZE, 0l, 0l, 0l); - // Assert that destination connector stats are correct - statsEqual(channel.getChannelId(), 1, TEST_SIZE, 0l, 0l, 0l, TEST_SIZE, 0l); - statsEqual(channel.getChannelId(), 2, TEST_SIZE, 0l, 0l, 0l, TEST_SIZE, 0l); - statsEqual(channel.getChannelId(), 3, TEST_SIZE, 0l, 0l, 0l, TEST_SIZE, 0l); - statsEqual(channel.getChannelId(), 4, TEST_SIZE, 0l, 0l, 0l, TEST_SIZE, 0l); - // Assert the aggregate stats are correct - assertTrue(channelStatsCorrect()); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Create a channel where all messages are filtered on the source connector - * - * Send messages, assert that: - The source connector stats have TEST_SIZE for RECEIVED and - * FILTERED - The destination connector stats are all zeroes - The aggregate stats are correct - * (RECEIVED/TRANSFORMED is the same as the source connector, PENDING/SENT/QUEUED is the same as - * the destination connectors combined, FILTERED/ERROR is the same as all connectors combined) - */ - @Test - public final void testStatistics2() throws Exception { - TestChannel channel = (TestChannel) TestUtils.createDefaultChannel(channelId, serverId, true, 2, 2); - - TestFilterTransformer filterTransformer = new TestFilterTransformer() { - @Override - public FilterTransformerResult doFilterTransform(ConnectorMessage message) throws FilterTransformerException { - super.doFilterTransform(message); - return new FilterTransformerResult(true, null); - } - }; - channel.getSourceConnector().getFilterTransformerExecutor().setFilterTransformer(filterTransformer); - - channel.deploy(); - channel.start(null); - - // Send messages through the channel - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - } - - // Assert that the messages were sent - assertEquals(TEST_SIZE, channel.getNumMessages()); - - // Assert the source connector stats are correct - statsEqual(channel.getChannelId(), 0, TEST_SIZE, TEST_SIZE, 0L, 0L, 0L, 0L); - // Assert that destination connector stats are correct - statsEqual(channel.getChannelId(), 1, 0L, 0L, 0L, 0L, 0L, 0L); - statsEqual(channel.getChannelId(), 2, 0L, 0L, 0L, 0L, 0L, 0L); - statsEqual(channel.getChannelId(), 3, 0L, 0L, 0L, 0L, 0L, 0L); - statsEqual(channel.getChannelId(), 4, 0L, 0L, 0L, 0L, 0L, 0L); - // Assert the aggregate stats are correct - assertTrue(channelStatsCorrect()); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Create a channel where each destination results in a different status (FILTERED, SENT, - * QUEUED, ERROR) - * - * Send messages, assert that: - The source connector stats have TEST_SIZE for RECEIVED and - * TRANSFORMED - The first destination connector stats have TEST_SIZE for FILTERED - The second - * destination connector stats have TEST_SIZE for SENT - The third destination connector stats - * have TEST_SIZE for QUEUED - The fourth destination connector stats have TEST_SIZE for ERROR - - * The aggregate stats are correct (RECEIVED/TRANSFORMED is the same as the source connector, - * PENDING/SENT/QUEUED is the same as the destination connectors combined, FILTERED/ERROR is the - * same as all connectors combined) - */ - @Test - public final void testStatistics3() throws Exception { - TestUtils.initChannel(channelId); - - TestChannel channel = new TestChannel(); - - channel.setChannelId(channelId); - channel.setServerId(serverId); - - channel.setPreProcessor(new TestPreProcessor()); - channel.setPostProcessor(new TestPostProcessor()); - - TestSourceConnector sourceConnector = (TestSourceConnector) TestUtils.createDefaultSourceConnector(); - sourceConnector.setChannelId(channel.getChannelId()); - sourceConnector.setChannel(channel); - channel.setSourceConnector(sourceConnector); - channel.getSourceConnector().setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - DestinationChainProvider chain = new DestinationChainProvider(); - chain.setChannelId(channel.getChannelId()); - - for (int i = 1; i <= 4; i++) { - DestinationConnector destinationConnector = new TestDispatcher(); - destinationConnector.setChannelId(channel.getChannelId()); - - TestDispatcherProperties connectorProperties = new TestDispatcherProperties(); - if (i == 3) { - connectorProperties.getDestinationConnectorProperties().setQueueEnabled(true); - connectorProperties.getDestinationConnectorProperties().setSendFirst(false); - } else { - connectorProperties.getDestinationConnectorProperties().setQueueEnabled(false); - } - - destinationConnector.setConnectorProperties(connectorProperties); - destinationConnector.setDestinationName(TestUtils.DEFAULT_DESTINATION_NAME); - destinationConnector.setInboundDataType(new TestDataType()); - destinationConnector.setOutboundDataType(new TestDataType()); - destinationConnector.setResponseTransformerExecutor(TestUtils.createDefaultResponseTransformerExecutor()); - - DestinationQueue destinationConnectorQueue = new DestinationQueue(connectorProperties.getDestinationConnectorProperties().getThreadAssignmentVariable(), connectorProperties.getDestinationConnectorProperties().getThreadCount(), connectorProperties.getDestinationConnectorProperties().isRegenerateTemplate(), destinationConnector.getSerializer(), destinationConnector.getMessageMaps()); - destinationConnectorQueue.setDataSource(new ConnectorMessageQueueDataSource(channel.getChannelId(), channel.getServerId(), i, Status.QUEUED, false, daoFactory)); - destinationConnectorQueue.updateSize(); - destinationConnector.setQueue(destinationConnectorQueue); - - FilterTransformerExecutor filterTransformerExecutor = TestUtils.createDefaultFilterTransformerExecutor(); - - switch (i) { - case 1: - ((TestFilterTransformer) filterTransformerExecutor.getFilterTransformer()).setFiltered(true); - break; - case 2: - ((TestDispatcher) destinationConnector).setReturnStatus(Status.SENT); - break; - case 3: - ((TestDispatcher) destinationConnector).setReturnStatus(Status.QUEUED); - break; - case 4: - ((TestDispatcher) destinationConnector).setReturnStatus(Status.ERROR); - break; - } - - destinationConnector.setMetaDataReplacer(sourceConnector.getMetaDataReplacer()); - destinationConnector.setMetaDataColumns(channel.getMetaDataColumns()); - destinationConnector.setFilterTransformerExecutor(filterTransformerExecutor); - - chain.addDestination(i, destinationConnector); - } - - channel.addDestinationChainProvider(chain); - - ChannelController.getInstance().deleteAllMessages(channel.getChannelId()); - TestUtils.deleteChannelStatistics(channel.getChannelId()); - channel.deploy(); - channel.start(null); - - // Send messages through the channel - for (int i = 1; i <= TEST_SIZE; i++) { - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - } - - // Assert that the messages were sent - assertEquals(TEST_SIZE, channel.getNumMessages()); - - // Assert the source connector stats are correct - statsEqual(channel.getChannelId(), 0, TEST_SIZE, 0L, TEST_SIZE, 0L, 0L, 0L); - // Assert that destination connector stats are correct - statsEqual(channel.getChannelId(), 1, TEST_SIZE, TEST_SIZE, 0L, 0L, 0L, 0L); - statsEqual(channel.getChannelId(), 2, TEST_SIZE, 0L, 0L, 0L, TEST_SIZE, 0L); - statsEqual(channel.getChannelId(), 3, TEST_SIZE, 0L, 0L, 0L, 0L, 0L); - statsEqual(channel.getChannelId(), 4, TEST_SIZE, 0L, 0L, 0L, 0L, TEST_SIZE); - // Assert the aggregate stats are correct - assertTrue(channelStatsCorrect()); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - /* - * Create a channel where the destination connector sends messages as usual, but both the - * dispatcher's send method and the response transformer's doTransform method stall the - * processing thread for a specified amount of time. This way, we can check at specific - * intervals whether the message statistics in the database have been updated to QUEUED, - * PENDING, and the final return status. - * - * Send messages, and for each message: Wait a specified amount of time, then assert: - The - * destination connector stats have 1 for QUEUED, the total number of messages for RECEIVED, and - * the remainder for the final return status. - * - * Wait a specified amount of time, then assert: - The destination connector stats have 1 for - * PENDING, the total number of messages for RECEIVED, and the remainder for the final return - * status. - * - * Wait a specified amount of time, then assert: - The source connector stats have the total - * number of messages for RECEIVED and TRANSFORMED - The destination connector stats have the - * total number of messages for RECEIVED and the final return status. - The aggregate stats are - * correct - * - * After all messages finish processing, assert: - The source connector stats have testSize for - * RECEIVED and TRANSFORMED - The destination connector stats have testSize for RECEIVED and the - * final return status - The aggregate stats are correct (RECEIVED/TRANSFORMED is the same as - * the source connector, PENDING/SENT/QUEUED is the same as the destination connectors combined, - * FILTERED/ERROR is the same as all connectors combined) - */ - @Test - public final void testStatistics4() throws Exception { - final int waitTime = 1000; - long testSize = 5; - Status returnStatus = Status.SENT; - - TestUtils.initChannel(channelId); - - TestChannel channel = new TestChannel(); - - channel.setChannelId(channelId); - channel.setServerId(serverId); - - channel.setPreProcessor(new TestPreProcessor()); - channel.setPostProcessor(new TestPostProcessor()); - - TestSourceConnector sourceConnector = (TestSourceConnector) TestUtils.createDefaultSourceConnector(); - sourceConnector.setChannelId(channel.getChannelId()); - sourceConnector.setChannel(channel); - channel.setSourceConnector(sourceConnector); - channel.getSourceConnector().setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - DestinationChainProvider chain = new DestinationChainProvider(); - chain.setChannelId(channel.getChannelId()); - - class BlockingTestDispatcher extends TestDispatcher { - public volatile boolean waiting = true; - - @Override - public Response send(ConnectorProperties connectorProperties, ConnectorMessage message) { - while (waiting) { - try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - return super.send(connectorProperties, message); - } - } - - // Create a destination connector that stalls the processing thread a specified amount of time during the send method - BlockingTestDispatcher destinationConnector = new BlockingTestDispatcher(); - destinationConnector.setChannelId(channel.getChannelId()); - - destinationConnector.setMetaDataReplacer(sourceConnector.getMetaDataReplacer()); - destinationConnector.setMetaDataColumns(channel.getMetaDataColumns()); - destinationConnector.setFilterTransformerExecutor(TestUtils.createDefaultFilterTransformerExecutor()); - - TestDispatcherProperties connectorProperties = new TestDispatcherProperties(); - connectorProperties.getDestinationConnectorProperties().setQueueEnabled(true); - connectorProperties.getDestinationConnectorProperties().setSendFirst(false); - - destinationConnector.setConnectorProperties(connectorProperties); - destinationConnector.setDestinationName(TestUtils.DEFAULT_DESTINATION_NAME); - destinationConnector.setInboundDataType(new TestDataType()); - destinationConnector.setOutboundDataType(new TestDataType()); - destinationConnector.setResponseTransformerExecutor(TestUtils.createDefaultResponseTransformerExecutor()); - - Map params = new HashMap(); - params.put("localChannelId", ChannelController.getInstance().getLocalChannelId(channel.getChannelId())); - params.put("channelId", channel.getChannelId()); - params.put("metaDataId", 1); - params.put("status", Status.QUEUED); - - DestinationQueue destinationConnectorQueue = new DestinationQueue(connectorProperties.getDestinationConnectorProperties().getThreadAssignmentVariable(), connectorProperties.getDestinationConnectorProperties().getThreadCount(), connectorProperties.getDestinationConnectorProperties().isRegenerateTemplate(), destinationConnector.getSerializer(), destinationConnector.getMessageMaps()); - destinationConnectorQueue.setDataSource(new ConnectorMessageQueueDataSource(channel.getChannelId(), channel.getServerId(), 1, Status.QUEUED, false, daoFactory)); - destinationConnector.setQueue(destinationConnectorQueue); - - ((TestDispatcher) destinationConnector).setReturnStatus(returnStatus); - - class BlockingTestResponseTransformer extends TestResponseTransformer { - public volatile boolean waiting = true; - - @Override - public String doTransform(Response response, ConnectorMessage connectorMessage) throws DonkeyException, InterruptedException { - while (waiting) { - try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - return super.doTransform(response, connectorMessage); - } - } - - // Create a response transformer that stalls the processing thread a specified amount of time - BlockingTestResponseTransformer responseTransformer = new BlockingTestResponseTransformer(); - destinationConnector.getResponseTransformerExecutor().setResponseTransformer(responseTransformer); - - chain.addDestination(1, destinationConnector); - - channel.addDestinationChainProvider(chain); - - ChannelController.getInstance().deleteAllMessages(channel.getChannelId()); - TestUtils.deleteChannelStatistics(channel.getChannelId()); - channel.deploy(); - channel.start(null); - - Map stats; - - logger.info(String.format("%-140s", "Testing destination connector statistics changing: RECEIVED->QUEUED->PENDING->SENT")); - logger.info(String.format("%-140s", "Test size: " + testSize)); - logger.info(String.format("%-140s", "")); - - logger.info(String.format("%-140s", "Destination Connector Stats")); - logger.info(String.format("%-140s", "---------------------------")); - - // Send messages through the channel - for (long i = 1; i <= testSize; i++) { - destinationConnector.waiting = true; - responseTransformer.waiting = true; - - logger.info(String.format("%-140s", "Sending Message #" + i + "...")); - ((TestSourceConnector) channel.getSourceConnector()).readTestMessage(testMessage); - - logger.info(String.format("%-140s", String.format("%-50s", " - After sending (should be QUEUED): ") + (stats = ChannelController.getInstance().getStatistics().getConnectorStats(channelId, 1)))); - - // Assert that destination connector stats are correct - assertDestinationStatsCorrect(stats, i, returnStatus, Status.QUEUED); - - destinationConnector.waiting = false; - logger.info(String.format("%-140s", " - Waiting " + waitTime + " ms...")); - Thread.sleep(waitTime); - - logger.info(String.format("%-140s", String.format("%-50s", " - After first wait (should be PENDING): ") + (stats = ChannelController.getInstance().getStatistics().getConnectorStats(channelId, 1)))); - - // Assert that destination connector stats are correct - assertDestinationStatsCorrect(stats, i, returnStatus, Status.PENDING); - - responseTransformer.waiting = false; - logger.info(String.format("%-140s", " - Waiting " + waitTime + " ms...")); - Thread.sleep(waitTime); - - logger.info(String.format("%-140s", String.format("%-50s", " - After second wait (should be " + returnStatus + "): ") + (stats = ChannelController.getInstance().getStatistics().getConnectorStats(channelId, 1)))); - - // Assert the source connector stats are correct - statsEqual(channel.getChannelId(), 0, i, 0L, i, 0L, 0L, 0L); - - // Assert that destination connector stats are correct - assertDestinationStatsCorrect(stats, i, returnStatus, returnStatus); - - // Assert the aggregate stats are correct - assertTrue(channelStatsCorrect()); - } - - // Assert that the messages were sent - assertEquals(testSize, channel.getNumMessages()); - - // Assert the source connector stats are correct - statsEqual(channel.getChannelId(), 0, testSize, 0L, testSize, 0L, 0L, 0L); - // Assert that destination connector stats are correct - destinationStatsCorrect(channel.getChannelId(), 1, testSize, returnStatus, returnStatus); - // Assert the aggregate stats are correct - assertTrue(channelStatsCorrect()); - - channel.stop(); - channel.undeploy(); - - ChannelController.getInstance().removeChannel(channel.getChannelId()); - } - - private void statsEqual(String channelId, Integer metaDataId, Long received, Long filtered, Long transformed, Long pending, Long sent, Long error) { - assertStatsEqual(ChannelController.getInstance().getStatistics().getConnectorStats(channelId, metaDataId), received, filtered, transformed, pending, sent, error); - } - - private void assertStatsEqual(Map stats, Long received, Long filtered, Long transformed, Long pending, Long sent, Long error) { - assertEquals(received, stats.get(Status.RECEIVED)); - assertEquals(filtered, stats.get(Status.FILTERED)); - assertEquals(transformed, stats.get(Status.TRANSFORMED)); - assertEquals(pending, stats.get(Status.PENDING)); - assertEquals(sent, stats.get(Status.SENT)); - assertEquals(error, stats.get(Status.ERROR)); - } - - /* - * Gets the aggregate channel statistics from storage and checks whether they are correct with - * respect to each individual connector. Although the TRANSFORMED status is updated in the - * channel stats along with both source and destination connectors (in ChannelStatistics), the - * destination connector message status is never updated in the database as TRANSFORMED after it - * passes through the filter/transformer. So here, we only check the aggregate TRANSFORMED - * statistics with respect to the source connector. - */ - private boolean channelStatsCorrect() { - Map> stats = ChannelController.getInstance().getStatistics().getChannelStats(channelId); - Map channelStats = createStatsMap(); - - for (Integer metaDataId : stats.keySet()) { - if (metaDataId != null) { - for (Status status : stats.get(metaDataId).keySet()) { - switch (status) { - // Aggregate RECEIVED and TRANSFORMED stats should be the same as the source connector - case RECEIVED: - case TRANSFORMED: - if (metaDataId == 0) { - channelStats.put(status, channelStats.get(status) + stats.get(metaDataId).get(status)); - } - break; - - // Aggregate FILTERED and ERROR stats should be the same as all connectors combined - case FILTERED: - case ERROR: - channelStats.put(status, channelStats.get(status) + stats.get(metaDataId).get(status)); - break; - - // Aggregate PENDING, SENT, and QUEUED stats should be the same as the destination connector - case PENDING: - case SENT: - case QUEUED: - if (metaDataId > 0) { - channelStats.put(status, channelStats.get(status) + stats.get(metaDataId).get(status)); - } - break; - } - } - } - } - - return channelStats.equals(stats.get(null)); - } - - private void destinationStatsCorrect(String channelId, int metaDataId, long numMessages, Status returnStatus, Status currentStatus) { - assertDestinationStatsCorrect(ChannelController.getInstance().getStatistics().getConnectorStats(channelId, metaDataId), numMessages, returnStatus, currentStatus); - } - - private void assertDestinationStatsCorrect(Map stats, long numMessages, Status returnStatus, Status currentStatus) { - long pending = 0; - long remainder = numMessages; - switch (currentStatus) { - case PENDING: - pending = 1; - remainder--; - break; - case QUEUED: - remainder--; - break; - default: - break; - } - - switch (returnStatus) { - case FILTERED: - assertStatsEqual(stats, numMessages, remainder, 0L, pending, 0L, 0L); - break; - - case SENT: - assertStatsEqual(stats, numMessages, 0L, 0L, pending, remainder, 0L); - break; - - case QUEUED: - assertStatsEqual(stats, numMessages, 0L, 0L, pending, 0L, 0L); - break; - - case ERROR: - assertStatsEqual(stats, numMessages, 0L, 0L, pending, 0L, remainder); - break; - } - } - - private Map createStatsMap() { - Map connectorStats = new HashMap(); - connectorStats.put(Status.RECEIVED, 0L); - connectorStats.put(Status.FILTERED, 0L); - connectorStats.put(Status.TRANSFORMED, 0L); - connectorStats.put(Status.PENDING, 0L); - connectorStats.put(Status.SENT, 0L); - connectorStats.put(Status.ERROR, 0L); - - return connectorStats; - } -} \ No newline at end of file diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java index 59a1784da0..513b50fdef 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/Harness.java @@ -261,6 +261,11 @@ public static void startChannel(String channelId) throws Exception { server().startChannel(channelId); } + /** Undeploys a channel without removing it, leaving everything it stored in place. */ + public static void undeployChannel(String channelId) throws Exception { + server().undeployChannel(channelId); + } + /** Sets one configuration map entry, which channel scripts read back as {@code configurationMap}. */ public static void setConfigurationProperty(String key, String value) throws Exception { server().setConfigurationProperty(key, value); diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MixedDestinationStatisticsTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MixedDestinationStatisticsTest.java new file mode 100644 index 0000000000..9909e22e50 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MixedDestinationStatisticsTest.java @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +import static org.openintegrationengine.smoketest.StatisticsAssertions.assertStatistics; +import static org.openintegrationengine.smoketest.StatisticsAssertions.counts; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +/** + * Destinations that end the same message differently are counted separately. Every message goes + * to all three destinations, so each destination receives the same three messages and the only + * thing that differs is the status it ends them in - which is the counter it credits. The channel + * aggregate then has to carry all three outcomes at once rather than only the last or the worst. + * + *

        + *
      • Source: a Channel Reader, which sends every message down the whole chain.
      • + *
      • Destination 1 "Filtered": a filter rule that returns false, so its messages are filtered.
      • + *
      • Destination 2 "Sent": a JavaScript Writer that returns a response.
      • + *
      • Destination 3 "Error": a JavaScript Writer that throws, with its queue off and no + * retries, so the failure is final.
      • + *
      + */ +@DisplayName("250-statistics/03-mixed-destination-outcomes") +@TestInstance(PER_CLASS) +class MixedDestinationStatisticsTest { + + private static final String CHANNEL = "channels/statistics-mixed-destinations.xml"; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void eachDestinationCreditsItsOwnOutcome() throws Exception { + for (int i = 0; i < 3; i++) { + long messageId = SharedServer.get().submitMessage(channelId, "mixed", new LinkedHashMap<>()); + Harness.awaitProcessed(channelId, messageId); + } + + assertStatistics(channelId, Map.of( + 0, counts(3, 0, 0, 0), + 1, counts(3, 3, 0, 0), + 2, counts(3, 0, 3, 0), + 3, counts(3, 0, 0, 3)), 0); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java index 7c8eed8852..26d59a1ce5 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/OieServer.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.util.ArrayDeque; import java.util.Deque; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -14,6 +15,7 @@ import com.mirth.connect.donkey.model.channel.DeployedState; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.RawMessage; +import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.model.message.attachment.Attachment; import com.mirth.connect.model.Channel; import com.mirth.connect.model.ChannelStatistics; @@ -277,11 +279,45 @@ long messageCount(String channelId) throws ClientException { return count == null ? 0L : count; } - /** The channel's aggregate lifetime counters, as the dashboard's statistics view reports them. */ + /** + * The channel's aggregate lifetime counters, as the dashboard's statistics view reports them. + * + *

      For a deployed channel these come from the running engine's own tallies. For a channel + * that has been undeployed without being removed they come from the database, which is the + * only way a client sees what was actually stored. + */ ChannelStatistics statistics(String channelId) throws ClientException { return client.getStatistics(channelId); } + /** Undeploys a channel without removing it, so its stored rows stay where they are. */ + void undeployChannel(String channelId) throws ClientException { + client.undeployChannel(channelId, true); + } + + /** + * Every statistics counter the dashboard shows for one channel, keyed by connector: 0 for the + * source, its metadata id for each destination, and null for the channel's own aggregate row. + * Only the statuses in {@code com.mirth.connect.donkey.server.channel.Statistics}'s + * {@code TRACKED_STATUSES} are counted, so each map holds RECEIVED, FILTERED, SENT and ERROR + * and nothing else. + */ + Map> connectorStatistics(String channelId) throws ClientException { + DashboardStatus status = client.getChannelStatus(channelId); + if (status == null) { + throw new AssertionError("Channel " + channelId + " has no dashboard status"); + } + + Map> statistics = new LinkedHashMap<>(); + // The channel's own status carries the aggregate row, which the table stores under a null + // metadata id; its children carry the per-connector rows. + statistics.put(null, status.getStatistics()); + for (DashboardStatus connectorStatus : status.getChildStatuses()) { + statistics.put(connectorStatus.getMetaDataId(), connectorStatus.getStatistics()); + } + return statistics; + } + /** Undeploys and removes a channel, tolerating failures so teardown always continues. */ void removeChannel(String channelId) { deployedChannelIds.remove(channelId); diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/PersistedStatisticsTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/PersistedStatisticsTest.java new file mode 100644 index 0000000000..53b460694d --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/PersistedStatisticsTest.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +import static org.openintegrationengine.smoketest.StatisticsAssertions.assertStatistics; +import static org.openintegrationengine.smoketest.StatisticsAssertions.counts; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import com.mirth.connect.model.ChannelStatistics; + +/** + * The counters a running channel reports are held in memory and written to the database behind + * it, and every other case here reads the memory. This one reads the database. + * + *

      That matters because the statement that writes them is one of the few the engine keeps a + * per-dialect version of - derby cannot use the {@code GREATEST} the others do and falls back to + * a {@code CASE} rewrite - and a write nothing reads back is a write nothing checks. A client + * only ever sees the stored rows for a channel that is not deployed, because a deployed one is + * always answered from the engine's own tallies, so the channel is undeployed without being + * removed and asked again. + * + *

      The message mixture is the one from + * {@link MixedDestinationStatisticsTest}, so all four stored counters are non-zero and a write + * that lost or crossed a column has somewhere to show up. + * + *

        + *
      • Source: a Channel Reader.
      • + *
      • Destination 1 "Filtered": a filter rule that returns false.
      • + *
      • Destination 2 "Sent": a JavaScript Writer that returns a response.
      • + *
      • Destination 3 "Error": a JavaScript Writer that throws, with no queue and no retries.
      • + *
      + */ +@DisplayName("250-statistics/05-written-to-the-database") +@TestInstance(PER_CLASS) +class PersistedStatisticsTest { + + private static final String CHANNEL = "channels/statistics-persisted.xml"; + + private static final int MESSAGE_COUNT = 3; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void theStoredCountersAreTheOnesTheRunningChannelReported() throws Exception { + for (int i = 0; i < MESSAGE_COUNT; i++) { + long messageId = SharedServer.get().submitMessage(channelId, "persisted", new LinkedHashMap<>()); + Harness.awaitProcessed(channelId, messageId); + } + + assertStatistics(channelId, Map.of( + 0, counts(MESSAGE_COUNT, 0, 0, 0), + 1, counts(MESSAGE_COUNT, MESSAGE_COUNT, 0, 0), + 2, counts(MESSAGE_COUNT, 0, MESSAGE_COUNT, 0), + 3, counts(MESSAGE_COUNT, 0, 0, MESSAGE_COUNT)), 0); + + Harness.undeployChannel(channelId); + + // The engine writes the counters out on a timer, so the stored rows can be a moment + // behind the channel that has just stopped reporting them. + awaitStoredStatistics(MESSAGE_COUNT, MESSAGE_COUNT, MESSAGE_COUNT, MESSAGE_COUNT); + } + + /** Polls the stored counters until they hold what the running channel reported. */ + private void awaitStoredStatistics(long received, long filtered, long sent, long error) throws Exception { + List expected = List.of(received, filtered, sent, error); + long deadline = System.nanoTime() + HarnessConfig.TIMEOUT.toNanos(); + List actual = null; + do { + ChannelStatistics stored = SharedServer.get().statistics(channelId); + actual = List.of(stored.getReceived(), stored.getFiltered(), stored.getSent(), stored.getError()); + if (expected.equals(actual)) { + return; + } + Thread.sleep(250); + } while (System.nanoTime() < deadline); + + assertEquals(expected, actual, "the counters the engine stored are not the ones it reported"); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceFilteredStatisticsTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceFilteredStatisticsTest.java new file mode 100644 index 0000000000..da2c19254e --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/SourceFilteredStatisticsTest.java @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +import static org.openintegrationengine.smoketest.StatisticsAssertions.assertStatistics; +import static org.openintegrationengine.smoketest.StatisticsAssertions.counts; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +/** + * What a channel counts when its source filter rejects everything. A message the source filters + * never reaches a destination, so the destination's counters have to stay at zero while the + * channel still counts the message as both received and filtered - RECEIVED is what came in, not + * what survived, and the two are separate counters rather than one moving between them. + * + *
        + *
      • Source: a Channel Reader with a filter rule that returns false for every message.
      • + *
      • Destination 1: a JavaScript Writer that would send, and never gets the chance.
      • + *
      + */ +@DisplayName("250-statistics/02-filtered-at-the-source") +@TestInstance(PER_CLASS) +class SourceFilteredStatisticsTest { + + private static final String CHANNEL = "channels/statistics-source-filtered.xml"; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void aMessageFilteredAtTheSourceIsCountedThereAndNowhereElse() throws Exception { + for (int i = 0; i < 3; i++) { + long messageId = SharedServer.get().submitMessage(channelId, "rejected", new LinkedHashMap<>()); + Harness.awaitProcessed(channelId, messageId); + } + + assertStatistics(channelId, Map.of( + 0, counts(3, 3, 0, 0), + 1, counts(0, 0, 0, 0)), 0); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/StalledDestinationStatisticsTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/StalledDestinationStatisticsTest.java new file mode 100644 index 0000000000..01903c71a6 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/StalledDestinationStatisticsTest.java @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +import static org.openintegrationengine.smoketest.StatisticsAssertions.assertStatistics; +import static org.openintegrationengine.smoketest.StatisticsAssertions.counts; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +/** + * What a channel reports while a destination is stalled. A queued message has been received by + * the destination but not sent, and the queue it is sitting on is a depth the server measures + * rather than a counter it keeps: the destination's RECEIVED rises as soon as the message reaches + * it, SENT stays where it was until the destination actually accepts the message, and the queue + * depth is what carries the difference in the meantime. + * + *
        + *
      • Source: a Channel Reader.
      • + *
      • Destination 1: a JavaScript Writer with its queue on, which returns QUEUED - a send failure + * the queue retries, not an error - until the configuration map holds this run's token.
      • + *
      + */ +@DisplayName("250-statistics/04-stalled-destination") +@TestInstance(PER_CLASS) +class StalledDestinationStatisticsTest { + + private static final String CHANNEL = "channels/statistics-queued-destination.xml"; + + /** The configuration property the destination stalls on until it holds this run's token. */ + private static final String GATE = "oie.smoketest.releaseStatisticsQueue"; + + private static final int DESTINATION = 1; + + private static final int MESSAGE_COUNT = 3; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void aStalledDestinationReportsItsQueueDepthUntilItSends() throws Exception { + // The payload is this run's token, so a gate left open by an earlier run cannot release + // this one, and every message carries the same token so one write releases them all. + String token = UUID.randomUUID().toString(); + + try { + for (int i = 0; i < MESSAGE_COUNT; i++) { + SharedServer.get().submitMessage(channelId, token, new LinkedHashMap<>()); + } + // The depth is a precondition the test enforces rather than one it hopes for: nothing + // below is read until the server itself says all three messages are on the queue. + Harness.awaitQueueSizeAtLeast(channelId, DESTINATION, MESSAGE_COUNT); + + assertStatistics(channelId, Map.of( + 0, counts(MESSAGE_COUNT, 0, 0, 0), + DESTINATION, counts(MESSAGE_COUNT, 0, 0, 0)), MESSAGE_COUNT); + } finally { + // Also on failure, so a channel left behind by this test is not a wedged one. + Harness.setConfigurationProperty(GATE, token); + } + + Harness.awaitQueueSizeAtMost(channelId, DESTINATION, 0); + + assertStatistics(channelId, Map.of( + 0, counts(MESSAGE_COUNT, 0, 0, 0), + DESTINATION, counts(MESSAGE_COUNT, 0, MESSAGE_COUNT, 0)), 0); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAccountingTest.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAccountingTest.java new file mode 100644 index 0000000000..455aac7bfa --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAccountingTest.java @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +import static org.openintegrationengine.smoketest.StatisticsAssertions.assertStatistics; +import static org.openintegrationengine.smoketest.StatisticsAssertions.counts; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +/** + * What a channel counts when nothing goes wrong. The channel has two destinations that both + * accept every message, so the source and each destination keep their own counters and the + * channel's aggregate SENT is the two destinations added together rather than either one of them. + * + *

      Statistics are a channel-wide running total rather than a property of a message, so there is + * no fixture shape for them; every case under {@code 250-statistics} reads them back over the + * client API instead. + * + *

        + *
      • Source: a Channel Reader, so the harness submits the messages itself.
      • + *
      • Destinations 1 and 2: JavaScript Writers that return a response, which is a send.
      • + *
      + */ +@DisplayName("250-statistics/01-normal-flow") +@TestInstance(PER_CLASS) +class StatisticsAccountingTest { + + private static final String CHANNEL = "channels/statistics-normal-flow.xml"; + + private String channelId; + + @BeforeAll + void deploy() throws Exception { + channelId = Harness.deploy(CHANNEL); + } + + @AfterAll + void undeploy() { + Harness.undeploy(channelId); + } + + @Test + void everyConnectorCountsTheMessagesItHandled() throws Exception { + submit(); + + // Asserted after one message and again after three, so a counter that was assigned the + // message count rather than incremented per message would still have to be caught. + assertStatistics(channelId, Map.of( + 0, counts(1, 0, 0, 0), + 1, counts(1, 0, 1, 0), + 2, counts(1, 0, 1, 0)), 0); + + submit(); + submit(); + + assertStatistics(channelId, Map.of( + 0, counts(3, 0, 0, 0), + 1, counts(3, 0, 3, 0), + 2, counts(3, 0, 3, 0)), 0); + } + + /** Submits one message and waits for the server to finish with it, counters included. */ + private void submit() throws Exception { + long messageId = SharedServer.get().submitMessage(channelId, "counted", new LinkedHashMap<>()); + Harness.awaitProcessed(channelId, messageId); + } +} diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAssertions.java new file mode 100644 index 0000000000..791a502556 --- /dev/null +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/StatisticsAssertions.java @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Mitch Gaffigan + +package org.openintegrationengine.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.time.Duration; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import com.mirth.connect.donkey.model.message.Status; +import com.mirth.connect.model.ChannelStatistics; + +/** + * Statistics assertions shared by the cases under {@code 250-statistics}. + * + *

      A channel's counters reach a client two ways, computed separately by the server. The + * dashboard reports a row per connector plus the channel's own aggregate row, which the engine + * maintains as it goes; the statistics view reports one {@link ChannelStatistics} the server + * re-adds up from the connector rows on each call. A test here states the per-connector counters + * it expects and {@link #assertStatistics} derives both aggregates from them, so each case pins + * down the connector counters it is about and every case cross-checks the two aggregates against + * the same rule: + * + *

        + *
      • RECEIVED counts the source connector only.
      • + *
      • SENT counts the destination connectors only.
      • + *
      • FILTERED and ERROR count every connector.
      • + *
      + * + *

      Only the four statuses in + * {@code com.mirth.connect.donkey.server.channel.Statistics.TRACKED_STATUSES} are counted at all; + * a queue is a depth the server measures when asked rather than a counter, which is why it is a + * separate argument. + */ +final class StatisticsAssertions { + + /** + * How long to keep re-reading before giving up on a counter. A connector's status and its + * counters are committed together but read back separately, so a caller that waited for a + * status can still be a moment early for the counter it implies. + */ + private static final Duration GRACE = Duration.ofSeconds(5); + + private static final Duration POLL_INTERVAL = Duration.ofMillis(250); + + private StatisticsAssertions() { + } + + /** One connector's counters, in the order the engine tracks them. */ + static Map counts(long received, long filtered, long sent, long error) { + Map counts = new LinkedHashMap<>(); + counts.put(Status.RECEIVED, received); + counts.put(Status.FILTERED, filtered); + counts.put(Status.SENT, sent); + counts.put(Status.ERROR, error); + return counts; + } + + /** + * Asserts every counter the server reports for one channel: the per-connector rows against + * {@code expected}, keyed by metadata id, and both aggregates against the roll-up of + * {@code expected} described above. Retries for {@link #GRACE} before failing. + * + * @param expectedQueued how many messages should be sitting on the channel's queues + */ + static void assertStatistics(String channelId, Map> expected, long expectedQueued) + throws Exception { + long deadline = System.nanoTime() + GRACE.toNanos(); + while (true) { + try { + assertStatisticsNow(channelId, expected, expectedQueued); + return; + } catch (AssertionError e) { + if (System.nanoTime() >= deadline) { + throw e; + } + } + Thread.sleep(POLL_INTERVAL.toMillis()); + } + } + + private static void assertStatisticsNow(String channelId, Map> expected, + long expectedQueued) throws Exception { + Map> actual = SharedServer.get().connectorStatistics(channelId); + + Map> actualConnectors = new LinkedHashMap<>(actual); + Map actualAggregate = actualConnectors.remove(null); + assertEquals(expected, actualConnectors, "the per-connector statistics are wrong"); + + Map expectedAggregate = rollUp(expected); + assertEquals(expectedAggregate, actualAggregate, "the channel's aggregate statistics row is wrong"); + + // The statistics view adds the connector rows up again on its own, so it has to agree. + ChannelStatistics statistics = SharedServer.get().statistics(channelId); + assertEquals( + List.of(expectedAggregate.get(Status.RECEIVED), expectedAggregate.get(Status.FILTERED), + expectedAggregate.get(Status.SENT), expectedAggregate.get(Status.ERROR), expectedQueued), + List.of(statistics.getReceived(), statistics.getFiltered(), statistics.getSent(), + statistics.getError(), statistics.getQueued()), + () -> "the statistics view disagrees with the dashboard; it reported " + statistics); + } + + /** Adds the per-connector counters up the way the channel's own aggregate is defined. */ + private static Map rollUp(Map> connectors) { + long received = 0; + long filtered = 0; + long sent = 0; + long error = 0; + + for (Map.Entry> connector : connectors.entrySet()) { + boolean source = connector.getKey() == 0; + Map counts = connector.getValue(); + received += source ? counts.get(Status.RECEIVED) : 0; + sent += source ? 0 : counts.get(Status.SENT); + filtered += counts.get(Status.FILTERED); + error += counts.get(Status.ERROR); + } + + return counts(received, filtered, sent, error); + } +} diff --git a/smoketest/src/test/resources/channels/statistics-mixed-destinations.xml b/smoketest/src/test/resources/channels/statistics-mixed-destinations.xml new file mode 100644 index 0000000000..9c2656428b --- /dev/null +++ b/smoketest/src/test/resources/channels/statistics-mixed-destinations.xml @@ -0,0 +1,321 @@ + + 1d4c0f3a-5c1e-4a2b-9f60-2b7c6a1d8e03 + 4 + statistics-mixed-destinations + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Filtered + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Reject every message + 0 + true + NONE + + + + + JavaScript Writer + DESTINATION + true + true + + + 2 + Sent + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + 3 + Error + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + return message; + return; + return; + return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + diff --git a/smoketest/src/test/resources/channels/statistics-normal-flow.xml b/smoketest/src/test/resources/channels/statistics-normal-flow.xml new file mode 100644 index 0000000000..44887af3eb --- /dev/null +++ b/smoketest/src/test/resources/channels/statistics-normal-flow.xml @@ -0,0 +1,244 @@ + + 1d4c0f3a-5c1e-4a2b-9f60-2b7c6a1d8e01 + 3 + statistics-normal-flow + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + 2 + Destination 2 + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + return message; + return; + return; + return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + diff --git a/smoketest/src/test/resources/channels/statistics-persisted.xml b/smoketest/src/test/resources/channels/statistics-persisted.xml new file mode 100644 index 0000000000..13a132a834 --- /dev/null +++ b/smoketest/src/test/resources/channels/statistics-persisted.xml @@ -0,0 +1,321 @@ + + 1d4c0f3a-5c1e-4a2b-9f60-2b7c6a1d8e05 + 4 + statistics-persisted + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Filtered + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Reject every message + 0 + true + NONE + + + + + JavaScript Writer + DESTINATION + true + true + + + 2 + Sent + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + 3 + Error + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + return message; + return; + return; + return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + diff --git a/smoketest/src/test/resources/channels/statistics-queued-destination.xml b/smoketest/src/test/resources/channels/statistics-queued-destination.xml new file mode 100644 index 0000000000..105f21e4c4 --- /dev/null +++ b/smoketest/src/test/resources/channels/statistics-queued-destination.xml @@ -0,0 +1,182 @@ + + 1d4c0f3a-5c1e-4a2b-9f60-2b7c6a1d8e04 + 2 + statistics-queued-destination + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + true + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + return message; + return; + return; + return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + diff --git a/smoketest/src/test/resources/channels/statistics-source-filtered.xml b/smoketest/src/test/resources/channels/statistics-source-filtered.xml new file mode 100644 index 0000000000..d52a972428 --- /dev/null +++ b/smoketest/src/test/resources/channels/statistics-source-filtered.xml @@ -0,0 +1,183 @@ + + 1d4c0f3a-5c1e-4a2b-9f60-2b7c6a1d8e02 + 2 + statistics-source-filtered + + 1 + + 0 + sourceConnector + + + + None + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + Reject every message + 0 + true + NONE + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 100 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + RAW + RAW + + + JavaScript + + + + + + JavaScript + + + + + + + + JavaScript Writer + DESTINATION + true + true + + + return message; + return; + return; + return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + From 896dd6fe462a86154953ce151021af2948f37732 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Mon, 21 Sep 2026 00:08:34 -0500 Subject: [PATCH 24/28] Fix 500 after metadata schema changes Postgres would have intermittent 500 errors after a metadata column changed from one type to another. Fix that. Issue: https://github.com/OpenIntegrationEngine/engine/issues/458 Signed-off-by: Mitch Gaffigan --- .../donkey/server/data/jdbc/JdbcDao.java | 10 ++++++ .../data/jdbc/PostgresqlDaoFactory.java | 9 +++++ .../server/data/jdbc/PostgresqlJdbcDao.java | 35 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlJdbcDao.java diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java index 5baa77e751..8d7a303b58 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/JdbcDao.java @@ -2900,6 +2900,7 @@ private Map getMetaDataMap(String channelId, long messageId, int // do not cache this statement since metadata columns may be added/removed statement = connection.prepareStatement(querySource.getQuery("getMetaDataMap", values)); + disableServerSidePlanCache(statement); statement.setLong(1, messageId); statement.setInt(2, metaDataId); @@ -2968,6 +2969,7 @@ private Map>> getMetaDataMaps(String chan // do not cache this statement since metadata columns may be added/removed statement = connection.prepareStatement(querySource.getQuery("getMetaDataMapByMessageId", values)); + disableServerSidePlanCache(statement); resultSet = statement.executeQuery(); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); @@ -3107,6 +3109,14 @@ PreparedStatement prepareStatement(String queryId, String channelId) throws SQLE return statementSource.getPreparedStatement(queryId, localChannelId); } + /** + * Stops the driver from caching a server-side plan for one statement where the schema may have + * changed from query to query. + */ + protected void disableServerSidePlanCache(PreparedStatement statement) throws SQLException { + // nop for most drivers + } + protected void close(Statement statement) { try { DbUtils.close(statement); diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlDaoFactory.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlDaoFactory.java index da72f47388..7e79b17982 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlDaoFactory.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlDaoFactory.java @@ -9,13 +9,17 @@ package com.mirth.connect.donkey.server.data.jdbc; +import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.mirth.connect.donkey.server.Donkey; +import com.mirth.connect.donkey.server.channel.Statistics; import com.mirth.connect.donkey.server.data.DonkeyDaoException; +import com.mirth.connect.donkey.server.data.StatisticsUpdater; import com.mirth.connect.donkey.util.SerializerProvider; public class PostgresqlDaoFactory extends JdbcDaoFactory { @@ -33,6 +37,11 @@ public JdbcDao getDao(SerializerProvider serializerProvider) { return dao; } + @Override + protected JdbcDao getDao(Donkey donkey, Connection connection, QuerySource querySource, PreparedStatementSource statementSource, SerializerProvider serializerProvider, boolean encryptMessageContent, boolean encryptAttachments, boolean encryptCustomMetaData, boolean decryptData, StatisticsUpdater statisticsUpdater, Statistics currentStats, Statistics totalStats, String statsServerId) { + return new PostgresqlJdbcDao(donkey, connection, querySource, statementSource, serializerProvider, encryptMessageContent, encryptAttachments, encryptCustomMetaData, decryptData, statisticsUpdater, currentStats, totalStats, statsServerId); + } + private String getAsyncCommitCommand(JdbcDao dao) { if (supported == null) { try { diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlJdbcDao.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlJdbcDao.java new file mode 100644 index 0000000000..07c272542e --- /dev/null +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/PostgresqlJdbcDao.java @@ -0,0 +1,35 @@ +/* + * 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.server.data.jdbc; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import org.postgresql.PGStatement; + +import com.mirth.connect.donkey.server.Donkey; +import com.mirth.connect.donkey.server.channel.Statistics; +import com.mirth.connect.donkey.server.data.StatisticsUpdater; +import com.mirth.connect.donkey.util.SerializerProvider; + +public class PostgresqlJdbcDao extends JdbcDao { + + public PostgresqlJdbcDao(Donkey donkey, Connection connection, QuerySource querySource, PreparedStatementSource statementSource, SerializerProvider serializerProvider, boolean encryptMessageContent, boolean encryptAttachments, boolean encryptCustomMetaData, boolean decryptData, StatisticsUpdater statisticsUpdater, Statistics currentStats, Statistics totalStats, String statsServerId) { + super(donkey, connection, querySource, statementSource, serializerProvider, encryptMessageContent, encryptAttachments, encryptCustomMetaData, decryptData, statisticsUpdater, currentStats, totalStats, statsServerId); + } + + /** Excludes a statement from caching. Required when schema changes at runtime. */ + @Override + protected void disableServerSidePlanCache(PreparedStatement statement) throws SQLException { + statement.unwrap(PGStatement.class).setPrepareThreshold(0); + } + +} From 9e052d83321ced08ff4456780130066db45d4486 Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Mon, 21 Sep 2026 00:20:51 -0500 Subject: [PATCH 25/28] Ignore precision on metadata ci tests Signed-off-by: Mitch Gaffigan --- .../messages/01-all-types/dest01_metadata.yml | 2 +- .../messages/01-all-types/source_metadata.yml | 2 +- .../messages/02-value-casting/source_metadata.yml | 2 +- .../smoketest/MessageAssertions.java | 10 ++++++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml index 5059722fad..b214400fca 100644 --- a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/dest01_metadata.yml @@ -1,2 +1,2 @@ MDSTRING: "set by destination 1" -MDNUMBER: "1234.567800000000000" +MDNUMBER: "1234.5678" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml index dbd38e2a9b..7a76df7b7a 100644 --- a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/01-all-types/source_metadata.yml @@ -1,4 +1,4 @@ MDSTRING: "a string value" -MDNUMBER: "1234.567800000000000" +MDNUMBER: "1234.5678" MDBOOLEAN: "true" MDTIMESTAMP: "2010-01-02T13:01:02Z" diff --git a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml index 5630c2c110..b374b13ae0 100644 --- a/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml +++ b/ci/tests/200-custom-metadata-columns/channels/01-column-types/messages/02-value-casting/source_metadata.yml @@ -1,4 +1,4 @@ MDSTRING: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|255|" -MDNUMBER: "-3.500000000000000" +MDNUMBER: "-3.5" MDBOOLEAN: "true" MDTIMESTAMP: "2010-01-02T13:01:02Z" diff --git a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java index 56850537bc..062ce8421f 100644 --- a/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java +++ b/smoketest/src/test/java/org/openintegrationengine/smoketest/MessageAssertions.java @@ -3,6 +3,7 @@ package org.openintegrationengine.smoketest; +import java.math.BigDecimal; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -311,11 +312,20 @@ private static boolean scalarsEqual(Object expected, Object actual) { * Renders a scalar the way a fixture writes it. A TIMESTAMP custom metadata column comes back * as a {@link Calendar}, whose {@code toString} spells out every field and the JVM's time zone, * so it is rendered as its UTC instant instead: a fixture writes {@code 2010-01-02T13:01:02Z}. + * + *

      A NUMBER column comes back as a {@link BigDecimal} whose scale is the dialect's business: + * the column is {@code DECIMAL(31, 15)} everywhere, and derby, postgres, mysql and sqlserver + * all return the column's scale, so {@code 1234.5678} arrives as {@code 1234.567800000000000}, + * while oracle returns the scale the value was stored with. Trailing zeros are therefore + * dropped, which leaves a fixture free to write the value it sent. */ private static String scalarText(Object value) { if (value instanceof Calendar calendar) { return Instant.ofEpochMilli(calendar.getTimeInMillis()).toString(); } + if (value instanceof BigDecimal number) { + return number.stripTrailingZeros().toPlainString(); + } return String.valueOf(value); } From 06a64883b20776b56a37280ec5eddef70462107e Mon Sep 17 00:00:00 2001 From: Mitch Gaffigan Date: Mon, 21 Sep 2026 16:44:05 -0500 Subject: [PATCH 26/28] Add comment and warning for MySQL repeatable read Signed-off-by: Mitch Gaffigan --- .../alpine-temurin21-mysql.compose.yml | 2 +- .../server/data/jdbc/MysqlDaoFactory.java | 22 +++++++++++++++++++ server/conf/mirth.properties | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ci/configurations/alpine-temurin21-mysql.compose.yml b/ci/configurations/alpine-temurin21-mysql.compose.yml index feec339209..a40998ed81 100644 --- a/ci/configurations/alpine-temurin21-mysql.compose.yml +++ b/ci/configurations/alpine-temurin21-mysql.compose.yml @@ -22,7 +22,7 @@ services: condition: service_healthy environment: DATABASE: mysql - DATABASE_URL: jdbc:mysql://db:3306/mirthdb + DATABASE_URL: jdbc:mysql://db:3306/mirthdb?sessionVariables=transaction_isolation='READ-COMMITTED' DATABASE_USERNAME: mirthdb DATABASE_PASSWORD: mirthdb DATABASE_MAX_CONNECTIONS: 20 diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/MysqlDaoFactory.java b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/MysqlDaoFactory.java index ab08ebf458..c16c27767b 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/MysqlDaoFactory.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/data/jdbc/MysqlDaoFactory.java @@ -9,13 +9,35 @@ package com.mirth.connect.donkey.server.data.jdbc; +import java.sql.Connection; +import java.sql.SQLException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import com.mirth.connect.donkey.util.SerializerProvider; public class MysqlDaoFactory extends JdbcDaoFactory { + private Logger logger = LogManager.getLogger(this.getClass()); + @Override public JdbcDao getDao(SerializerProvider serializerProvider) { JdbcDao dao = super.getDao(serializerProvider); dao.setQuoteChar('`'); + checkTransactionIsolation(dao); return dao; } + + /** + * Warns once if the connection is using the default REPEATABLE-READ transaction isolation level. + */ + private void checkTransactionIsolation(JdbcDao dao) { + try { + if (dao.getConnection().getTransactionIsolation() == Connection.TRANSACTION_REPEATABLE_READ) { + logger.error("This MySQL connection is not using the READ-COMMITTED transaction isolation level. The MySQL REPEATABLE-READ will cause intermittent issues. Set the transaction isolation level in the database URL or the database server to READ-COMMITTED to avoid these problems."); + } + } catch (SQLException e) { + logger.error("Failed to check the transaction isolation level for this MySQL connection.", e); + } + } } diff --git a/server/conf/mirth.properties b/server/conf/mirth.properties index 6b71ebdbf3..e258dd0261 100644 --- a/server/conf/mirth.properties +++ b/server/conf/mirth.properties @@ -80,7 +80,7 @@ database = derby # examples: # Derby jdbc:derby:${dir.appdata}/mirthdb;create=true # PostgreSQL jdbc:postgresql://localhost:5432/mirthdb -# MySQL jdbc:mysql://localhost:3306/mirthdb +# MySQL jdbc:mysql://localhost:3306/mirthdb?sessionVariables=transaction_isolation='READ-COMMITTED' # Oracle jdbc:oracle:thin:@localhost:1521:DB # SQL Server/Sybase (jTDS) jdbc:jtds:sqlserver://localhost:1433/mirthdb # Microsoft SQL Server jdbc:sqlserver://localhost:1433;databaseName=mirthdb From fbfa093bb72e2f924bb92b3b2121dd79d6f70558 Mon Sep 17 00:00:00 2001 From: Finnegan's Owner <44065187+pacmano1@users.noreply.github.com> Date: Tue, 22 Sep 2026 12:22:38 -0600 Subject: [PATCH 27/28] Add an unrecognised message type to the strict-serialization fixture MSH-9 names a type no structure jar provides, so HAPI parses it into a GenericMessage and serialization fails. Distinct from 02-not-hl7, where the parse itself fails. Signed-off-by: Finnegan's Owner <44065187+pacmano1@users.noreply.github.com> --- ci/tests/130-hl7-strict-serialization/README.md | 3 +++ .../01-strict-parser/messages/03-unknown-message-type/source | 1 + .../messages/03-unknown-message-type/source_status | 1 + 3 files changed, 5 insertions(+) create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source create mode 100644 ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source_status diff --git a/ci/tests/130-hl7-strict-serialization/README.md b/ci/tests/130-hl7-strict-serialization/README.md index 4487a0915d..2924d6e9de 100644 --- a/ci/tests/130-hl7-strict-serialization/README.md +++ b/ci/tests/130-hl7-strict-serialization/README.md @@ -8,3 +8,6 @@ engine does not serialize at all without one. `urn:hl7-org:v2xml` document, which is what distinguishes strict parsing from the `` form the non-strict reader produces. - `02-not-hl7` - a payload HAPI cannot read gives ERROR rather than being passed through. +- `03-unknown-message-type` - HAPI reads the message but has no structure class for its + MSH-9, so it parses into a `GenericMessage` and serialization fails. Distinct from + `02-not-hl7`, where the parse itself fails. diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source new file mode 100644 index 0000000000..49b13ef108 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source @@ -0,0 +1 @@ +MSH|^~\&|SENDAPP|SENDFAC|RECVAPP|RECVFAC|20260101120000||XYZ^Q01^XYZ_Q01|MSG00003|P|2.4 \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source_status b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/01-strict-parser/messages/03-unknown-message-type/source_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file From 7fa7e895b37a78526671ae8031e197f43f4e54d3 Mon Sep 17 00:00:00 2001 From: Finnegan's Owner <44065187+pacmano1@users.noreply.github.com> Date: Tue, 22 Sep 2026 13:00:57 -0600 Subject: [PATCH 28/28] Cover strict validation in the strict-serialization fixture The same channel with useStrictValidation on, running the same messages. Nothing currently exercises that configuration, and pinning it records that validation changes neither the outcome nor the serialized document. Signed-off-by: Finnegan's Owner <44065187+pacmano1@users.noreply.github.com> --- .../130-hl7-strict-serialization/README.md | 4 + .../channels/02-strict-validating/channel.xml | 389 ++++++++++++++++++ .../messages/01-valid-adt/source | 3 + .../messages/01-valid-adt/source_status | 1 + .../messages/01-valid-adt/source_transformed | 1 + .../messages/03-unknown-message-type/source | 1 + .../03-unknown-message-type/source_status | 1 + 7 files changed, 400 insertions(+) create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/channel.xml create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_status create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_transformed create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source create mode 100644 ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source_status diff --git a/ci/tests/130-hl7-strict-serialization/README.md b/ci/tests/130-hl7-strict-serialization/README.md index 2924d6e9de..fcceb568ee 100644 --- a/ci/tests/130-hl7-strict-serialization/README.md +++ b/ci/tests/130-hl7-strict-serialization/README.md @@ -11,3 +11,7 @@ engine does not serialize at all without one. - `03-unknown-message-type` - HAPI reads the message but has no structure class for its MSH-9, so it parses into a `GenericMessage` and serialization fails. Distinct from `02-not-hl7`, where the parse itself fails. + +`02-strict-validating` is the same channel with `useStrictValidation` on as well, running the +same two messages. Validation changes neither outcome, which is worth pinning: an operator +reaching for stricter handling does not get different behaviour here. diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/channel.xml b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/channel.xml new file mode 100644 index 0000000000..343b91daac --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/channel.xml @@ -0,0 +1,389 @@ + + c93a7f18-64b2-4e05-9d7a-1f8c3e5b0a42 + 2 + hl7-strict-parser-validating + + 1 + + 0 + sourceConnector + + + + Auto-generate (Destinations completed) + true + false + false + 1 + + + Default Resource + [Default Resource] + + + 1000 + + + + + + No-op + 0 + true + + + + HL7V2 + HL7V2 + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Reader + SOURCE + true + true + + + + 1 + Destination 1 + + + + false + false + 10000 + false + 0 + false + false + 1 + + false + + + Default Resource + [Default Resource] + + + 1000 + true + + none + ${message.encodedData} + + + + + HL7V2 + HL7V2 + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + HL7V2 + HL7V2 + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + true + true + true + true + false + \r + true + + + true + true + \r + + + MSH_Segment + + + + \r + AA + + AE + An Error Occurred Processing Message. + AR + Message Rejected. + false + yyyyMMddHHmmss.SSS + + + AA,CA + AE,CE + AR,CR + true + Destination_Encoded + + + + + + + + Channel Writer + DESTINATION + true + true + + + // Modify the message variable below to pre process data +return message; + // This script executes once after a message has been processed +// Responses returned from here will be stored as "Postprocessor" in the response map +return; + // This script executes once when the channel is deployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + // This script executes once when the channel is undeployed +// You only have access to the globalMap and globalChannelMap here to persist data +return; + + true + DEVELOPMENT + false + false + false + false + false + false + STARTED + true + + + SOURCE + STRING + mirth_source + + + TYPE + STRING + mirth_type + + + + None + + + + + Default Resource + [Default Resource] + + + + + + true + + + America/Chicago + + + true + false + + 1 + + + \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source new file mode 100644 index 0000000000..3d27f88587 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source @@ -0,0 +1,3 @@ +MSH|^~\&|Some Other App|Some Other Facility|Ehrsource|Or|20250101120000||ADT^A01|Msgid99999|P|2.3 +EVN|A01|20250101120000 +PID|1||123456^^^Hospital^MR||SMITH^JOHN||19700101|M diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_status b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_status new file mode 100644 index 0000000000..ddc7ed8516 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_status @@ -0,0 +1 @@ +TRANSFORMED diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_transformed b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_transformed new file mode 100644 index 0000000000..021997704b --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/01-valid-adt/source_transformed @@ -0,0 +1 @@ +|^~\&Some Other AppSome Other FacilityEhrsourceOr20250101120000ADTA01Msgid99999P2.3A01202501011200001123456HospitalMRSMITHJOHN19700101M \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source new file mode 100644 index 0000000000..49b13ef108 --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source @@ -0,0 +1 @@ +MSH|^~\&|SENDAPP|SENDFAC|RECVAPP|RECVFAC|20260101120000||XYZ^Q01^XYZ_Q01|MSG00003|P|2.4 \ No newline at end of file diff --git a/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source_status b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source_status new file mode 100644 index 0000000000..17416ae33e --- /dev/null +++ b/ci/tests/130-hl7-strict-serialization/channels/02-strict-validating/messages/03-unknown-message-type/source_status @@ -0,0 +1 @@ +ERROR \ No newline at end of file