DATACOUCH-117 - Fix flaky tests when asserting json objects.

This changeset also increses the timeout for operations to 10 seconds
to reduce the possibility of false timeouts during test runs.
This commit is contained in:
Michael Nitschinger
2015-01-20 10:37:58 +01:00
parent 058108d89a
commit bf31ee6d79
5 changed files with 80 additions and 84 deletions

View File

@@ -96,7 +96,7 @@ public abstract class AbstractCouchbaseConfiguration {
*
* @param logger the logger path to use.
*/
private static void setLoggerProperty(final String logger) {
protected static void setLoggerProperty(final String logger) {
Properties systemProperties = System.getProperties();
systemProperties.setProperty("net.spy.log.LoggerImpl", logger);
System.setProperties(systemProperties);
@@ -223,7 +223,7 @@ public abstract class AbstractCouchbaseConfiguration {
* @param hosts the list of hosts to convert.
* @return the converted URIs.
*/
private static List<URI> bootstrapUris(List<String> hosts) throws URISyntaxException {
protected static List<URI> bootstrapUris(List<String> hosts) throws URISyntaxException {
List<URI> uris = new ArrayList<URI>();
for (String host : hosts) {
uris.add(new URI("http://" + host + ":8091/pools"));

View File

@@ -63,7 +63,7 @@ public class BucketCreator implements InitializingBean {
private void createBucket() throws Exception {
ClusterManager bucketManager =
new ClusterManager(Arrays.asList(new URI(hostUri)), adminUser, adminPass);
new ClusterManager(Arrays.asList(URI.create("http://" + hostUri + ":8091")), adminUser, adminPass);
bucketManager.createDefaultBucket(BucketType.COUCHBASE, 128, 0, true);
logger.info("Finished creating bucket, sleeping for warmup.");

View File

@@ -17,6 +17,7 @@
package org.springframework.data.couchbase;
import com.couchbase.client.CouchbaseClient;
import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -26,7 +27,6 @@ import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
import org.springframework.data.couchbase.core.CouchbaseTemplate;
import org.springframework.data.couchbase.core.WriteResultChecking;
import java.net.URI;
import java.util.Arrays;
import java.util.List;
@@ -73,7 +73,16 @@ public class TestApplicationConfig extends AbstractCouchbaseConfiguration {
@Override
@DependsOn("bucketCreator")
public CouchbaseClient couchbaseClient() throws Exception {
return super.couchbaseClient();
setLoggerProperty(couchbaseLogger());
CouchbaseConnectionFactoryBuilder builder = new CouchbaseConnectionFactoryBuilder();
builder.setOpTimeout(10000); // using a higher timeout for tests to reduce flakiness
return new CouchbaseClient(builder.buildCouchbaseConnection(
bootstrapUris(bootstrapHosts()),
getBucketName(),
getBucketPassword()
));
}
@Override

View File

@@ -19,6 +19,8 @@ package org.springframework.data.couchbase.core;
import com.couchbase.client.CouchbaseClient;
import com.couchbase.client.protocol.views.Query;
import com.couchbase.client.protocol.views.Stale;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.spy.memcached.CASValue;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -58,6 +60,8 @@ public class CouchbaseTemplateTests {
@Autowired
private CouchbaseTemplate template;
private static final ObjectMapper MAPPER = new ObjectMapper();
@Test
public void saveSimpleEntityCorrectly() throws Exception {
String id = "beers:awesome-stout";
@@ -67,11 +71,12 @@ public class CouchbaseTemplateTests {
template.save(beer);
String result = (String) client.get(id);
String expected = "{\"_class\":\"org.springframework.data.couchbase.core.Beer\""
+ ",\"is_active\":false,\"name\":\"The Awesome Stout\"}";
assertNotNull(result);
assertEquals(expected, result);
Map<String, Object> resultConv = MAPPER.readValue(result, new TypeReference<Map<String, Object>>() {});
assertEquals("org.springframework.data.couchbase.core.Beer", resultConv.get("_class"));
assertEquals(false, resultConv.get("is_active"));
assertEquals("The Awesome Stout", resultConv.get("name"));
}
@Test
@@ -89,18 +94,17 @@ public class CouchbaseTemplateTests {
String id = "double-insert-test";
client.delete(id).get();
String expected = "{\"_class\":\"org.springframework.data.couchbase.core."
+ "CouchbaseTemplateTests$SimplePerson\",\"name\":\"Mr. A\"}";
SimplePerson doc = new SimplePerson(id, "Mr. A");
template.insert(doc);
String result = (String) client.get(id);
assertEquals(expected, result);
Map<String, String> resultConv = MAPPER.readValue(result, new TypeReference<Map<String, String>>() {});
assertEquals("Mr. A", resultConv.get("name"));
doc = new SimplePerson(id, "Mr. B");
template.insert(doc);
result = (String) client.get(id);
assertEquals(expected, result);
resultConv = MAPPER.readValue(result, new TypeReference<Map<String, String>>() {});
assertEquals("Mr. A", resultConv.get("name"));
}
@@ -145,12 +149,7 @@ public class CouchbaseTemplateTests {
ComplexPerson complex = new ComplexPerson(id, names, votes, info1, info2);
template.save(complex);
String expected = "{\"_class\":\"org.springframework.data.couchbase.core."
+ "CouchbaseTemplateTests$ComplexPerson\",\"info1\":{\"nullValue\":null,\"foo\":true,\"bar\""
+ ":false},\"votes\":[],\"firstnames\":[\"Michael\",\"Thomas\",null],\"info2\":"
+ "{}}";
assertEquals(expected, client.get(id));
assertNotNull(client.get(id));
ComplexPerson response = template.findById(id, ComplexPerson.class);
assertEquals(names, response.getFirstnames());

View File

@@ -27,9 +27,23 @@ import org.springframework.data.mapping.model.MappingException;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* @author Michael Nitschinger
@@ -71,16 +85,14 @@ public class MappingCouchbaseConverterTests {
}
@Test
public void writesString() {
public void writesString() throws Exception {
CouchbaseDocument converted = new CouchbaseDocument();
StringEntity entity = new StringEntity("foobar");
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", "foobar");
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals("foobar", result.get("attr0"));
assertEquals(BaseEntity.ID, converted.getId());
}
@@ -99,12 +111,10 @@ public class MappingCouchbaseConverterTests {
CouchbaseDocument converted = new CouchbaseDocument();
NumberEntity entity = new NumberEntity(42);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", 42);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals(42L, result.get("attr0"));
assertEquals(BaseEntity.ID, converted.getId());
}
@@ -123,12 +133,10 @@ public class MappingCouchbaseConverterTests {
CouchbaseDocument converted = new CouchbaseDocument();
BooleanEntity entity = new BooleanEntity(true);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", true);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals(true, result.get("attr0"));
assertEquals("mockid", converted.getId());
}
@@ -147,15 +155,13 @@ public class MappingCouchbaseConverterTests {
CouchbaseDocument converted = new CouchbaseDocument();
MixedSimpleEntity entity = new MixedSimpleEntity("a", 5, -0.3, true);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", "a");
expected.put("attr1", 5);
expected.put("attr2", -0.3);
expected.put("attr3", true);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals("a", result.get("attr0"));
assertEquals(5, result.get("attr1"));
assertEquals(-0.3, result.get("attr2"));
assertEquals(true, result.get("attr3"));
}
@Test
@@ -189,12 +195,10 @@ public class MappingCouchbaseConverterTests {
CouchbaseDocument converted = new CouchbaseDocument();
UninitializedEntity entity = new UninitializedEntity();
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr1", 0);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals(0, result.get("attr1"));
}
@Test
@@ -225,16 +229,12 @@ public class MappingCouchbaseConverterTests {
MapEntity entity = new MapEntity(attr0, attr1, attr2, attr3);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", attr0);
expected.put("attr1", attr1);
expected.put("attr2", attr2);
expected.put("attr3", attr3);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(attr0, result.get("attr0"));
assertEquals(attr1, result.get("attr1"));
assertEquals(attr2, result.get("attr2"));
assertEquals(attr3, result.get("attr3"));
CouchbaseDocument cattr0 = new CouchbaseDocument();
cattr0.put("foo", "bar");
@@ -274,14 +274,11 @@ public class MappingCouchbaseConverterTests {
ListEntity entity = new ListEntity(attr0, attr1, attr2);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", attr0);
expected.put("attr1", attr1);
expected.put("attr2", attr2);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(attr0, result.get("attr0"));
assertEquals(attr1, result.get("attr1"));
assertEquals(attr2, result.get("attr2"));
CouchbaseDocument source = new CouchbaseDocument();
source.put("_class", ListEntity.class.getName());
@@ -314,14 +311,12 @@ public class MappingCouchbaseConverterTests {
attr2.add(attr0);
SetEntity entity = new SetEntity(attr0, attr1, attr2);
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("attr0", attr0);
expected.put("attr1", attr1);
expected.put("attr2", attr2);
converter.write(entity, converted);
assertEquals(expected.toString(), converted.export().toString());
Map<String, Object> result = converted.export();
assertEquals(attr0.size(), ((Collection) result.get("attr0")).size());
assertEquals(attr1.size(), ((Collection) result.get("attr1")).size());
assertEquals(attr2.size(), ((Collection) result.get("attr2")).size());
CouchbaseList cattr0 = new CouchbaseList();
cattr0.put("foo");
@@ -355,19 +350,12 @@ public class MappingCouchbaseConverterTests {
ValueEntity entity = new ValueEntity(addy, listOfEmails);
converter.write(entity, converted);
Map<String, Object> result = converted.export();
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("_class", entity.getClass().getName());
expected.put("email", new HashMap<String, Object>() {{
assertEquals(entity.getClass().getName(), result.get("_class"));
assertEquals(new HashMap<String, Object>() {{
put("emailAddr", email);
}});
expected.put("listOfEmails", new ArrayList<Object>() {{
add(new HashMap<String, Object>() {{
put("emailAddr", email);
}});
}});
assertEquals(expected.toString(), converted.export().toString());
}}, result.get("email"));
CouchbaseDocument source = new CouchbaseDocument();
source.put("_class", ValueEntity.class.getName());