JAMES-2004 Adding tests for default configuration
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/50c481d6 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/50c481d6 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/50c481d6 Branch: refs/heads/master Commit: 50c481d60ec08758af630fa881c7f52de20158b1 Parents: e0f2a4c Author: benwa <btell...@linagora.com> Authored: Tue Apr 18 15:07:20 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Fri Apr 21 08:29:34 2017 +0700 ---------------------------------------------------------------------- .../james/DefaultCassandraJamesServerTest.java | 59 +++++++++ .../java/org/apache/james/GuiceJamesServer.java | 7 ++ .../james/utils/FailingPropertiesProvider.java | 41 +++++++ .../james/DefaultMemoryJamesServerTest.java | 59 +++++++++ .../org/apache/james/GuiceJamesServerTest.java | 121 +++++++++++++++++++ 5 files changed, 287 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/50c481d6/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java new file mode 100644 index 0000000..4c41e12 --- /dev/null +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java @@ -0,0 +1,59 @@ +/**************************************************************** + * 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; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.utils.ConfigurationProvider; +import org.apache.james.utils.FailingPropertiesProvider; +import org.apache.james.utils.PropertiesProvider; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +public class DefaultCassandraJamesServerTest { + + @Rule + public CassandraJmapTestRule cassandraJmap = CassandraJmapTestRule.defaultTestRule(); + + private GuiceJamesServer guiceJamesServer; + + @Before + public void setUp() { + guiceJamesServer = cassandraJmap.jmapServer() + .overrideWith(binder -> binder.bind(PropertiesProvider.class).to(FailingPropertiesProvider.class)) + .overrideWith(binder -> binder.bind(ConfigurationProvider.class).toInstance(s -> new HierarchicalConfiguration())); + } + + @After + public void clean() { + guiceJamesServer.stop(); + } + + @Test + public void memoryJamesServerShouldStartWithNoConfigurationFile() throws Exception { + guiceJamesServer.start(); + + assertThat(guiceJamesServer.isStarted()).isTrue(); + } + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/50c481d6/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java b/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java index b9a5bd0..075f5c4 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/GuiceJamesServer.java @@ -42,6 +42,7 @@ public class GuiceJamesServer { protected final Module module; private Stager<PreDestroy> preDestroy; private GuiceProbeProvider guiceProbeProvider; + private boolean isStarted = false; public GuiceJamesServer() { this(Modules.combine( @@ -66,14 +67,20 @@ public class GuiceJamesServer { preDestroy = injector.getInstance(Key.get(new TypeLiteral<Stager<PreDestroy>>() {})); injector.getInstance(ConfigurationsPerformer.class).initModules(); guiceProbeProvider = injector.getInstance(GuiceProbeProvider.class); + isStarted = true; } public void stop() { if (preDestroy != null) { preDestroy.stage(); + isStarted = false; } } + public boolean isStarted() { + return isStarted; + } + public <T extends GuiceProbe> T getProbe(Class<T> probe) { return guiceProbeProvider.getProbe(probe); } http://git-wip-us.apache.org/repos/asf/james-project/blob/50c481d6/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java new file mode 100644 index 0000000..c134952 --- /dev/null +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java @@ -0,0 +1,41 @@ +/**************************************************************** + * 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.utils; + +import java.io.FileNotFoundException; + +import javax.inject.Inject; + +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.james.filesystem.api.FileSystem; + +public class FailingPropertiesProvider extends PropertiesProvider { + + @Inject + public FailingPropertiesProvider(FileSystem fileSystem) { + super(fileSystem); + } + + @Override + public PropertiesConfiguration getConfiguration(String fileName) throws FileNotFoundException, ConfigurationException { + throw new FileNotFoundException(); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/50c481d6/server/container/guice/memory-guice/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java new file mode 100644 index 0000000..ec90ac2 --- /dev/null +++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java @@ -0,0 +1,59 @@ +/**************************************************************** + * 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; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.utils.ConfigurationProvider; +import org.apache.james.utils.FailingPropertiesProvider; +import org.apache.james.utils.PropertiesProvider; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +public class DefaultMemoryJamesServerTest { + + @Rule + public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule(); + + private GuiceJamesServer guiceJamesServer; + + @Before + public void setUp() { + guiceJamesServer = memoryJmap.jmapServer() + .overrideWith(binder -> binder.bind(PropertiesProvider.class).to(FailingPropertiesProvider.class)) + .overrideWith(binder -> binder.bind(ConfigurationProvider.class).toInstance(s -> new HierarchicalConfiguration())); + } + + @After + public void clean() { + guiceJamesServer.stop(); + } + + @Test + public void memoryJamesServerShouldStartWithNoConfigurationFile() throws Exception { + guiceJamesServer.start(); + + assertThat(guiceJamesServer.isStarted()).isTrue(); + } + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/50c481d6/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java new file mode 100644 index 0000000..59327bb --- /dev/null +++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java @@ -0,0 +1,121 @@ +package org.apache.james; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.apache.james.lifecycle.api.Configurable; +import org.apache.james.utils.ConfigurationPerformer; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.google.common.collect.ImmutableList; +import com.google.inject.multibindings.Multibinder; + +public class GuiceJamesServerTest { + + public static final ConfigurationPerformer THROWING_CONFIGURATION_PERFORMER = new ConfigurationPerformer() { + @Override + public void initModule() { + throw new RuntimeException(); + } + + @Override + public List<Class<? extends Configurable>> forClasses() { + return ImmutableList.of(); + } + }; + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Rule + public MemoryJmapTestRule memoryJmapTestRule = new MemoryJmapTestRule(); + private GuiceJamesServer guiceJamesServer; + + + @Before + public void setUp() { + guiceJamesServer = memoryJmapTestRule.jmapServer(); + } + + @After + public void tearDown() { + guiceJamesServer.stop(); + } + + @Test + public void serverShouldBeStartedAfterCallingStart() throws Exception { + guiceJamesServer.start(); + + assertThat(guiceJamesServer.isStarted()).isTrue(); + } + + @Test + public void serverShouldNotBeStartedAfterCallingStop() throws Exception { + guiceJamesServer.start(); + + guiceJamesServer.stop(); + + assertThat(guiceJamesServer.isStarted()).isFalse(); + } + + @Test + public void serverShouldNotBeStartedBeforeCallingStart() throws Exception { + assertThat(guiceJamesServer.isStarted()).isFalse(); + } + + @Test + public void serverShouldPropagateUncaughtConfigurationException() throws Exception { + expectedException.expect(RuntimeException.class); + + GuiceJamesServer overWrittenServer = null; + + try { + overWrittenServer = this.guiceJamesServer.overrideWith( + binder -> Multibinder.newSetBinder(binder, ConfigurationPerformer.class).addBinding().toInstance( + new ConfigurationPerformer() { + @Override + public void initModule() { + throw new RuntimeException(); + } + + @Override + public List<Class<? extends Configurable>> forClasses() { + return ImmutableList.of(); + } + } + ) + ); + overWrittenServer.start(); + } finally { + if (overWrittenServer != null) { + overWrittenServer.stop(); + } + } + } + + @Test + public void serverShouldNotBeStartedOnUncaughtException() throws Exception { + GuiceJamesServer overWrittenServer = null; + + try { + overWrittenServer = this.guiceJamesServer.overrideWith( + binder -> Multibinder.newSetBinder(binder, ConfigurationPerformer.class) + .addBinding() + .toInstance(THROWING_CONFIGURATION_PERFORMER)); + + try { + overWrittenServer.start(); + } catch (RuntimeException e) {} + + assertThat(overWrittenServer.isStarted()).isFalse(); + } finally { + if (overWrittenServer != null) { + overWrittenServer.stop(); + } + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org