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 2017/04/03 11:10:12 UTC
[13/15] james-project git commit: JAMES-1983 Write CLI integration
tests on the printed output
JAMES-1983 Write CLI integration tests on the printed output
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c994be04
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c994be04
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c994be04
Branch: refs/heads/master
Commit: c994be049e91bb3e9a6ca0fa31dec94fb2d23860
Parents: e854211
Author: benwa <bt...@linagora.com>
Authored: Sat Apr 1 18:24:01 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Apr 3 18:09:33 2017 +0700
----------------------------------------------------------------------
.../james/cli/DataCommandsIntegrationTest.java | 97 +++++++++++++++-----
.../cli/MailboxCommandsIntegrationTest.java | 25 +++--
.../james/cli/QuotaCommandsIntegrationTest.java | 83 ++++++++++++++---
.../cli/SieveQuotaCommandsIntegrationTest.java | 31 +++++--
.../apache/james/cli/util/OutputCapture.java | 39 ++++++++
.../james/cli/util/OutputCaptureTest.java | 58 ++++++++++++
.../java/org/apache/james/cli/ServerCmd.java | 63 +++++++------
7 files changed, 315 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
index 1e3a6d3..9c46c2a 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
@@ -24,32 +24,27 @@ import static org.mockito.Mockito.mock;
import java.util.AbstractMap;
-import javax.inject.Singleton;
-
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.cli.util.OutputCapture;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.modules.server.JMXServerModule;
import org.apache.james.rrt.lib.MappingImpl;
import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl;
import org.apache.james.utils.DataProbeImpl;
-import org.apache.james.utils.MailboxManagerDefinition;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import com.google.inject.Inject;
-import com.google.inject.multibindings.Multibinder;
-
public class DataCommandsIntegrationTest {
- public static final String DOMAIN_COM = "domain.com";
- public static final String USER = "user";
- public static final String MAIL_ADDRESS = USER + "@" + DOMAIN_COM;
+ public static final String DOMAIN = "domain.com";
+ public static final String USER = "chibenwa";
+ public static final String MAIL_ADDRESS = USER + "@" + DOMAIN;
public static final String PASSWORD = "12345";
+ private OutputCapture outputCapture;
@Rule
public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
@@ -62,6 +57,7 @@ public class DataCommandsIntegrationTest {
binder -> binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)));
guiceJamesServer.start();
dataProbe = guiceJamesServer.getProbe(DataProbeImpl.class);
+ outputCapture = new OutputCapture();
}
@After
@@ -71,23 +67,43 @@ public class DataCommandsIntegrationTest {
@Test
public void addDomainShouldWork() throws Exception {
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "ADDDOMAIN", DOMAIN_COM});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "ADDDOMAIN", DOMAIN});
- assertThat(dataProbe.containsDomain(DOMAIN_COM)).isTrue();
+ assertThat(dataProbe.containsDomain(DOMAIN)).isTrue();
}
@Test
public void removeDomainShouldWork() throws Exception {
- dataProbe.addDomain(DOMAIN_COM);
+ dataProbe.addDomain(DOMAIN);
+
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "REMOVEDOMAIN", DOMAIN});
+
+ assertThat(dataProbe.containsDomain(DOMAIN)).isFalse();
+ }
+
+ @Test
+ public void listDomainsShouldWork() throws Exception {
+ dataProbe.addDomain(DOMAIN);
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "REMOVEDOMAIN", DOMAIN_COM});
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "listdomains"}, outputCapture.getPrintStream());
- assertThat(dataProbe.containsDomain(DOMAIN_COM)).isFalse();
+ assertThat(outputCapture.getContent()).contains(DOMAIN);
+ }
+
+ @Test
+ public void containsDomainShouldWork() throws Exception {
+ dataProbe.addDomain(DOMAIN);
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "containsdomain", DOMAIN},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce(DOMAIN + " exists");
}
@Test
public void addUserShouldWork() throws Exception {
- dataProbe.addDomain(DOMAIN_COM);
+ dataProbe.addDomain(DOMAIN);
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "ADDUSER", MAIL_ADDRESS, PASSWORD});
@@ -96,7 +112,7 @@ public class DataCommandsIntegrationTest {
@Test
public void removeUserShouldWork() throws Exception {
- dataProbe.addDomain(DOMAIN_COM);
+ dataProbe.addDomain(DOMAIN);
dataProbe.addUser(MAIL_ADDRESS, PASSWORD);
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "REMOVEUSER", MAIL_ADDRESS});
@@ -105,9 +121,20 @@ public class DataCommandsIntegrationTest {
}
@Test
+ public void listUsersShouldWork() throws Exception {
+ dataProbe.addDomain(DOMAIN);
+ dataProbe.addUser(MAIL_ADDRESS, PASSWORD);
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "listusers"}, outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce(USER);
+ }
+
+ @Test
public void addAddressMappingShouldWork() throws Exception {
String redirectionAddress = "redirect@apache.org";
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN_COM, redirectionAddress});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN, redirectionAddress});
assertThat(dataProbe.listMappings())
.containsOnly(
@@ -119,11 +146,35 @@ public class DataCommandsIntegrationTest {
}
@Test
+ public void listMappingsShouldWork() throws Exception {
+ String redirectionAddress = "redirect@apache.org";
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN, redirectionAddress});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "listmappings"},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("chibenwa@domain.com=redirect@apache.org");
+ }
+
+ @Test
+ public void listUsersDomainMappingShouldWork() throws Exception {
+ String redirectionAddress = "redirect@apache.org";
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN, redirectionAddress});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "listuserdomainmappings", USER, DOMAIN},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("redirect@apache.org");
+ }
+
+ @Test
public void removeAddressMappingShouldWork() throws Exception {
String redirectionAddress = "redirect@apache.org";
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN_COM, redirectionAddress});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addaddressmapping", USER, DOMAIN, redirectionAddress});
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "removeaddressmapping", USER, DOMAIN_COM, redirectionAddress});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "removeaddressmapping", USER, DOMAIN, redirectionAddress});
assertThat(dataProbe.listMappings())
.isNull();
@@ -132,7 +183,7 @@ public class DataCommandsIntegrationTest {
@Test
public void addRegexMappingShouldWork() throws Exception {
String regex = "regex";
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addregexmapping", USER, DOMAIN_COM, regex});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addregexmapping", USER, DOMAIN, regex});
assertThat(dataProbe.listMappings())
.containsOnly(
@@ -146,9 +197,9 @@ public class DataCommandsIntegrationTest {
@Test
public void removeRegexMappingShouldWork() throws Exception {
String regex = "regex";
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addregexmapping", USER, DOMAIN_COM, regex});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "addregexmapping", USER, DOMAIN, regex});
- ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "removeregexmapping", USER, DOMAIN_COM, regex});
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "removeregexmapping", USER, DOMAIN, regex});
assertThat(dataProbe.listMappings())
.isNull();
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
index 074a22a..9e131bb 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
@@ -22,40 +22,34 @@ package org.apache.james.cli;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
-import javax.inject.Singleton;
-
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.cli.util.OutputCapture;
import org.apache.james.mailbox.model.MailboxConstants;
-import org.apache.james.mailbox.model.QuotaRoot;
-import org.apache.james.mailbox.store.quota.QuotaRootImpl;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.modules.MailboxProbeImpl;
import org.apache.james.modules.server.JMXServerModule;
-import org.apache.james.utils.MailboxManagerDefinition;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import com.google.inject.Inject;
-import com.google.inject.multibindings.Multibinder;
-
public class MailboxCommandsIntegrationTest {
public static final String USER = "user";
- public static final String MAILBOX = "mailbox";
+ public static final String MAILBOX = "mailboxExampleName";
@Rule
public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
private GuiceJamesServer guiceJamesServer;
private MailboxProbeImpl mailboxProbe;
+ private OutputCapture outputCapture;
@Before
public void setUp() throws Exception {
guiceJamesServer = memoryJmap.jmapServer(new JMXServerModule(),
binder -> binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)));
guiceJamesServer.start();
+ outputCapture = new OutputCapture();
mailboxProbe = guiceJamesServer.getProbe(MailboxProbeImpl.class);
}
@@ -81,6 +75,17 @@ public class MailboxCommandsIntegrationTest {
}
@Test
+ public void listUserMailboxesShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "createmailbox", MailboxConstants.USER_NAMESPACE, USER, MAILBOX});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "listusermailboxes", USER},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce(MAILBOX);
+ }
+
+ @Test
public void deleteMailboxeShouldWork() throws Exception {
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "createmailbox", MailboxConstants.USER_NAMESPACE, USER, MAILBOX});
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
index 517457d..551a5f0 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
@@ -22,36 +22,23 @@ package org.apache.james.cli;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
-import javax.inject.Singleton;
-
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.cli.util.OutputCapture;
import org.apache.james.mailbox.model.QuotaRoot;
import org.apache.james.mailbox.store.quota.QuotaRootImpl;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.modules.QuotaProbesImpl;
import org.apache.james.modules.server.JMXServerModule;
-import org.apache.james.utils.MailboxManagerDefinition;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import com.google.inject.Inject;
-import com.google.inject.multibindings.Multibinder;
-
public class QuotaCommandsIntegrationTest {
public static final String USER = "user";
public static final QuotaRoot QUOTA_ROOT = QuotaRootImpl.quotaRoot("#private&" + USER);
-
- @Singleton
- private static class MemoryMailboxManagerDefinition extends MailboxManagerDefinition {
- @Inject
- private MemoryMailboxManagerDefinition(InMemoryMailboxManager manager) {
- super("memory-mailboxmanager", manager);
- }
- }
+ private OutputCapture outputCapture;
@Rule
public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
@@ -64,6 +51,7 @@ public class QuotaCommandsIntegrationTest {
binder -> binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)));
guiceJamesServer.start();
quotaProbe = guiceJamesServer.getProbe(QuotaProbesImpl.class);
+ outputCapture = new OutputCapture();
}
@After
@@ -79,6 +67,17 @@ public class QuotaCommandsIntegrationTest {
}
@Test
+ public void getDefaultMaxStorageShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setdefaultmaxstoragequota", "36M"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getdefaultmaxstoragequota"},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Default Maximum Storage Quota: 36 MB");
+ }
+
+ @Test
public void setDefaultMaxMessageCountShouldWork() throws Exception {
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setdefaultmaxmessagecountquota", "36"});
@@ -86,6 +85,17 @@ public class QuotaCommandsIntegrationTest {
}
@Test
+ public void getDefaultMaxMessageCountShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setdefaultmaxmessagecountquota", "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getdefaultmaxmessagecountquota"},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Default Maximum message count Quota: 36");
+ }
+
+ @Test
public void setMaxStorageShouldWork() throws Exception {
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxstoragequota", QUOTA_ROOT.getValue(), "36"});
@@ -93,10 +103,53 @@ public class QuotaCommandsIntegrationTest {
}
@Test
+ public void getMaxStorageShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxstoragequota", QUOTA_ROOT.getValue(), "1g"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getmaxstoragequota", QUOTA_ROOT.getValue()},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Storage space allowed for Quota Root #private&user: 1 GB");
+ }
+
+ @Test
public void setMaxMessageCountShouldWork() throws Exception {
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxmessagecountquota", QUOTA_ROOT.getValue(), "36"});
assertThat(quotaProbe.getMaxMessageCount(QUOTA_ROOT.getValue())).isEqualTo(36);
}
+ @Test
+ public void getMaxMessageCountShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxmessagecountquota", QUOTA_ROOT.getValue(), "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getmaxmessagecountquota", QUOTA_ROOT.getValue()},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("MailboxMessage count allowed for Quota Root #private&user: 36");
+ }
+
+ @Test
+ public void getStorageQuotaShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxstoragequota", QUOTA_ROOT.getValue(), "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getstoragequota", QUOTA_ROOT.getValue()},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Storage quota for #private&user is: 0 bytes / 36 bytes");
+ }
+
+ @Test
+ public void getMessageCountQuotaShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxmessagecountquota", QUOTA_ROOT.getValue(), "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getmessagecountquota", QUOTA_ROOT.getValue()},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("MailboxMessage count quota for #private&user is: 0 / 36");
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
index bc2fb30..4e086ab 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
@@ -22,17 +22,14 @@ package org.apache.james.cli;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
-import javax.inject.Singleton;
-
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.cli.util.OutputCapture;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.modules.TestFilesystemModule;
import org.apache.james.modules.protocols.SieveProbeImpl;
import org.apache.james.modules.server.JMXServerModule;
import org.apache.james.sieverepository.api.exception.QuotaNotFoundException;
-import org.apache.james.utils.MailboxManagerDefinition;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -40,9 +37,6 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import com.google.inject.Inject;
-import com.google.inject.multibindings.Multibinder;
-
public class SieveQuotaCommandsIntegrationTest {
public static final String USER = "user";
@@ -54,6 +48,7 @@ public class SieveQuotaCommandsIntegrationTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private GuiceJamesServer guiceJamesServer;
private SieveProbeImpl sieveProbe;
+ private OutputCapture outputCapture;
@Before
public void setUp() throws Exception {
@@ -61,6 +56,7 @@ public class SieveQuotaCommandsIntegrationTest {
binder -> binder.bind(ListeningMessageSearchIndex.class).toInstance(mock(ListeningMessageSearchIndex.class)))
.overrideWith(new TestFilesystemModule(temporaryFolder));
guiceJamesServer.start();
+ outputCapture = new OutputCapture();
sieveProbe = guiceJamesServer.getProbe(SieveProbeImpl.class);
}
@@ -77,12 +73,33 @@ public class SieveQuotaCommandsIntegrationTest {
}
@Test
+ public void getSieveUserQuotaShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setsieveuserquota", USER, "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getsieveuserquota", USER},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Storage space allowed for user Sieve scripts: 36 bytes");
+ }
+
+ @Test
public void setSieveQuotaShouldWork() throws Exception {
ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setsievequota", "36"});
assertThat(sieveProbe.getSieveQuota()).isEqualTo(36);
}
+ @Test
+ public void getSieveQuotaShouldWork() throws Exception {
+ ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setsievequota", "36"});
+
+ ServerCmd.executeAndOutputToStream(new String[] {"-h", "127.0.0.1", "-p", "9999", "getsievequota"},
+ outputCapture.getPrintStream());
+
+ assertThat(outputCapture.getContent())
+ .containsOnlyOnce("Storage space allowed for Sieve scripts by default: 36 bytes");
+ }
@Test
public void removeSieveUserQuotaShouldWork() throws Exception {
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCapture.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCapture.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCapture.java
new file mode 100644
index 0000000..20fef6a
--- /dev/null
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCapture.java
@@ -0,0 +1,39 @@
+/****************************************************************
+ * 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.cli.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import com.google.common.base.Charsets;
+
+public class OutputCapture {
+
+ private final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+ public PrintStream getPrintStream() {
+ return new PrintStream(byteArrayOutputStream);
+ }
+
+ public String getContent() {
+ return new String(byteArrayOutputStream.toByteArray(), Charsets.UTF_8);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java
new file mode 100644
index 0000000..a76c2fb
--- /dev/null
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java
@@ -0,0 +1,58 @@
+/****************************************************************
+ * 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.cli.util;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+import com.google.common.base.Charsets;
+
+public class OutputCaptureTest {
+
+ @Test
+ public void contentShouldBeEmptyByDefault() {
+ assertThat(new OutputCapture().getContent()).isEmpty();
+ }
+
+ @Test
+ public void contentShouldReturnOutputStreamInput() throws Exception {
+ OutputCapture outputCapture = new OutputCapture();
+
+ String message = "Hello world!\n";
+ outputCapture.getPrintStream().write(message.getBytes(Charsets.UTF_8));
+
+ assertThat(outputCapture.getContent()).isEqualTo(message);
+ }
+
+
+ @Test
+ public void mixingReadsAndWritesShouldWork() throws Exception {
+ OutputCapture outputCapture = new OutputCapture();
+ String message = "Hello world!\n";
+ outputCapture.getPrintStream().write(message.getBytes(Charsets.UTF_8));
+ outputCapture.getContent();
+
+ String additionalMessage = "Additional message!\n";
+ outputCapture.getPrintStream().write(additionalMessage.getBytes(Charsets.UTF_8));
+
+ assertThat(outputCapture.getContent()).isEqualTo(message + additionalMessage);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c994be04/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index af882ed..edf86fa 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -102,6 +102,11 @@ public class ServerCmd {
}
public static void doMain(String[] args) throws Exception {
+ PrintStream printStream = System.out;
+ executeAndOutputToStream(args, printStream);
+ }
+
+ public static void executeAndOutputToStream(String[] args, PrintStream printStream) throws Exception {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
CommandLine cmd = parseCommandLine(args);
@@ -112,11 +117,11 @@ public class ServerCmd {
new JmxQuotaProbe().connect(jmxConnection),
new JmxSieveProbe().connect(jmxConnection)
)
- .executeCommandLine(cmd);
+ .executeCommandLine(cmd, printStream);
stopWatch.split();
print(new String[] { Joiner.on(' ')
.join(cmdType.getCommand(), "command executed sucessfully in", stopWatch.getSplitTime(), "ms.")},
- System.out);
+ printStream);
stopWatch.stop();
}
@@ -169,8 +174,8 @@ public class ServerCmd {
}
@VisibleForTesting
- CmdType executeCommandLine(CommandLine cmd) throws Exception {
- String[] arguments = cmd.getArgs();
+ private CmdType executeCommandLine(CommandLine commandLine, PrintStream printStream) throws Exception {
+ String[] arguments = commandLine.getArgs();
String cmdName = arguments[0];
CmdType cmdType = CmdType.lookup(cmdName);
if (cmdType == null) {
@@ -179,11 +184,17 @@ public class ServerCmd {
if (! cmdType.hasCorrectArguments(arguments.length)) {
throw new InvalidArgumentNumberException(cmdType, arguments.length);
}
- executeCommand(arguments, cmdType);
+ executeCommand(arguments, cmdType, printStream);
return cmdType;
}
- private void executeCommand(String[] arguments, CmdType cmdType) throws Exception {
+
+ @VisibleForTesting
+ CmdType executeCommandLine(CommandLine commandLine) throws Exception {
+ return executeCommandLine(commandLine, new PrintStream(System.out));
+ }
+
+ private void executeCommand(String[] arguments, CmdType cmdType, PrintStream printStream) throws Exception {
switch (cmdType) {
case ADDUSER:
probe.addUser(arguments[1], arguments[2]);
@@ -192,7 +203,7 @@ public class ServerCmd {
probe.removeUser(arguments[1]);
break;
case LISTUSERS:
- print(probe.listUsers(), System.out);
+ print(probe.listUsers(), printStream);
break;
case ADDDOMAIN:
probe.addDomain(arguments[1]);
@@ -202,20 +213,20 @@ public class ServerCmd {
break;
case CONTAINSDOMAIN:
if (probe.containsDomain(arguments[1])) {
- System.out.println(arguments[1] + " exists");
+ printStream.println(arguments[1] + " exists");
} else {
- System.out.println(arguments[1] + " does not exists");
+ printStream.println(arguments[1] + " does not exists");
}
break;
case LISTDOMAINS:
- print(probe.listDomains(), System.out);
+ print(probe.listDomains(), printStream);
break;
case LISTMAPPINGS:
- print(probe.listMappings(), System.out);
+ print(probe.listMappings(), printStream);
break;
case LISTUSERDOMAINMAPPINGS:
Mappings userDomainMappings = probe.listUserDomainMappings(arguments[1], arguments[2]);
- print(userDomainMappings.asStrings(), System.out);
+ print(userDomainMappings.asStrings(), printStream);
break;
case ADDADDRESSMAPPING:
probe.addAddressMapping(arguments[1], arguments[2], arguments[3]);
@@ -243,28 +254,28 @@ public class ServerCmd {
break;
case LISTUSERMAILBOXES:
Collection<String> mailboxes = mailboxProbe.listUserMailboxes(arguments[1]);
- print(mailboxes.toArray(new String[0]), System.out);
+ print(mailboxes.toArray(new String[0]), printStream);
break;
case DELETEMAILBOX:
mailboxProbe.deleteMailbox(arguments[1], arguments[2], arguments[3]);
break;
case GETSTORAGEQUOTA:
- printStorageQuota(arguments[1], quotaProbe.getStorageQuota(arguments[1]));
+ printStorageQuota(arguments[1], quotaProbe.getStorageQuota(arguments[1]), printStream);
break;
case GETMESSAGECOUNTQUOTA:
- printMessageQuota(arguments[1], quotaProbe.getMessageCountQuota(arguments[1]));
+ printMessageQuota(arguments[1], quotaProbe.getMessageCountQuota(arguments[1]), printStream);
break;
case GETQUOTAROOT:
- System.out.println("Quota Root : " + quotaProbe.getQuotaRoot(arguments[1], arguments[2], arguments[3]));
+ printStream.println("Quota Root : " + quotaProbe.getQuotaRoot(arguments[1], arguments[2], arguments[3]));
break;
case GETMAXSTORAGEQUOTA:
- System.out.println("Storage space allowed for Quota Root "
+ printStream.println("Storage space allowed for Quota Root "
+ arguments[1]
+ " : "
+ formatStorageValue(quotaProbe.getMaxStorage(arguments[1])));
break;
case GETMAXMESSAGECOUNTQUOTA:
- System.out.println("MailboxMessage count allowed for Quota Root " + arguments[1] + " : " + formatMessageValue(quotaProbe.getMaxMessageCount(arguments[1])));
+ printStream.println("MailboxMessage count allowed for Quota Root " + arguments[1] + " : " + formatMessageValue(quotaProbe.getMaxMessageCount(arguments[1])));
break;
case SETMAXSTORAGEQUOTA:
quotaProbe.setMaxStorage(arguments[1], ValueWithUnit.parse(arguments[2]).getConvertedValue());
@@ -279,10 +290,10 @@ public class ServerCmd {
quotaProbe.setDefaultMaxMessageCount(Long.parseLong(arguments[1]));
break;
case GETDEFAULTMAXSTORAGEQUOTA:
- System.out.println("Default Maximum Storage Quota : " + formatStorageValue(quotaProbe.getDefaultMaxStorage()));
+ printStream.println("Default Maximum Storage Quota : " + formatStorageValue(quotaProbe.getDefaultMaxStorage()));
break;
case GETDEFAULTMAXMESSAGECOUNTQUOTA:
- System.out.println("Default Maximum message count Quota : " + formatMessageValue(quotaProbe.getDefaultMaxMessageCount()));
+ printStream.println("Default Maximum message count Quota : " + formatMessageValue(quotaProbe.getDefaultMaxMessageCount()));
break;
case REINDEXMAILBOX:
mailboxProbe.reIndexMailbox(arguments[1], arguments[2], arguments[3]);
@@ -297,11 +308,11 @@ public class ServerCmd {
sieveProbe.setSieveQuota(arguments[1], ValueWithUnit.parse(arguments[2]).getConvertedValue());
break;
case GETSIEVEQUOTA:
- System.out.println("Storage space allowed for Sieve scripts by default : "
+ printStream.println("Storage space allowed for Sieve scripts by default : "
+ formatStorageValue(sieveProbe.getSieveQuota()));
break;
case GETSIEVEUSERQUOTA:
- System.out.println("Storage space allowed for "
+ printStream.println("Storage space allowed for "
+ arguments[1]
+ " Sieve scripts : "
+ formatStorageValue(sieveProbe.getSieveQuota(arguments[1])));
@@ -327,15 +338,15 @@ public class ServerCmd {
}
}
- private void printStorageQuota(String quotaRootString, SerializableQuota quota) {
- System.out.println(String.format("Storage quota for %s is : %s / %s",
+ private void printStorageQuota(String quotaRootString, SerializableQuota quota, PrintStream printStream) {
+ printStream.println(String.format("Storage quota for %s is : %s / %s",
quotaRootString,
formatStorageValue(quota.getUsed()),
formatStorageValue(quota.getMax())));
}
- private void printMessageQuota(String quotaRootString, SerializableQuota quota) {
- System.out.println(String.format("MailboxMessage count quota for %s is : %s / %s",
+ private void printMessageQuota(String quotaRootString, SerializableQuota quota, PrintStream printStream) {
+ printStream.println(String.format("MailboxMessage count quota for %s is : %s / %s",
quotaRootString,
formatMessageValue(quota.getUsed()),
formatMessageValue(quota.getMax())));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org