diff --git a/donkey/build.gradle b/donkey/build.gradle index dfe4615c42..58fc4d81f0 100644 --- a/donkey/build.gradle +++ b/donkey/build.gradle @@ -1,6 +1,17 @@ // Donkey: the message engine. Produces donkey-model.jar and // donkey-server.jar in donkey/setup (mirrors donkey/build.xml). +apply plugin: 'java-test-fixtures' + +// The test-fixtures plugin gives the test source set the main classes through +// a dependency on this project, which the non-transitive test classpaths +// drop, so add them back directly. Remove this when transitive resolution +// is enabled. +sourceSets.test { + compileClasspath += sourceSets.main.output + runtimeClasspath += sourceSets.main.output +} + dependencies { implementation libs.bundles.donkey.main testImplementation libs.bundles.donkey.test diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/Donkey.java b/donkey/src/main/java/com/mirth/connect/donkey/server/Donkey.java index 8ee0e1ff1a..b19631f4eb 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/Donkey.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/Donkey.java @@ -23,7 +23,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.google.inject.Inject; import com.mirth.connect.donkey.model.DatabaseConstants; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.controllers.ChannelController; @@ -39,7 +38,6 @@ import com.mirth.connect.donkey.util.xstream.XStreamSerializer; public class Donkey { - @Inject private static Donkey instance; public static Donkey getInstance() { diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/DonkeyConnectionPools.java b/donkey/src/main/java/com/mirth/connect/donkey/server/DonkeyConnectionPools.java index e8c11696aa..8989522683 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/DonkeyConnectionPools.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/DonkeyConnectionPools.java @@ -13,15 +13,12 @@ import org.apache.commons.lang3.StringUtils; -import com.google.inject.Inject; import com.mirth.connect.donkey.model.DatabaseConstants; import com.mirth.connect.donkey.server.data.jdbc.ConnectionPool; import com.mirth.connect.donkey.server.data.jdbc.DBCPConnectionPool; import com.mirth.connect.donkey.server.data.jdbc.HikariConnectionPool; public class DonkeyConnectionPools { - - @Inject private static volatile DonkeyConnectionPools instance = null; private ConnectionPool connectionPool; 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..fb2e888cff 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 @@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils; -import com.google.inject.Inject; import com.mirth.connect.donkey.model.channel.Ports; import com.mirth.connect.donkey.model.message.Status; import com.mirth.connect.donkey.server.Donkey; @@ -27,7 +26,6 @@ import com.mirth.connect.donkey.server.data.DonkeyDaoFactory; public class ChannelController { - @Inject private static ChannelController instance; public static ChannelController getInstance() { diff --git a/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/MessageController.java b/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/MessageController.java index d4de59bbcb..d6c0b0e44b 100644 --- a/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/MessageController.java +++ b/donkey/src/main/java/com/mirth/connect/donkey/server/controllers/MessageController.java @@ -18,7 +18,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; -import com.google.inject.Inject; import com.mirth.connect.donkey.model.message.ConnectorMessage; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.Status; @@ -30,7 +29,6 @@ import com.mirth.connect.donkey.util.StringUtil; public class MessageController { - @Inject private static MessageController instance; public static MessageController getInstance() { diff --git a/donkey/src/test/java/com/mirth/connect/donkey/server/channel/ChannelTest.java b/donkey/src/test/java/com/mirth/connect/donkey/server/channel/ChannelTest.java index 1791797796..b80534e2c9 100644 --- a/donkey/src/test/java/com/mirth/connect/donkey/server/channel/ChannelTest.java +++ b/donkey/src/test/java/com/mirth/connect/donkey/server/channel/ChannelTest.java @@ -25,14 +25,12 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; import com.mirth.connect.donkey.model.channel.ConnectorProperties; import com.mirth.connect.donkey.model.channel.SourceConnectorProperties; import com.mirth.connect.donkey.model.channel.SourceConnectorPropertiesInterface; @@ -44,28 +42,31 @@ import com.mirth.connect.donkey.server.event.EventDispatcher; import com.mirth.connect.donkey.server.message.DataType; import com.mirth.connect.donkey.server.queue.SourceQueue; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.donkey.util.SerializerProvider; public class ChannelTest { + private static StaticOverride donkeyOverride; + @BeforeClass public static void setupControllers() throws Exception { 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); + donkeyOverride = StaticOverride.install(Donkey.class, "instance", donkey); // Make sure injection succeeded assertTrue(donkey == Donkey.getInstance()); } + @AfterClass + public static void restoreDonkey() { + if (donkeyOverride != null) { + donkeyOverride.close(); + } + } + @Test public void testRawMessageWithAttachments() throws Exception { Channel channel = createChannel(); diff --git a/donkey/src/test/java/com/mirth/connect/donkey/testing/StaticOverrideTest.java b/donkey/src/test/java/com/mirth/connect/donkey/testing/StaticOverrideTest.java new file mode 100644 index 0000000000..d5be3e3bbf --- /dev/null +++ b/donkey/src/test/java/com/mirth/connect/donkey/testing/StaticOverrideTest.java @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Tony Germano + +package com.mirth.connect.donkey.testing; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.Test; + +public class StaticOverrideTest { + + private static class Holder { + private static String instance; + private static volatile String volatileInstance; + private static final String CONSTANT = "constant"; + private String nonStatic; + } + + @After + public void reset() { + Holder.instance = null; + Holder.volatileInstance = null; + } + + @Test + public void installsAndRestoresPreviousValue() throws Exception { + Holder.instance = "original"; + + AutoCloseable handle = StaticOverride.install(Holder.class, "instance", "replacement"); + assertEquals("replacement", Holder.instance); + + handle.close(); + assertEquals("original", Holder.instance); + } + + @Test + public void restoresNull() throws Exception { + AutoCloseable handle = StaticOverride.install(Holder.class, "instance", "replacement"); + handle.close(); + + assertNull(Holder.instance); + } + + @Test + public void worksOnVolatileField() throws Exception { + try (AutoCloseable handle = StaticOverride.install(Holder.class, "volatileInstance", "replacement")) { + assertEquals("replacement", Holder.volatileInstance); + } + + assertNull(Holder.volatileInstance); + } + + @Test + public void nestedOverridesRestoreInOrder() throws Exception { + Holder.instance = "original"; + + AutoCloseable outer = StaticOverride.install(Holder.class, "instance", "outer"); + AutoCloseable inner = StaticOverride.install(Holder.class, "instance", "inner"); + + inner.close(); + assertEquals("outer", Holder.instance); + outer.close(); + assertEquals("original", Holder.instance); + } + + @Test + public void secondCloseDoesNothing() throws Exception { + Holder.instance = "original"; + AutoCloseable handle = StaticOverride.install(Holder.class, "instance", "replacement"); + handle.close(); + + Holder.instance = "set later"; + handle.close(); + + assertEquals("set later", Holder.instance); + } + + @Test + public void closeFailsWhenValueWasReplaced() throws Exception { + AutoCloseable handle = StaticOverride.install(Holder.class, "instance", "replacement"); + Holder.instance = "someone else"; + + assertThrows(IllegalStateException.class, handle::close); + assertEquals("someone else", Holder.instance); + } + + @Test + public void closingOutOfOrderFails() throws Exception { + AutoCloseable outer = StaticOverride.install(Holder.class, "instance", "outer"); + StaticOverride.install(Holder.class, "instance", "inner"); + + assertThrows(IllegalStateException.class, outer::close); + } + + @Test + public void rejectsFinalField() { + assertThrows(IllegalArgumentException.class, () -> StaticOverride.install(Holder.class, "CONSTANT", "x")); + assertSame("constant", Holder.CONSTANT); + } + + @Test + public void rejectsNonStaticField() { + assertThrows(IllegalArgumentException.class, () -> StaticOverride.install(Holder.class, "nonStatic", "x")); + } + + @Test + public void rejectsMissingField() { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> StaticOverride.install(Holder.class, "missing", "x")); + assertTrue(e.getCause() instanceof NoSuchFieldException); + } + + @Test + public void rejectsWrongType() { + assertThrows(IllegalArgumentException.class, () -> StaticOverride.install(Holder.class, "instance", 42)); + assertNull(Holder.instance); + } +} diff --git a/donkey/src/testFixtures/java/com/mirth/connect/donkey/testing/StaticOverride.java b/donkey/src/testFixtures/java/com/mirth/connect/donkey/testing/StaticOverride.java new file mode 100644 index 0000000000..a080bc9b79 --- /dev/null +++ b/donkey/src/testFixtures/java/com/mirth/connect/donkey/testing/StaticOverride.java @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MPL-2.0 +// SPDX-FileCopyrightText: 2026 Tony Germano + +package com.mirth.connect.donkey.testing; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Temporarily replaces the value of a static field, such as a singleton instance, for the duration + * of a test. + */ +public final class StaticOverride implements AutoCloseable { + private final Class owner; + private final Field field; + private final Object value; + private final Object previous; + private final AtomicBoolean closed = new AtomicBoolean(); + + private StaticOverride(Class owner, Field field, Object value, Object previous) { + this.owner = owner; + this.field = field; + this.value = value; + this.previous = previous; + } + + /** + * Sets a static field to {@code value} until the returned handle is closed, then puts the + * previous value back. Closing more than once does nothing. + * + * @throws IllegalArgumentException + * if the field does not exist, is not a non-final static field, or cannot hold + * {@code value} + */ + public static StaticOverride install(Class owner, String fieldName, Object value) { + Field field; + try { + field = owner.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + throw new IllegalArgumentException(owner.getName() + " has no field named " + fieldName, e); + } + + int modifiers = field.getModifiers(); + if (!Modifier.isStatic(modifiers) || Modifier.isFinal(modifiers)) { + throw new IllegalArgumentException(owner.getName() + "." + fieldName + " is not a non-final static field"); + } + field.setAccessible(true); + + synchronized (owner) { + Object previous = get(field); + set(field, value); + return new StaticOverride(owner, field, value, previous); + } + } + + /** + * Puts back the value the field had before this override was installed. + * + * @throws IllegalStateException + * if something else replaced the field's value after this override was installed + */ + @Override + public void close() { + if (!closed.compareAndSet(false, true)) { + return; + } + + synchronized (owner) { + Object current = get(field); + if (current != value) { + throw new IllegalStateException(owner.getName() + "." + field.getName() + " was replaced by " + current + " while " + value + " was installed"); + } + set(field, previous); + } + } + + private static Object get(Field field) { + try { + return field.get(null); + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + + private static void set(Field field, Object value) { + try { + field.set(null, value); + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9eb0f3a5db..ef2ad2ad2e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -111,7 +111,6 @@ glassfish-ha-api = { module = "org.glassfish.ha:ha-api", version = "3.1.9" } glassfish-management-api = { module = "org.glassfish.external:management-api", version = "3.2.1-b001" } gmbal-api-only = { module = "org.glassfish.gmbal:gmbal-api-only", version = "3.1.0-b001" } guava = { module = "com.google.guava:guava", version = "32.0.1-jre" } -guice = { module = "com.google.inject:guice", version = "4.1.0" } hamcrest = { module = "org.hamcrest:hamcrest", version = "2.2" } hapi-structures-v27 = { module = "ca.uhn.hapi:hapi-structures-v27", version.ref = "hapi" } hapi-structures-v28 = { module = "ca.uhn.hapi:hapi-structures-v28", version.ref = "hapi" } @@ -407,7 +406,6 @@ donkey-main = [ "error-prone-annotations", "failureaccess", "guava", - "guice", "hikaricp", "j2objc-annotations", "javassist", @@ -522,7 +520,6 @@ server-main = [ "glassfish-ha-api", "glassfish-management-api", "gmbal-api-only", - "guice", "hapi-structures-v27", "hapi-structures-v28", "hapi-structures-v281", diff --git a/gradle/vendored-layout.json b/gradle/vendored-layout.json index 7bffae2a4d..abb735b490 100644 --- a/gradle/vendored-layout.json +++ b/gradle/vendored-layout.json @@ -129,7 +129,6 @@ "com.google.guava:failureaccess": "guava", "com.google.guava:guava": "guava", "com.google.guava:listenablefuture": "guava", - "com.google.inject:guice": "", "com.google.j2objc:j2objc-annotations": "guava", "com.microsoft.sqlserver:mssql-jdbc": "database", "com.mysql:mysql-connector-j": "database", @@ -183,7 +182,6 @@ "com.github.mwiede:jsch": "", "com.github.oshi:oshi-core": "", "com.github.zafarkhaja:java-semver": "", - "com.google.inject:guice": "", "com.microsoft.sqlserver:mssql-jdbc": "database", "com.mysql:mysql-connector-j": "database", "com.oracle.database.jdbc:ojdbc8": "database", diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index a55f913c97..bb1e0f3edc 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -410,19 +410,6 @@ - - - - - - - - - - - - - diff --git a/server/build.gradle b/server/build.gradle index d928023bb5..71fda05588 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -13,6 +13,7 @@ dependencies { // classifier is selected here implementation(variantOf(libs.netty.transport.native.epoll) { classifier('linux-x86_64') }) testImplementation libs.bundles.server.test + testImplementation testFixtures(project(':donkey')) } // --------------------------------------------------------------------- diff --git a/server/docs/thirdparty/THIRD-PARTY-README.txt b/server/docs/thirdparty/THIRD-PARTY-README.txt index e8a549a155..9360435e97 100644 --- a/server/docs/thirdparty/THIRD-PARTY-README.txt +++ b/server/docs/thirdparty/THIRD-PARTY-README.txt @@ -26,7 +26,6 @@ The following are distributed under the terms of the Apache License version 2.0 Google Code libphonenumber (https://github.com/google/libphonenumber) Google Code Prettify (https://github.com/google/code-prettify) Guava 32.0.1 [incl. CLI] (https://github.com/google/guava) - Guice 4.1 (https://github.com/google/guice) HikariCP 2.5.1 J2ObjC Annotations 1.3 (https://github.com/google/j2objc/) Jackson Project [incl. CLI] (https://github.com/FasterXML/jackson) diff --git a/server/src/main/java/com/mirth/connect/server/ExtensionLoader.java b/server/src/main/java/com/mirth/connect/server/ExtensionLoader.java index 9af71f74d7..824cc9f589 100644 --- a/server/src/main/java/com/mirth/connect/server/ExtensionLoader.java +++ b/server/src/main/java/com/mirth/connect/server/ExtensionLoader.java @@ -30,7 +30,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.google.inject.Inject; import com.mirth.connect.client.core.PropertiesConfigurationUtil; import com.mirth.connect.model.ConnectorMetaData; import com.mirth.connect.model.MetaData; @@ -43,7 +42,6 @@ import com.mirth.connect.server.util.ResourceUtil; public class ExtensionLoader { - @Inject private static ExtensionLoader instance = new ExtensionLoader(); public static ExtensionLoader getInstance() { diff --git a/server/src/main/java/com/mirth/connect/server/controllers/ControllerFactory.java b/server/src/main/java/com/mirth/connect/server/controllers/ControllerFactory.java index 536cf1b48d..ad67f28bb9 100644 --- a/server/src/main/java/com/mirth/connect/server/controllers/ControllerFactory.java +++ b/server/src/main/java/com/mirth/connect/server/controllers/ControllerFactory.java @@ -9,10 +9,8 @@ package com.mirth.connect.server.controllers; -import com.google.inject.Inject; public abstract class ControllerFactory { - @Inject private static ControllerFactory factory; public static ControllerFactory getFactory() { diff --git a/server/src/main/java/com/mirth/connect/server/util/SqlConfig.java b/server/src/main/java/com/mirth/connect/server/util/SqlConfig.java index ccb56d2b78..42e58520e0 100644 --- a/server/src/main/java/com/mirth/connect/server/util/SqlConfig.java +++ b/server/src/main/java/com/mirth/connect/server/util/SqlConfig.java @@ -29,7 +29,6 @@ import org.w3c.dom.Element; import org.xml.sax.InputSource; -import com.google.inject.Inject; import com.mirth.connect.donkey.model.DatabaseConstants; import com.mirth.connect.donkey.util.DonkeyElement; import com.mirth.connect.model.DatabaseSettings; @@ -40,7 +39,6 @@ public class SqlConfig { - @Inject private static volatile SqlConfig instance = null; private boolean splitReadWrite = false; diff --git a/server/src/test/java/com/mirth/connect/connectors/file/FileReceiverTest.java b/server/src/test/java/com/mirth/connect/connectors/file/FileReceiverTest.java index 9ef2f3a2bb..5807a360a8 100644 --- a/server/src/test/java/com/mirth/connect/connectors/file/FileReceiverTest.java +++ b/server/src/test/java/com/mirth/connect/connectors/file/FileReceiverTest.java @@ -36,12 +36,10 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.Configurator; import org.apache.velocity.runtime.RuntimeConstants; +import org.junit.AfterClass; 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.connectors.file.filesystems.FileSystemConnectionFactory; import com.mirth.connect.donkey.model.message.Message; import com.mirth.connect.donkey.model.message.RawMessage; @@ -52,6 +50,7 @@ import com.mirth.connect.donkey.server.channel.DispatchResult; import com.mirth.connect.donkey.server.event.EventDispatcher; import com.mirth.connect.donkey.server.message.batch.BatchAdaptorFactory; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.datatype.SerializerProperties; import com.mirth.connect.plugins.datatypes.hl7v2.ER7BatchAdaptorFactory; import com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties; @@ -64,6 +63,8 @@ public class FileReceiverTest { + private static StaticOverride factoryOverride; + private static final String POLL_ID = "pollId"; private static final String POLL_SEQUENCE_ID = "pollSequenceId"; private static final String POLL_COMPLETE = "pollComplete"; @@ -82,19 +83,19 @@ public static void setUpBeforeClass() throws Exception { ExtensionController extensionController = mock(ExtensionController.class); when(controllerFactory.createExtensionController()).thenReturn(extensionController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); Logger logger = LogManager.getLogger(RuntimeConstants.DEFAULT_RUNTIME_LOG_NAME); Configurator.setLevel(logger.getName(), Level.OFF); } + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + } + /* * No batch messages, no directory recursion */ diff --git a/server/src/test/java/com/mirth/connect/connectors/http/DefaultHttpConfigurationTest.java b/server/src/test/java/com/mirth/connect/connectors/http/DefaultHttpConfigurationTest.java index 41b3e8d610..51dbae5e3b 100644 --- a/server/src/test/java/com/mirth/connect/connectors/http/DefaultHttpConfigurationTest.java +++ b/server/src/test/java/com/mirth/connect/connectors/http/DefaultHttpConfigurationTest.java @@ -24,12 +24,11 @@ import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.AbstractHandler; import org.junit.After; +import org.junit.AfterClass; 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.testing.StaticOverride; import com.mirth.connect.server.controllers.ConfigurationController; import com.mirth.connect.server.controllers.ControllerFactory; @@ -39,6 +38,8 @@ */ public class DefaultHttpConfigurationTest { + private static StaticOverride factoryOverride; + private static final int LARGE_HEADER_BYTES = 16384; private Server server; @@ -48,14 +49,14 @@ public static void setupBeforeClass() { ControllerFactory controllerFactory = mock(ControllerFactory.class); when(controllerFactory.createConfigurationController()).thenReturn(mock(ConfigurationController.class)); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @After diff --git a/server/src/test/java/com/mirth/connect/connectors/http/HttpReceiverRequestHeaderSizeTest.java b/server/src/test/java/com/mirth/connect/connectors/http/HttpReceiverRequestHeaderSizeTest.java index 8d373cf315..703dabe0a0 100644 --- a/server/src/test/java/com/mirth/connect/connectors/http/HttpReceiverRequestHeaderSizeTest.java +++ b/server/src/test/java/com/mirth/connect/connectors/http/HttpReceiverRequestHeaderSizeTest.java @@ -12,15 +12,14 @@ import java.util.UUID; import org.junit.After; +import org.junit.AfterClass; 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.server.ConnectorTaskException; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.event.EventDispatcher; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.server.controllers.ConfigurationController; import com.mirth.connect.server.controllers.ControllerFactory; import com.mirth.connect.server.controllers.EventController; @@ -32,6 +31,8 @@ */ public class HttpReceiverRequestHeaderSizeTest { + private static StaticOverride factoryOverride; + private static final String TEST_CHANNEL_ID = UUID.randomUUID().toString(); private static final String TEST_CHANNEL_NAME = "Test HTTP Listener Channel"; @@ -43,14 +44,14 @@ public static void setupBeforeClass() { when(controllerFactory.createConfigurationController()).thenReturn(mock(ConfigurationController.class)); when(controllerFactory.createEventController()).thenReturn(mock(EventController.class)); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @After diff --git a/server/src/test/java/com/mirth/connect/connectors/jdbc/DatabaseReceiverInvalidColumnNameTests.java b/server/src/test/java/com/mirth/connect/connectors/jdbc/DatabaseReceiverInvalidColumnNameTests.java index 21d226df33..4a2d466044 100644 --- a/server/src/test/java/com/mirth/connect/connectors/jdbc/DatabaseReceiverInvalidColumnNameTests.java +++ b/server/src/test/java/com/mirth/connect/connectors/jdbc/DatabaseReceiverInvalidColumnNameTests.java @@ -17,17 +17,16 @@ import java.util.ArrayList; import java.util.List; +import org.junit.AfterClass; 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.RawMessage; import com.mirth.connect.donkey.server.channel.ChannelException; import com.mirth.connect.donkey.server.channel.DispatchResult; import com.mirth.connect.donkey.server.channel.FilterTransformerExecutor; import com.mirth.connect.donkey.server.event.EventDispatcher; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.server.TestUtils.DummyChannel; import com.mirth.connect.server.channel.MirthMetaDataReplacer; import com.mirth.connect.server.controllers.ConfigurationController; @@ -39,6 +38,8 @@ public class DatabaseReceiverInvalidColumnNameTests { + private static StaticOverride factoryOverride; + private final static String DB_DRIVER = "org.postgresql.Driver"; private final static String DB_URL = "jdbc:postgresql://localhost:5432/test"; private final static String DB_USERNAME = ""; @@ -63,14 +64,14 @@ public static void setupControllers() throws Exception { when(contextFactoryController.getContextFactory(any())).thenReturn(new MirthContextFactory(null, null, false)); when(controllerFactory.createContextFactoryController()).thenReturn(contextFactoryController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @Test @@ -132,4 +133,5 @@ protected DispatchResult dispatchRawMessage(RawMessage rawMessage, boolean batch return null; } } + } diff --git a/server/src/test/java/com/mirth/connect/connectors/tcp/TcpDispatcherTest.java b/server/src/test/java/com/mirth/connect/connectors/tcp/TcpDispatcherTest.java index 8d94f83d04..5633138e5c 100644 --- a/server/src/test/java/com/mirth/connect/connectors/tcp/TcpDispatcherTest.java +++ b/server/src/test/java/com/mirth/connect/connectors/tcp/TcpDispatcherTest.java @@ -20,12 +20,10 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.After; +import org.junit.AfterClass; 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.Response; import com.mirth.connect.donkey.model.message.Status; @@ -34,6 +32,7 @@ import com.mirth.connect.donkey.server.data.passthru.PassthruDaoFactory; import com.mirth.connect.donkey.server.event.EventDispatcher; import com.mirth.connect.donkey.server.queue.ConnectorMessageQueueDataSource; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.transmission.batch.DefaultBatchStreamReader; import com.mirth.connect.model.transmission.framemode.FrameModeProperties; import com.mirth.connect.model.transmission.framemode.FrameStreamHandler; @@ -45,6 +44,8 @@ import com.mirth.connect.server.controllers.ExtensionController; public class TcpDispatcherTest { + + private static StaticOverride factoryOverride; private static final String TEST_CHANNEL_ID = UUID.randomUUID().toString(); private static final String TEST_SERVER_ID = UUID.randomUUID().toString(); private static final String TEST_CHANNEL_NAME = "Test TCP Sender Channel"; @@ -83,14 +84,14 @@ public static void setupBeforeClass() throws Exception { when(extensionController.getTransmissionModeProviders()).thenReturn(transmissionModeProviders); when(controllerFactory.createExtensionController()).thenReturn(extensionController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @After diff --git a/server/src/test/java/com/mirth/connect/connectors/tcp/TcpReceiverTest.java b/server/src/test/java/com/mirth/connect/connectors/tcp/TcpReceiverTest.java index 04ef0c505f..35c0632484 100644 --- a/server/src/test/java/com/mirth/connect/connectors/tcp/TcpReceiverTest.java +++ b/server/src/test/java/com/mirth/connect/connectors/tcp/TcpReceiverTest.java @@ -12,16 +12,15 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.After; +import org.junit.AfterClass; 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.server.ConnectorTaskException; import com.mirth.connect.donkey.server.channel.Channel; import com.mirth.connect.donkey.server.event.EventDispatcher; import com.mirth.connect.donkey.server.message.DataType; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.plugins.DataTypeServerPlugin; import com.mirth.connect.plugins.TransmissionModeProvider; import com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeServerPlugin; @@ -32,6 +31,8 @@ import com.mirth.connect.server.controllers.ExtensionController; public class TcpReceiverTest { + + private static StaticOverride factoryOverride; private static final String TEST_CHANNEL_ID = UUID.randomUUID().toString(); private static final String TEST_SERVER_ID = UUID.randomUUID().toString(); @@ -62,14 +63,14 @@ public static void setupBeforeClass() throws Exception { when(extensionController.getDataTypePlugins()).thenReturn(dataTypePlugins); when(controllerFactory.createExtensionController()).thenReturn(extensionController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @After @@ -184,4 +185,5 @@ protected EventDispatcher getEventDispatcher() { return mock(EventDispatcher.class); } } + } diff --git a/server/src/test/java/com/mirth/connect/model/PublicServerSettingsTest.java b/server/src/test/java/com/mirth/connect/model/PublicServerSettingsTest.java index 64a85b170f..eaec708057 100644 --- a/server/src/test/java/com/mirth/connect/model/PublicServerSettingsTest.java +++ b/server/src/test/java/com/mirth/connect/model/PublicServerSettingsTest.java @@ -8,19 +8,20 @@ import java.util.ArrayList; import java.util.List; +import org.junit.AfterClass; 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.channel.MetaDataColumn; import com.mirth.connect.donkey.model.channel.MetaDataColumnType; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.server.controllers.ControllerFactory; import com.mirth.connect.server.controllers.ScriptController; public class PublicServerSettingsTest { + private static StaticOverride factoryOverride; + public static ServerSettings serverSettings = new ServerSettings(); public static List COLUMNS; @@ -31,14 +32,7 @@ public static void setup() throws Exception { ScriptController scriptController = mock(ScriptController.class); when(controllerFactory.createScriptController()).thenReturn(scriptController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); serverSettings.setEnvironmentName("envName"); serverSettings.setServerName("serverName"); serverSettings.setDefaultMetaDataColumns(null); @@ -48,6 +42,13 @@ protected void configure() { COLUMNS.add(new MetaDataColumn("TYPE", MetaDataColumnType.STRING, "mirth_type")); } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + } @Test public void defaultMetaDataColumnsTest() { diff --git a/server/src/test/java/com/mirth/connect/model/ServerSettingsTest.java b/server/src/test/java/com/mirth/connect/model/ServerSettingsTest.java index 0731905fb5..dc257a252f 100644 --- a/server/src/test/java/com/mirth/connect/model/ServerSettingsTest.java +++ b/server/src/test/java/com/mirth/connect/model/ServerSettingsTest.java @@ -5,20 +5,21 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import org.junit.AfterClass; import org.junit.BeforeClass; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.server.controllers.ControllerFactory; import com.mirth.connect.server.controllers.ScriptController; public class ServerSettingsTest { + private static StaticOverride factoryOverride; + public static ServerSettings serverSettings = new ServerSettings(); @BeforeClass @@ -28,20 +29,20 @@ public static void setup() throws Exception { ScriptController scriptController = mock(ScriptController.class); when(controllerFactory.createScriptController()).thenReturn(scriptController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); serverSettings.setEnvironmentName("envName"); serverSettings.setServerName("serverName"); serverSettings.setDefaultMetaDataColumns(null); serverSettings.setQueueBufferSize(1000); } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + } @Test public void envornmentNameTest() { diff --git a/server/src/test/java/com/mirth/connect/server/DatabaseConnectionPoolTests.java b/server/src/test/java/com/mirth/connect/server/DatabaseConnectionPoolTests.java index 9c2a60fc19..b3b5e679d5 100644 --- a/server/src/test/java/com/mirth/connect/server/DatabaseConnectionPoolTests.java +++ b/server/src/test/java/com/mirth/connect/server/DatabaseConnectionPoolTests.java @@ -28,20 +28,20 @@ import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; +import java.util.ArrayDeque; import java.util.Arrays; +import java.util.Deque; import java.util.HashMap; import javax.sql.DataSource; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.io.Resources; +import org.junit.After; import org.junit.Test; import org.mockito.Mockito; import org.mockito.invocation.Invocation; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; import com.mirth.commons.encryption.Digester; import com.mirth.connect.donkey.server.Donkey; import com.mirth.connect.donkey.server.DonkeyConfiguration; @@ -49,6 +49,7 @@ import com.mirth.connect.donkey.server.data.ChannelDoesNotExistException; import com.mirth.connect.donkey.server.data.jdbc.ConnectionPool; import com.mirth.connect.donkey.server.data.jdbc.PooledConnection; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.Channel; import com.mirth.connect.model.ChannelGroup; import com.mirth.connect.model.ChannelHeader; @@ -107,6 +108,15 @@ public class DatabaseConnectionPoolTests { private Connection connection; private Connection readOnlyConnection; + private final Deque overrides = new ArrayDeque<>(); + + @After + public void restoreOverrides() { + while (!overrides.isEmpty()) { + overrides.pop().close(); + } + } + @Test public void testCachesReadPool() throws Exception { setup(true, false); @@ -235,14 +245,7 @@ public void testMessageController() throws Exception { if (!USE_REAL_DATABASE_CONNECTIONS) { com.mirth.connect.donkey.server.controllers.ChannelController channelController = spy(com.mirth.connect.donkey.server.controllers.ChannelController.class); doReturn(1L).when(channelController).getLocalChannelId(eq("test"), anyBoolean()); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(com.mirth.connect.donkey.server.controllers.ChannelController.class); - bind(com.mirth.connect.donkey.server.controllers.ChannelController.class).toInstance(channelController); - } - }); - injector.getInstance(com.mirth.connect.donkey.server.controllers.ChannelController.class); + overrides.push(StaticOverride.install(com.mirth.connect.donkey.server.controllers.ChannelController.class, "instance", channelController)); } MessageController messageController = DonkeyMessageController.create(); @@ -336,27 +339,13 @@ private void setup(boolean splitReadWrite, boolean writePoolCache) throws Except doReturn(createPool(readOnlyConnection)).when(donkeyCP).createConnectionPool(anyString(), anyString(), anyString(), anyString(), anyString(), any(), anyBoolean(), anyString(), anyInt(), eq(true)); } - Injector donkeyConnectionPoolsInjector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(DonkeyConnectionPools.class); - bind(DonkeyConnectionPools.class).toInstance(donkeyCP); - } - }); - donkeyConnectionPoolsInjector.getInstance(DonkeyConnectionPools.class); + overrides.push(StaticOverride.install(DonkeyConnectionPools.class, "instance", donkeyCP)); DonkeyConnectionPools.getInstance().init(databaseSettings.getProperties()); donkey = spy(Donkey.class); - Injector donkeyInjector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(Donkey.class); - bind(Donkey.class).toInstance(donkey); - } - }); - donkeyInjector.getInstance(Donkey.class); + overrides.push(StaticOverride.install(Donkey.class, "instance", donkey)); ControllerFactory controllerFactory = spy(new DefaultControllerFactory()); @@ -371,25 +360,11 @@ protected void configure() { ExtensionController extensionController = mock(ExtensionController.class); doReturn(extensionController).when(controllerFactory).createExtensionController(); - Injector controllerFactoryInjector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - controllerFactoryInjector.getInstance(ControllerFactory.class); + overrides.push(StaticOverride.install(ControllerFactory.class, "factory", controllerFactory)); sqlConfig = spy(new SqlConfig()); - Injector sqlConfigInjector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(SqlConfig.class); - bind(SqlConfig.class).toInstance(sqlConfig); - } - }); - sqlConfigInjector.getInstance(SqlConfig.class); + overrides.push(StaticOverride.install(SqlConfig.class, "instance", sqlConfig)); donkey.startEngine(new DonkeyConfiguration("appdata", databaseSettings.getProperties(), null, null, "testserverid")); diff --git a/server/src/test/java/com/mirth/connect/server/api/servlets/ChannelServletTest.java b/server/src/test/java/com/mirth/connect/server/api/servlets/ChannelServletTest.java index cb264b600f..c006be3aa1 100644 --- a/server/src/test/java/com/mirth/connect/server/api/servlets/ChannelServletTest.java +++ b/server/src/test/java/com/mirth/connect/server/api/servlets/ChannelServletTest.java @@ -21,12 +21,11 @@ import javax.ws.rs.core.SecurityContext; import org.junit.Before; +import org.junit.AfterClass; 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.testing.StaticOverride; import com.mirth.connect.model.Channel; import com.mirth.connect.model.ChannelDependency; import com.mirth.connect.model.ChannelExportData; @@ -43,6 +42,8 @@ public class ChannelServletTest extends ServletTestBase { + private static StaticOverride factoryOverride; + private static final String CHANNEL_ID_1 = "channelId1"; private static final String CHANNEL_ID_2 = "channelId2"; private static final String CHANNEL_ID_3 = "channelId3"; @@ -106,14 +107,14 @@ public static void beforeClass() throws Exception { when(codeTemplateController.getLibraries(isNull(), anyBoolean())).thenReturn(codeTemplateLibraries); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } private static Channel createChannel(String id) { diff --git a/server/src/test/java/com/mirth/connect/server/controllers/DefaultConfigurationControllerTest.java b/server/src/test/java/com/mirth/connect/server/controllers/DefaultConfigurationControllerTest.java index 93072d30b0..759a0bb618 100644 --- a/server/src/test/java/com/mirth/connect/server/controllers/DefaultConfigurationControllerTest.java +++ b/server/src/test/java/com/mirth/connect/server/controllers/DefaultConfigurationControllerTest.java @@ -36,19 +36,20 @@ import javax.xml.transform.stream.StreamSource; import org.apache.commons.io.FileUtils; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.invocation.Invocation; import org.xml.sax.SAXParseException; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; import com.mirth.connect.client.core.ControllerException; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.DriverInfo; public class DefaultConfigurationControllerTest { + private static StaticOverride factoryOverride; + @BeforeClass public static void setup() throws Exception { ControllerFactory controllerFactory = mock(ControllerFactory.class); @@ -56,14 +57,14 @@ public static void setup() throws Exception { ScriptController scriptController = mock(ScriptController.class); when(controllerFactory.createScriptController()).thenReturn(scriptController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @Test diff --git a/server/src/test/java/com/mirth/connect/server/controllers/DefaultEventControllerTest.java b/server/src/test/java/com/mirth/connect/server/controllers/DefaultEventControllerTest.java index c8859af254..c9f56526da 100644 --- a/server/src/test/java/com/mirth/connect/server/controllers/DefaultEventControllerTest.java +++ b/server/src/test/java/com/mirth/connect/server/controllers/DefaultEventControllerTest.java @@ -27,16 +27,17 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.Configurator; import org.apache.velocity.runtime.RuntimeConstants; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; import com.mirth.connect.client.core.ControllerException; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.ServerEvent; import com.mirth.connect.model.filters.EventFilter; public class DefaultEventControllerTest { + + private StaticOverride factoryOverride; private EventController eventController; private final String SERVER_ID = "0000-0000-0000"; private final String CHANNEL_ID = "d243960c-7de3-4059-b60c-399991df1cdc"; @@ -52,18 +53,19 @@ public void setup() { ControllerFactory controllerFactory = mock(ControllerFactory.class); ConfigurationController configurationController = mock(ConfigurationController.class); when(controllerFactory.createConfigurationController()).thenReturn(configurationController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); Logger logger = LogManager.getLogger(RuntimeConstants.DEFAULT_RUNTIME_LOG_NAME); Configurator.setLevel(logger.getName(), Level.OFF); eventController = new TestDefaultEventController(); } + + @After + public void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + } + @SuppressWarnings("deprecation") @Test public void testExportAllEvents() throws Exception { diff --git a/server/src/test/java/com/mirth/connect/server/migration/Migrate3_8_0Test.java b/server/src/test/java/com/mirth/connect/server/migration/Migrate3_8_0Test.java index 51f65927fb..0d841a47b0 100644 --- a/server/src/test/java/com/mirth/connect/server/migration/Migrate3_8_0Test.java +++ b/server/src/test/java/com/mirth/connect/server/migration/Migrate3_8_0Test.java @@ -19,19 +19,20 @@ import java.util.Arrays; import java.util.List; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.invocation.Invocation; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.DriverInfo; import com.mirth.connect.server.controllers.ConfigurationController; import com.mirth.connect.server.controllers.ControllerFactory; public class Migrate3_8_0Test { + private static StaticOverride factoryOverride; + private static ControllerFactory controllerFactory; private static ConfigurationController configurationController; @@ -42,14 +43,14 @@ public static void setup() throws Exception { configurationController = mock(ConfigurationController.class); when(controllerFactory.createConfigurationController()).thenReturn(configurationController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); + } + + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } } @Test diff --git a/server/src/test/java/com/mirth/connect/server/util/javascript/JavaScriptUtilTest.java b/server/src/test/java/com/mirth/connect/server/util/javascript/JavaScriptUtilTest.java index 90221a55f8..47238667a1 100644 --- a/server/src/test/java/com/mirth/connect/server/util/javascript/JavaScriptUtilTest.java +++ b/server/src/test/java/com/mirth/connect/server/util/javascript/JavaScriptUtilTest.java @@ -22,14 +22,13 @@ import java.util.HashSet; import org.junit.After; +import org.junit.AfterClass; 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.MessageContent; +import com.mirth.connect.donkey.testing.StaticOverride; import com.mirth.connect.model.codetemplates.ContextType; import com.mirth.connect.server.builders.JavaScriptBuilder; import com.mirth.connect.server.controllers.CodeTemplateController; @@ -42,6 +41,8 @@ public class JavaScriptUtilTest { + private static StaticOverride factoryOverride; + private static final String SCRIPT_ID = "JavaScriptUtilTest-script"; @BeforeClass @@ -62,14 +63,7 @@ public static void setUpBeforeClass() { CodeTemplateController codeTemplateController = mock(CodeTemplateController.class); when(controllerFactory.createCodeTemplateController()).thenReturn(codeTemplateController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); /* * JavaScriptBuilder captures its controllers in static fields at class-load time. If an @@ -79,6 +73,15 @@ protected void configure() { JavaScriptBuilder.setControllersForTesting(extensionController, codeTemplateController); } + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + // JavaScriptBuilder's cached controllers are left alone: reading them back to restore + // them would initialize it against the real factory, which rewrites mirth.properties. + } + private MirthContextFactory contextFactory() { return new MirthContextFactory(new URL[0], new HashSet<>(), false); } diff --git a/server/src/test/java/com/mirth/connect/server/util/javascript/MirthContextFactoryTest.java b/server/src/test/java/com/mirth/connect/server/util/javascript/MirthContextFactoryTest.java index b34ee8627d..f4e8a13534 100644 --- a/server/src/test/java/com/mirth/connect/server/util/javascript/MirthContextFactoryTest.java +++ b/server/src/test/java/com/mirth/connect/server/util/javascript/MirthContextFactoryTest.java @@ -13,12 +13,11 @@ import java.net.URL; import java.util.HashSet; +import org.junit.AfterClass; 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.testing.StaticOverride; import com.mirth.connect.server.builders.JavaScriptBuilder; import com.mirth.connect.server.controllers.CodeTemplateController; import com.mirth.connect.server.controllers.ConfigurationController; @@ -28,6 +27,8 @@ public class MirthContextFactoryTest { + private static StaticOverride factoryOverride; + @BeforeClass public static void setUpBeforeClass() { // Same mocked ControllerFactory pattern as JavaScriptUtilTest, so this class is @@ -46,18 +47,20 @@ public static void setUpBeforeClass() { CodeTemplateController codeTemplateController = mock(CodeTemplateController.class); when(controllerFactory.createCodeTemplateController()).thenReturn(codeTemplateController); - Injector injector = Guice.createInjector(new AbstractModule() { - @Override - protected void configure() { - requestStaticInjection(ControllerFactory.class); - bind(ControllerFactory.class).toInstance(controllerFactory); - } - }); - injector.getInstance(ControllerFactory.class); + factoryOverride = StaticOverride.install(ControllerFactory.class, "factory", controllerFactory); JavaScriptBuilder.setControllersForTesting(extensionController, codeTemplateController); } + @AfterClass + public static void restoreControllerFactory() { + if (factoryOverride != null) { + factoryOverride.close(); + } + // JavaScriptBuilder's cached controllers are left alone: reading them back to restore + // them would initialize it against the real factory, which rewrites mirth.properties. + } + /* * Regression test for #338: with a null parent, the isolated classloader cannot see java.sql * on Java 9+, so custom driver resources failed to deploy. The parent must be the platform