From bd4f963d700cb7baeea68b26b6438e48d79c2703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Basl=C3=A9?= Date: Mon, 29 Jun 2015 18:23:04 +0200 Subject: [PATCH] better separate integration/unit testing + fix template constructor order --- .../IntegrationTestApplicationConfig.java} | 2 +- ...uchbaseTemplateParserIntegrationTests.java | 75 +++++++++++++++++++ .../core/CouchbaseTemplateTests.java | 4 +- .../couchbase/monitor/ClientInfoTests.java | 59 +++++++++++++++ .../couchbase/monitor/ClusterInfoTests.java | 62 +++++++++++++++ .../couchbase-multi-bucket-bean.xml | 17 +++++ .../couchbase-template-bean.xml | 14 ++++ ...template-with-translation-service-bean.xml | 16 ++++ .../couchbase/core/CouchbaseTemplate.java | 4 +- .../couchbase/UnitTestApplicationConfig.java | 67 +++++++++++++++++ .../core/mapping/CustomConvertersTests.java | 4 +- .../MappingCouchbaseConverterTests.java | 4 +- 12 files changed, 319 insertions(+), 9 deletions(-) rename src/{test/java/org/springframework/data/couchbase/TestApplicationConfig.java => integration/java/org/springframework/data/couchbase/IntegrationTestApplicationConfig.java} (95%) create mode 100644 src/integration/java/org/springframework/data/couchbase/config/CouchbaseTemplateParserIntegrationTests.java create mode 100644 src/integration/java/org/springframework/data/couchbase/monitor/ClientInfoTests.java create mode 100644 src/integration/java/org/springframework/data/couchbase/monitor/ClusterInfoTests.java create mode 100644 src/integration/resources/configurations/couchbase-multi-bucket-bean.xml create mode 100644 src/integration/resources/configurations/couchbase-template-bean.xml create mode 100644 src/integration/resources/configurations/couchbase-template-with-translation-service-bean.xml create mode 100644 src/test/java/org/springframework/data/couchbase/UnitTestApplicationConfig.java diff --git a/src/test/java/org/springframework/data/couchbase/TestApplicationConfig.java b/src/integration/java/org/springframework/data/couchbase/IntegrationTestApplicationConfig.java similarity index 95% rename from src/test/java/org/springframework/data/couchbase/TestApplicationConfig.java rename to src/integration/java/org/springframework/data/couchbase/IntegrationTestApplicationConfig.java index b524936f..f9d8e863 100644 --- a/src/test/java/org/springframework/data/couchbase/TestApplicationConfig.java +++ b/src/integration/java/org/springframework/data/couchbase/IntegrationTestApplicationConfig.java @@ -15,7 +15,7 @@ import org.springframework.data.couchbase.core.CouchbaseTemplate; import org.springframework.data.couchbase.core.WriteResultChecking; @Configuration -public class TestApplicationConfig extends AbstractCouchbaseConfiguration { +public class IntegrationTestApplicationConfig extends AbstractCouchbaseConfiguration { @Autowired private Environment springEnv; diff --git a/src/integration/java/org/springframework/data/couchbase/config/CouchbaseTemplateParserIntegrationTests.java b/src/integration/java/org/springframework/data/couchbase/config/CouchbaseTemplateParserIntegrationTests.java new file mode 100644 index 00000000..c235f80a --- /dev/null +++ b/src/integration/java/org/springframework/data/couchbase/config/CouchbaseTemplateParserIntegrationTests.java @@ -0,0 +1,75 @@ +/* + * Copyright 2013 the original author or authors. + * + * Licensed 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.springframework.data.couchbase.config; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionReader; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; +import org.springframework.core.io.ClassPathResource; + +/** + * @author Michael Nitschinger + */ +public class CouchbaseTemplateParserIntegrationTests { + + DefaultListableBeanFactory factory; + BeanDefinitionReader reader; + + @Before + public void setUp() { + factory = new DefaultListableBeanFactory(); + reader = new XmlBeanDefinitionReader(factory); + } + + @Test + public void readsCouchbaseTemplateAttributesCorrectly() { + reader.loadBeanDefinitions(new ClassPathResource("configurations/couchbase-template-bean.xml")); + + BeanDefinition definition = factory.getBeanDefinition("couchbaseTemplate"); + assertEquals(1, definition.getConstructorArgumentValues().getArgumentCount()); + + factory.getBean("couchbaseTemplate"); + } + + @Test + public void readsCouchbaseTemplateWithTranslationServiceAttributesCorrectly() { + reader.loadBeanDefinitions(new ClassPathResource("configurations/couchbase-template-with-translation-service-bean.xml")); + + BeanDefinition definition = factory.getBeanDefinition("couchbaseTemplate"); + assertEquals(2, definition.getConstructorArgumentValues().getArgumentCount()); + + factory.getBean("couchbaseTemplate"); + } + + /** + * Test case for DATACOUCH-47. + */ + @Test + public void allowsMultipleBuckets() { + reader.loadBeanDefinitions(new ClassPathResource("configurations/couchbase-multi-bucket-bean.xml")); + + factory.getBean("cb-template-first"); + factory.getBean("cb-template-second"); + } + +} diff --git a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java index 67624d4f..6975221c 100644 --- a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java +++ b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java @@ -47,7 +47,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.OptimisticLockingFailureException; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; -import org.springframework.data.couchbase.TestApplicationConfig; +import org.springframework.data.couchbase.IntegrationTestApplicationConfig; import org.springframework.data.couchbase.core.mapping.Document; import org.springframework.data.couchbase.core.mapping.Field; import org.springframework.test.context.ContextConfiguration; @@ -58,7 +58,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Michael Nitschinger */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = TestApplicationConfig.class) +@ContextConfiguration(classes = IntegrationTestApplicationConfig.class) @TestExecutionListeners(CouchbaseTemplateViewListener.class) public class CouchbaseTemplateTests { diff --git a/src/integration/java/org/springframework/data/couchbase/monitor/ClientInfoTests.java b/src/integration/java/org/springframework/data/couchbase/monitor/ClientInfoTests.java new file mode 100644 index 00000000..62d71e0d --- /dev/null +++ b/src/integration/java/org/springframework/data/couchbase/monitor/ClientInfoTests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2013 the original author or authors. + * + * Licensed 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.springframework.data.couchbase.monitor; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.core.IsNot.not; + +import com.couchbase.client.java.Bucket; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.couchbase.IntegrationTestApplicationConfig; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @author Michael Nitschinger + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = IntegrationTestApplicationConfig.class) +public class ClientInfoTests { + + /** + * Contains a reference to the actual CouchbaseClient. + */ + @Autowired + private Bucket client; + + private ClientInfo ci; + + @Before + public void setup() throws Exception { + ci = new ClientInfo(client); + } + + @Test + public void hostNames() { + String hostnames = ci.getHostNames(); + assertThat(hostnames, not(isEmptyString())); + } + +} diff --git a/src/integration/java/org/springframework/data/couchbase/monitor/ClusterInfoTests.java b/src/integration/java/org/springframework/data/couchbase/monitor/ClusterInfoTests.java new file mode 100644 index 00000000..63c5441c --- /dev/null +++ b/src/integration/java/org/springframework/data/couchbase/monitor/ClusterInfoTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2013 the original author or authors. + * + * Licensed 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.springframework.data.couchbase.monitor; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; + +import com.couchbase.client.java.Bucket; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.couchbase.IntegrationTestApplicationConfig; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @author Michael Nitschinger + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = IntegrationTestApplicationConfig.class) +public class ClusterInfoTests { + + /** + * Contains a reference to the actual CouchbaseClient. + */ + @Autowired + private Bucket client; + + private ClusterInfo ci; + + @Before + public void setup() throws Exception { + ci = new ClusterInfo(client); + } + + @Test + public void totalDiskAssigned() { + assertThat(ci.getTotalDiskAssigned(), greaterThan(0L)); + } + + @Test + public void totalRAMUsed() { + assertThat(ci.getTotalRAMUsed(), greaterThan(0L)); + } + +} diff --git a/src/integration/resources/configurations/couchbase-multi-bucket-bean.xml b/src/integration/resources/configurations/couchbase-multi-bucket-bean.xml new file mode 100644 index 00000000..1a480dd1 --- /dev/null +++ b/src/integration/resources/configurations/couchbase-multi-bucket-bean.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/integration/resources/configurations/couchbase-template-bean.xml b/src/integration/resources/configurations/couchbase-template-bean.xml new file mode 100644 index 00000000..9b0ada0b --- /dev/null +++ b/src/integration/resources/configurations/couchbase-template-bean.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/integration/resources/configurations/couchbase-template-with-translation-service-bean.xml b/src/integration/resources/configurations/couchbase-template-with-translation-service-bean.xml new file mode 100644 index 00000000..e2f31a1f --- /dev/null +++ b/src/integration/resources/configurations/couchbase-template-with-translation-service-bean.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java b/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java index 8f31c1fa..ac279d5a 100644 --- a/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java +++ b/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java @@ -92,8 +92,8 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationEventP this(client, null, null); } - public CouchbaseTemplate(final Bucket client, final CouchbaseConverter converter) { - this(client, converter, null); + public CouchbaseTemplate(final Bucket client, final TranslationService translationService) { + this(client, null, translationService); } public CouchbaseTemplate(final Bucket client, final CouchbaseConverter converter, diff --git a/src/test/java/org/springframework/data/couchbase/UnitTestApplicationConfig.java b/src/test/java/org/springframework/data/couchbase/UnitTestApplicationConfig.java new file mode 100644 index 00000000..62be5f77 --- /dev/null +++ b/src/test/java/org/springframework/data/couchbase/UnitTestApplicationConfig.java @@ -0,0 +1,67 @@ +package org.springframework.data.couchbase; + +import java.util.Collections; +import java.util.List; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseBucket; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; +import org.mockito.Mock; +import org.mockito.Mockito; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration; +import org.springframework.data.couchbase.core.CouchbaseTemplate; +import org.springframework.data.couchbase.core.WriteResultChecking; + +@Configuration +public class UnitTestApplicationConfig extends AbstractCouchbaseConfiguration { + + @Bean + public String couchbaseAdminUser() { + return "someLogin"; + } + + @Bean + public String couchbaseAdminPassword() { + return "somePassword"; + } + + @Override + protected List getBootstrapHosts() { + return Collections.singletonList("192.1.2.3"); + } + + @Override + protected String getBucketName() { + return "someBucket"; + } + + @Override + protected String getBucketPassword() { + return "someBucketPassword"; + } + + @Override + public Cluster couchbaseCluster() throws Exception { + return Mockito.mock(CouchbaseCluster.class); + } + + @Override + public Bucket couchbaseClient() throws Exception { + return Mockito.mock(CouchbaseBucket.class); + } + + @Override + public CouchbaseTemplate couchbaseTemplate() throws Exception { + CouchbaseTemplate template = super.couchbaseTemplate(); + template.setWriteResultChecking(WriteResultChecking.LOG); + return template; + } +} diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/CustomConvertersTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/CustomConvertersTests.java index 1fb609fb..58c68d8a 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/CustomConvertersTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/CustomConvertersTests.java @@ -34,7 +34,7 @@ import org.springframework.core.convert.converter.Converter; import org.springframework.data.annotation.Id; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.WritingConverter; -import org.springframework.data.couchbase.TestApplicationConfig; +import org.springframework.data.couchbase.UnitTestApplicationConfig; import org.springframework.data.couchbase.core.convert.CustomConversions; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; import org.springframework.test.context.ContextConfiguration; @@ -46,7 +46,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Michael Nitschinger */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = TestApplicationConfig.class) +@ContextConfiguration(classes = UnitTestApplicationConfig.class) public class CustomConvertersTests { @Autowired diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index ea9a08ee..cf392a7e 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -42,7 +42,7 @@ import org.springframework.core.convert.converter.Converter; import org.springframework.data.annotation.Id; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.WritingConverter; -import org.springframework.data.couchbase.TestApplicationConfig; +import org.springframework.data.couchbase.UnitTestApplicationConfig; import org.springframework.data.couchbase.core.convert.CustomConversions; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; import org.springframework.data.mapping.model.MappingException; @@ -53,7 +53,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Michael Nitschinger */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = TestApplicationConfig.class) +@ContextConfiguration(classes = UnitTestApplicationConfig.class) public class MappingCouchbaseConverterTests { @Autowired