You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/05/15 07:42:07 UTC
[james-project] 01/05: JAMES-2754 add docker tests and smtp hosts
system for deploiement validation
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 <rk...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org