This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 72ccea557fb8b9bc59b64e59cc56e5addea75427 Author: Rémi Kowalski <[email protected]> AuthorDate: Fri May 3 11:47:57 2019 +0200 JAMES-2754 add docker tests and smtp hosts system for deploiement validation --- .../org/apache/james/mpt/api/DomainAdder.java} | 19 +++-- .../java/org/apache/james/mpt/api/UserAdder.java | 2 - mpt/impl/imap-mailbox/external-james/pom.xml | 4 + .../external/james/DeploymentValidation.java | 5 +- ...=> DockerDeploymentValidationGuiceJPATest.java} | 27 +++++- ...> DockerDeploymentValidationSpringJPATest.java} | 27 +++++- .../external/james/DockerJamesRule.java | 88 ++++++++++++++++++++ .../external/james/ExternalJamesModule.java | 23 ++++-- .../james/JamesDeploymentValidationTest.java | 9 +- ...nfiguration.java => ProvisioningException.java} | 14 ++-- ...nalJamesUserAdder.java => ProvisioningAPI.java} | 19 +---- ...guration.java => StaticJamesConfiguration.java} | 29 ++++++- .../james/host/docker/CliProvisioningAPI.java | 95 ++++++++++++++++++++++ .../{ => external}/ExternalJamesConfiguration.java | 2 +- ...alJamesConfigurationEnvironnementVariables.java | 2 +- .../ExternalJamesImapHostSystem.java | 5 +- .../ExternalJamesSmtpHostSystem.java | 5 +- .../NoopDomainsAndUserAdder.java} | 16 ++-- .../james/util/docker/DockerGenericContainer.java | 6 ++ 19 files changed, 326 insertions(+), 71 deletions(-) diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java b/mpt/core/src/main/java/org/apache/james/mpt/api/DomainAdder.java similarity index 84% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java copy to mpt/core/src/main/java/org/apache/james/mpt/api/DomainAdder.java index 4035615..cebd4d8 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java +++ b/mpt/core/src/main/java/org/apache/james/mpt/api/DomainAdder.java @@ -16,15 +16,16 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; -import org.apache.james.util.Port; - -public interface ExternalJamesConfiguration { - String getAddress(); - - Port getImapPort(); - - Port getSmptPort(); +package org.apache.james.mpt.api; +/** + * Adds domains on demand. + */ +public interface DomainAdder { + + /** + * @param domain not null + */ + void addDomain(String domain) throws Exception; } diff --git a/mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java b/mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java index 6d9cf0c..4311deb 100644 --- a/mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java +++ b/mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java @@ -25,10 +25,8 @@ package org.apache.james.mpt.api; public interface UserAdder { /** - * Adds a user. * @param user not null * @param password not null - * @throws Exception when user cannot be added */ void addUser(String user, String password) throws Exception; } diff --git a/mpt/impl/imap-mailbox/external-james/pom.xml b/mpt/impl/imap-mailbox/external-james/pom.xml index 5663268..3553258 100644 --- a/mpt/impl/imap-mailbox/external-james/pom.xml +++ b/mpt/impl/imap-mailbox/external-james/pom.xml @@ -41,6 +41,10 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>james-server-webadmin-data</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>james-server-testing</artifactId> <scope>test</scope> </dependency> diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java index f4acc0c..20a4515 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java @@ -22,7 +22,6 @@ package org.apache.james.mpt.imapmailbox.external.james; import java.util.Locale; import org.apache.james.mpt.api.ImapHostSystem; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesSmtpHostSystem; import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; import org.apache.james.mpt.script.SimpleScriptedTestProtocol; import org.junit.Before; @@ -32,6 +31,7 @@ public abstract class DeploymentValidation { public static final String DOMAIN = "domain"; public static final String USER = "imapuser"; + public static final String USER_ADDRESS = USER + "@" + DOMAIN; public static final String PASSWORD = "password"; protected abstract ImapHostSystem createImapHostSystem(); @@ -44,8 +44,9 @@ public abstract class DeploymentValidation { @Before public void setUp() throws Exception { system = createImapHostSystem(); + simpleScriptedTestProtocol = new SimpleScriptedTestProtocol("/org/apache/james/imap/scripts/", system) - .withUser(USER + "@" + DOMAIN, PASSWORD) + .withUser(USER_ADDRESS, PASSWORD) .withLocale(Locale.US); } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java similarity index 70% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java copy to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java index 6bc75a9..13df38e 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java @@ -20,28 +20,49 @@ package org.apache.james.mpt.imapmailbox.external.james; import org.apache.james.mpt.api.ImapHostSystem; +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; import com.google.inject.Guice; import com.google.inject.Injector; -public class JamesDeploymentValidationTest extends DeploymentValidation { +@Ignore("Not to be run on CI, as it will not use the current build") +public class DockerDeploymentValidationGuiceJPATest extends DeploymentValidation { private ImapHostSystem system; private SmtpHostSystem smtpHostSystem; + @Rule + public DockerJamesRule dockerJamesRule = new DockerJamesRule("linagora/james-jpa-guice"); + @Override @Before public void setUp() throws Exception { - Injector injector = Guice.createInjector(new ExternalJamesModule()); + + dockerJamesRule.start(); + + ProvisioningAPI provisioningAPI = dockerJamesRule.cliJarDomainsAndUsersAdder(); + Injector injector = Guice.createInjector(new ExternalJamesModule(dockerJamesRule.getConfiguration(), provisioningAPI)); + provisioningAPI.addDomain(DOMAIN); + provisioningAPI.addUser(USER_ADDRESS, PASSWORD); system = injector.getInstance(ImapHostSystem.class); smtpHostSystem = injector.getInstance(SmtpHostSystem.class); system.beforeTest(); + super.setUp(); } + @Test + @Ignore("Not to be run on CI, as it will not use the current build. Uncomment to test on local dev environment") + @Override + public void validateDeployment() throws Exception { + } + @Override protected ImapHostSystem createImapHostSystem() { return system; @@ -55,7 +76,7 @@ public class JamesDeploymentValidationTest extends DeploymentValidation { @After public void tearDown() throws Exception { system.afterTest(); + dockerJamesRule.stop(); } - } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java similarity index 70% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java copy to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java index 6bc75a9..0f4e86a 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java @@ -20,28 +20,49 @@ package org.apache.james.mpt.imapmailbox.external.james; import org.apache.james.mpt.api.ImapHostSystem; +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; import com.google.inject.Guice; import com.google.inject.Injector; -public class JamesDeploymentValidationTest extends DeploymentValidation { +@Ignore("Not to be run on CI, as it will not use the current build") +public class DockerDeploymentValidationSpringJPATest extends DeploymentValidation { private ImapHostSystem system; private SmtpHostSystem smtpHostSystem; + @Rule + public DockerJamesRule dockerJamesRule = new DockerJamesRule("linagora/james-jpa-spring"); + @Override @Before public void setUp() throws Exception { - Injector injector = Guice.createInjector(new ExternalJamesModule()); + + dockerJamesRule.start(); + + ProvisioningAPI provisioningAPI = dockerJamesRule.cliShellDomainsAndUsersAdder(); + Injector injector = Guice.createInjector(new ExternalJamesModule(dockerJamesRule.getConfiguration(), provisioningAPI)); system = injector.getInstance(ImapHostSystem.class); + provisioningAPI.addDomain(DOMAIN); + provisioningAPI.addUser(USER_ADDRESS, PASSWORD); smtpHostSystem = injector.getInstance(SmtpHostSystem.class); system.beforeTest(); + super.setUp(); } + @Test + @Ignore("Not to be run on CI, as it will not use the current build. Uncomment to test on local dev environment") + @Override + public void validateDeployment() throws Exception { + } + @Override protected ImapHostSystem createImapHostSystem() { return system; @@ -55,7 +76,7 @@ public class JamesDeploymentValidationTest extends DeploymentValidation { @After public void tearDown() throws Exception { system.afterTest(); + dockerJamesRule.stop(); } - } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java new file mode 100644 index 0000000..1ff4709 --- /dev/null +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java @@ -0,0 +1,88 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ +package org.apache.james.mpt.imapmailbox.external.james; + +import java.io.IOException; + +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; +import org.apache.james.mpt.imapmailbox.external.james.host.StaticJamesConfiguration; +import org.apache.james.mpt.imapmailbox.external.james.host.docker.CliProvisioningAPI; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration; +import org.apache.james.util.Port; +import org.apache.james.util.docker.DockerGenericContainer; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy; + +public class DockerJamesRule implements TestRule { + + private static final int IMAP_PORT = 143; + private static final int SMTP_PORT = 587; + private static final int WEBADMIN_PORT = 8000; + + private final DockerGenericContainer container; + + public DockerJamesRule(String image) { + container = new DockerGenericContainer(image) + .withExposedPorts(SMTP_PORT, IMAP_PORT) + .waitingFor(new HostPortWaitStrategy()); + } + + public ProvisioningAPI cliJarDomainsAndUsersAdder() throws InterruptedException, ProvisioningException, IOException { + return new CliProvisioningAPI(CliProvisioningAPI.CliType.JAR, container); + } + + public ProvisioningAPI cliShellDomainsAndUsersAdder() throws InterruptedException, ProvisioningException, IOException { + return new CliProvisioningAPI(CliProvisioningAPI.CliType.SH, container); + } + + public void start() { + container.start(); + } + + public void stop() { + container.stop(); + } + + public void pause() { + container.pause(); + } + + public void unpause() { + container.unpause(); + } + + public ExternalJamesConfiguration getConfiguration() { + return new StaticJamesConfiguration("localhost", getMappedPort(IMAP_PORT), getMappedPort(SMTP_PORT)); + } + + public Port getWebadminPort() { + return getMappedPort(WEBADMIN_PORT); + } + + private Port getMappedPort(int port) { + return Port.of(container.getMappedPort(port)); + } + + @Override + public Statement apply(Statement statement, Description description) { + return statement; + } +} diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java index 4b0917f..6505f9b 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java @@ -19,29 +19,38 @@ package org.apache.james.mpt.imapmailbox.external.james; +import org.apache.james.mpt.api.DomainAdder; import org.apache.james.mpt.api.HostSystem; import org.apache.james.mpt.api.ImapHostSystem; import org.apache.james.mpt.api.UserAdder; import org.apache.james.mpt.host.ExternalHostSystem; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesConfiguration; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesConfigurationEnvironnementVariables; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesImapHostSystem; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesSmtpHostSystem; -import org.apache.james.mpt.imapmailbox.external.james.host.ExternalJamesUserAdder; +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesImapHostSystem; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesSmtpHostSystem; import com.google.inject.AbstractModule; public class ExternalJamesModule extends AbstractModule { + private final ExternalJamesConfiguration configuration; + private final ProvisioningAPI provisioningAPI; + + public ExternalJamesModule(ExternalJamesConfiguration configuration, ProvisioningAPI provisioningAPI) { + this.configuration = configuration; + this.provisioningAPI = provisioningAPI; + } + @Override protected void configure() { - bind(ExternalJamesConfiguration.class).to(ExternalJamesConfigurationEnvironnementVariables.class); + bind(ExternalJamesConfiguration.class).toInstance(configuration); bind(ImapHostSystem.class).to(ExternalJamesImapHostSystem.class); bind(HostSystem.class).to(ExternalJamesImapHostSystem.class); bind(ExternalHostSystem.class).to(ExternalJamesImapHostSystem.class); bind(SmtpHostSystem.class).to(ExternalJamesSmtpHostSystem.class); - bind(UserAdder.class).to(ExternalJamesUserAdder.class); + bind(DomainAdder.class).toInstance(provisioningAPI); + bind(UserAdder.class).toInstance(provisioningAPI); } } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java index 6bc75a9..adf9940 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java @@ -20,7 +20,11 @@ package org.apache.james.mpt.imapmailbox.external.james; import org.apache.james.mpt.api.ImapHostSystem; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration; +import org.apache.james.mpt.imapmailbox.external.james.host.external.NoopDomainsAndUserAdder; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfigurationEnvironnementVariables; import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; +import org.apache.james.utils.SMTPMessageSender; import org.junit.After; import org.junit.Before; @@ -29,13 +33,15 @@ import com.google.inject.Injector; public class JamesDeploymentValidationTest extends DeploymentValidation { + private final String USER_ADDRESS = USER + "@" + DOMAIN; private ImapHostSystem system; private SmtpHostSystem smtpHostSystem; + private final ExternalJamesConfiguration configuration = new ExternalJamesConfigurationEnvironnementVariables(); @Override @Before public void setUp() throws Exception { - Injector injector = Guice.createInjector(new ExternalJamesModule()); + Injector injector = Guice.createInjector(new ExternalJamesModule(configuration, new NoopDomainsAndUserAdder())); system = injector.getInstance(ImapHostSystem.class); smtpHostSystem = injector.getInstance(SmtpHostSystem.class); system.beforeTest(); @@ -57,5 +63,4 @@ public class JamesDeploymentValidationTest extends DeploymentValidation { system.afterTest(); } - } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ProvisioningException.java similarity index 84% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java copy to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ProvisioningException.java index 4035615..fb1d251 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ProvisioningException.java @@ -16,15 +16,11 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james; -import org.apache.james.util.Port; - -public interface ExternalJamesConfiguration { - String getAddress(); - - Port getImapPort(); - - Port getSmptPort(); +public class ProvisioningException extends Exception { + public ProvisioningException(String message) { + super(message); + } } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ProvisioningAPI.java similarity index 77% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java copy to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ProvisioningAPI.java index 80801de..a5e0c7c 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ProvisioningAPI.java @@ -18,21 +18,8 @@ ****************************************************************/ package org.apache.james.mpt.imapmailbox.external.james.host; +import org.apache.james.mpt.api.DomainAdder; import org.apache.james.mpt.api.UserAdder; -import com.google.inject.Singleton; - -@Singleton -public class ExternalJamesUserAdder implements UserAdder { - - public ExternalJamesUserAdder() { - - } - - @Override - public void addUser(String user, String password) throws Exception { - // User should already be configured - // We do not throw an exception in order to use BaseImapProtocol based tests - } - -} \ No newline at end of file +public interface ProvisioningAPI extends DomainAdder, UserAdder { +} diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/StaticJamesConfiguration.java similarity index 64% copy from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java copy to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/StaticJamesConfiguration.java index 4035615..915d57a 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/StaticJamesConfiguration.java @@ -18,13 +18,34 @@ ****************************************************************/ package org.apache.james.mpt.imapmailbox.external.james.host; +import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration; import org.apache.james.util.Port; -public interface ExternalJamesConfiguration { - String getAddress(); +public class StaticJamesConfiguration implements ExternalJamesConfiguration { - Port getImapPort(); + private final String address; + private final Port imapPort; + private final Port smtpPort; - Port getSmptPort(); + public StaticJamesConfiguration(String address, Port imapPort, Port smtpPort) { + this.address = address; + this.imapPort = imapPort; + this.smtpPort = smtpPort; + } + + @Override + public String getAddress() { + return address; + } + + @Override + public Port getImapPort() { + return imapPort; + } + + @Override + public Port getSmptPort() { + return smtpPort; + } } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java new file mode 100644 index 0000000..b3aa138 --- /dev/null +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java @@ -0,0 +1,95 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ +package org.apache.james.mpt.imapmailbox.external.james.host.docker; + +import java.io.IOException; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.james.mpt.imapmailbox.external.james.ProvisioningException; +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; +import org.apache.james.util.docker.DockerGenericContainer; +import org.testcontainers.containers.Container; +import org.testcontainers.shaded.org.apache.commons.lang.StringUtils; + +import com.google.common.collect.ImmutableList; + +public class CliProvisioningAPI implements ProvisioningAPI { + + public enum CliType { + JAR, + SH + } + + private final DockerGenericContainer container; + private final String[] cmd; + + private final static String[] jarCmd = {"java", "-jar", "/root/james-cli.jar"}; + private final static String[] hostAndPort = {"-h", "127.0.0.1", "-p", "9999"}; + + public CliProvisioningAPI(CliType cliType, DockerGenericContainer container) throws InterruptedException, ProvisioningException, IOException, IllegalArgumentException { + this.container = container; + switch (cliType) { + case JAR: + cmd = jarCmd; + break; + case SH: + cmd = shCmd(); + break; + default: + throw new IllegalArgumentException("UNKNOWN CliType"); + } + } + + @Override + public void addDomain(String domain) throws Exception { + Container.ExecResult execResult = exec("adddomain", domain); + + if (execResult.getExitCode() != 0) { + throw new ProvisioningException("Failed to add domain" + executionResultToString(execResult)); + } + } + + @Override + public void addUser(String user, String password) throws Exception { + Container.ExecResult execResult = exec("adduser", user, password); + + if (execResult.getExitCode() != 0) { + throw new ProvisioningException("Failed to add user" + executionResultToString(execResult)); + } + } + + private String[] shCmd() throws IOException, InterruptedException, ProvisioningException { + Container.ExecResult findCli = container.exec("find", "/root", "-name", "james-cli.sh"); + if (findCli.getExitCode() != 0) { + throw new ProvisioningException("Failed to getCliPath" + executionResultToString(findCli)); + } + return new String[]{findCli.getStdout().trim()}; + } + + + private Container.ExecResult exec(String... commands) throws Exception { + String[] command = ArrayUtils.addAll(ArrayUtils.addAll(cmd, hostAndPort), commands); + return container.exec(command); + } + + private String executionResultToString(Container.ExecResult execResult) { + return StringUtils.join(ImmutableList.of(execResult.getStdout(), execResult.getStderr()), " "); + } + +} diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfiguration.java similarity index 95% rename from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java rename to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfiguration.java index 4035615..91fa822 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfiguration.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfiguration.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james.host.external; import org.apache.james.util.Port; diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfigurationEnvironnementVariables.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfigurationEnvironnementVariables.java similarity index 97% rename from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfigurationEnvironnementVariables.java rename to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfigurationEnvironnementVariables.java index 799746d..03f36bf 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesConfigurationEnvironnementVariables.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfigurationEnvironnementVariables.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james.host.external; import org.apache.james.util.Port; diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesImapHostSystem.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesImapHostSystem.java similarity index 93% rename from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesImapHostSystem.java rename to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesImapHostSystem.java index ac75f4c..6f9c4c7 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesImapHostSystem.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesImapHostSystem.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james.host.external; import java.net.InetSocketAddress; import java.util.function.Supplier; @@ -30,7 +30,6 @@ import org.apache.james.mpt.api.ImapFeatures.Feature; import org.apache.james.mpt.host.ExternalHostSystem; import org.apache.james.mpt.monitor.NullMonitor; -import com.google.common.base.Preconditions; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -43,7 +42,7 @@ public class ExternalJamesImapHostSystem extends ExternalHostSystem { private final Supplier<InetSocketAddress> addressSupplier; @Inject - private ExternalJamesImapHostSystem(ExternalJamesUserAdder userAdder, ExternalJamesConfiguration configuration) { + private ExternalJamesImapHostSystem(NoopDomainsAndUserAdder userAdder, ExternalJamesConfiguration configuration) { super(SUPPORTED_FEATURES, new NullMonitor(), SHABANG, userAdder); this.addressSupplier = () -> new InetSocketAddress(configuration.getAddress(), configuration.getImapPort().getValue()); } diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesSmtpHostSystem.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesSmtpHostSystem.java similarity index 92% rename from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesSmtpHostSystem.java rename to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesSmtpHostSystem.java index 8e6aee0..de6ecca 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesSmtpHostSystem.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesSmtpHostSystem.java @@ -16,17 +16,18 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james.host.external; import java.io.IOException; +import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem; import org.apache.james.utils.SMTPMessageSender; import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton -public class ExternalJamesSmtpHostSystem implements SmtpHostSystem{ +public class ExternalJamesSmtpHostSystem implements SmtpHostSystem { private final ExternalJamesConfiguration configuration; diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/NoopDomainsAndUserAdder.java similarity index 75% rename from mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java rename to mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/NoopDomainsAndUserAdder.java index 80801de..38fdfad 100644 --- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesUserAdder.java +++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/NoopDomainsAndUserAdder.java @@ -16,16 +16,13 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mpt.imapmailbox.external.james.host; +package org.apache.james.mpt.imapmailbox.external.james.host.external; -import org.apache.james.mpt.api.UserAdder; +import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI; -import com.google.inject.Singleton; +public class NoopDomainsAndUserAdder implements ProvisioningAPI { -@Singleton -public class ExternalJamesUserAdder implements UserAdder { - - public ExternalJamesUserAdder() { + public NoopDomainsAndUserAdder() { } @@ -35,4 +32,9 @@ public class ExternalJamesUserAdder implements UserAdder { // We do not throw an exception in order to use BaseImapProtocol based tests } + @Override + public void addDomain(String domain) throws Exception { + // Domain should already be configured + // We do not throw an exception in order to use BaseImapProtocol based tests + } } \ No newline at end of file diff --git a/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java b/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java index a833f58..8502745 100644 --- a/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java +++ b/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java @@ -19,6 +19,7 @@ package org.apache.james.util.docker; +import java.io.IOException; import java.net.Socket; import java.time.Duration; import java.util.List; @@ -32,6 +33,7 @@ import org.junit.runners.model.Statement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.Container; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.WaitStrategy; import org.testcontainers.images.builder.ImageFromDockerfile; @@ -113,6 +115,10 @@ public class DockerGenericContainer implements TestRule { return this; } + public Container.ExecResult exec(String... command) throws IOException, InterruptedException { + return container.execInContainer(command); + } + public void start() { container.start(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
