SGF-864 - Fix unreliable tests.

This commit is contained in:
John Blum
2019-07-17 02:22:07 -07:00
parent 028977adc0
commit d84234b5b8
6 changed files with 174 additions and 52 deletions

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire;
import static org.junit.Assert.assertEquals;
@@ -28,10 +27,6 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.gemstone.gemfire.cache.DataPolicy;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.Scope;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
@@ -40,6 +35,11 @@ import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import com.gemstone.gemfire.cache.DataPolicy;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.Scope;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.context.ConfigurableApplicationContext;
@@ -81,8 +81,10 @@ public class CacheClusterConfigurationIntegrationTest {
@Rule
public TestRule watchman = new TestWatcher() {
@Override
protected void failed(Throwable throwable, Description description) {
System.err.println(String.format("Test '%1$s' failed...", description.getDisplayName()));
System.err.println(ThrowableUtils.toString(throwable));
System.err.println("Locator process log file contents were...");
@@ -91,6 +93,7 @@ public class CacheClusterConfigurationIntegrationTest {
@Override
protected void finished(Description description) {
if (Boolean.valueOf(System.getProperty("spring.gemfire.fork.clean", Boolean.TRUE.toString()))) {
try {
FileUtils.write(new File(locatorWorkingDirectory.getParent(),
@@ -104,7 +107,9 @@ public class CacheClusterConfigurationIntegrationTest {
}
private String getLocatorProcessOutput(Description description) {
try {
String locatorProcessOutputString = StringUtils.collectionToDelimitedString(locatorProcessOutput,
FileUtils.LINE_SEPARATOR, String.format("[%1$s] - ", description.getMethodName()), "");
@@ -121,6 +126,7 @@ public class CacheClusterConfigurationIntegrationTest {
@BeforeClass
public static void testSuiteSetup() throws IOException {
String locatorName = "ClusterConfigLocator";
locatorWorkingDirectory = new File(System.getProperty("user.dir"), locatorName.toLowerCase());
@@ -133,7 +139,7 @@ public class CacheClusterConfigurationIntegrationTest {
arguments.add("-Dgemfire.name=" + locatorName);
arguments.add("-Dgemfire.mcast-port=0");
arguments.add("-Dgemfire.log-level=error");
arguments.add("-Dgemfire.log-level=info");
arguments.add("-Dspring.gemfire.enable-cluster-configuration=true");
arguments.add("-Dspring.gemfire.load-cluster-configuration=true");
@@ -141,7 +147,9 @@ public class CacheClusterConfigurationIntegrationTest {
arguments.toArray(new String[arguments.size()]));
locatorProcess.register(new ProcessInputStreamListener() {
@Override public void onInput(final String input) {
@Override
public void onInput(final String input) {
locatorProcessOutput.add(input);
}
});
@@ -154,9 +162,13 @@ public class CacheClusterConfigurationIntegrationTest {
}
private static void waitForLocatorStart(final long milliseconds) {
ThreadUtils.timedWait(milliseconds, 500, new ThreadUtils.WaitCondition() {
File pidControlFile = new File(locatorWorkingDirectory, LocatorProcess.getLocatorProcessControlFilename());
@Override public boolean waiting() {
@Override
public boolean waiting() {
return !pidControlFile.isFile();
}
});
@@ -164,7 +176,9 @@ public class CacheClusterConfigurationIntegrationTest {
@AfterClass
public static void testSuiteTearDown() {
locatorProcess.shutdown();
if (Boolean.valueOf(System.getProperty("spring.gemfire.fork.clean", Boolean.TRUE.toString()))) {
FileSystemUtils.deleteRecursively(locatorWorkingDirectory);
}
@@ -175,22 +189,28 @@ public class CacheClusterConfigurationIntegrationTest {
}
protected Region assertRegion(final Region actualRegion, final String expectedRegionName, final String expectedRegionFullPath) {
assertNotNull(String.format("The '%1$s' was not properly configured and initialized!", expectedRegionName), actualRegion);
assertEquals(expectedRegionName, actualRegion.getName());
assertEquals(expectedRegionFullPath, actualRegion.getFullPath());
return actualRegion;
}
protected Region assertRegionAttributes(final Region actualRegion, final DataPolicy expectedDataPolicy, final Scope expectedScope) {
assertNotNull(actualRegion);
assertNotNull(actualRegion.getAttributes());
assertEquals(expectedDataPolicy, actualRegion.getAttributes().getDataPolicy());
assertEquals(expectedScope, actualRegion.getAttributes().getScope());
return actualRegion;
}
protected String getLocation(final String configLocation) {
String baseLocation = getClass().getPackage().getName().replace('.', File.separatorChar);
return baseLocation.concat(File.separator).concat(configLocation);
}
@@ -199,8 +219,11 @@ public class CacheClusterConfigurationIntegrationTest {
}
protected ConfigurableApplicationContext newApplicationContext(String... configLocations) {
ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations);
applicationContext.registerShutdownHook();
return applicationContext;
}
@@ -208,8 +231,9 @@ public class CacheClusterConfigurationIntegrationTest {
@Ignore
// TODO re-enable the test once the GemFire Cluster Configuration Service race condition has been properly fixed!
public void clusterConfigurationTest() {
ConfigurableApplicationContext applicationContext = newApplicationContext(
getLocation("cacheUsingClusterConfigurationIntegrationTest.xml"));
ConfigurableApplicationContext applicationContext =
newApplicationContext(getLocation("cacheUsingClusterConfigurationIntegrationTest.xml"));
assertRegionAttributes(assertRegion(getRegion(applicationContext, "ClusterConfigRegion"), "ClusterConfigRegion"),
DataPolicy.PARTITION, Scope.DISTRIBUTED_NO_ACK);
@@ -229,7 +253,9 @@ public class CacheClusterConfigurationIntegrationTest {
@Test
public void localConfigurationTest() {
try {
newApplicationContext(getLocation("cacheUsingLocalOnlyConfigurationIntegrationTest.xml"));
fail("Loading the 'cacheUsingLocalOnlyConfigurationIntegrationTest.xml' Spring ApplicationContext"

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.snapshot;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -26,12 +25,17 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import javax.annotation.Resource;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.snapshot.SnapshotFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.gemfire.repository.sample.Person;
@@ -46,9 +50,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.snapshot.SnapshotFilter;
/**
* The SnapshotApplicationEventTriggeredImportsExportsIntegrationTest class is a test suite of test cases testing
* the effects of the SnapshotServiceFactoryBean using Spring ApplicationEvents to trigger imports and exports
@@ -93,6 +94,7 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
@BeforeClass
public static void setupBeforeClass() throws Exception {
snapshotsDirectory = new File(new File(FileSystemUtils.WORKING_DIRECTORY, "gemfire"), "snapshots");
assertThat(snapshotsDirectory.isDirectory() || snapshotsDirectory.mkdirs(), is(true));
@@ -110,6 +112,7 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
}
protected void assertPeople(Region<Long, Person> targetRegion, Person... people) {
assertThat(targetRegion.size(), is(equalTo(people.length)));
for (Person person : people) {
@@ -118,6 +121,7 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
}
protected void assertPerson(Person expectedPerson, Person actualPerson) {
assertThat(String.format("Expected (%1$s); but was (%2$s)", expectedPerson, actualPerson),
actualPerson, is(notNullValue()));
assertThat(actualPerson.getId(), is(equalTo(expectedPerson.getId())));
@@ -130,16 +134,22 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
}
protected Person put(Region<Long, Person> targetRegion, Person person) {
targetRegion.putIfAbsent(person.getId(), person);
return person;
}
protected void wait(final int seconds, final int expectedDoeSize, final int expectedEveryoneSize,
final int expectedHandySize) {
ThreadUtils.timedWait(TimeUnit.SECONDS.toMillis(seconds), 500, new ThreadUtils.WaitCondition() {
@Override public boolean waiting() {
return (doe.size() < expectedDoeSize && everyoneElse.size() < expectedEveryoneSize
&& handy.size() < expectedHandySize);
@Override
public boolean waiting() {
return doe.size() < expectedDoeSize
|| everyoneElse.size() < expectedEveryoneSize
|| handy.size() < expectedHandySize;
}
});
}
@@ -147,6 +157,7 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
@Test
@SuppressWarnings("unchecked")
public void exportsTriggeringImportsOnSnapshotApplicationEvents() {
Person jonDoe = put(people, createPerson("Jon", "Doe"));
Person janeDoe = put(people, createPerson("Jane", "Doe"));
Person jackBlack = put(people, createPerson("Jack", "Black"));
@@ -171,7 +182,8 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
Person jillHill = put(people, createPerson("Jill", "Hill"));
eventPublisher.publishEvent(event);
wait(10, 5, 4, 3);
wait(5, 5, 4, 3);
assertPeople(doe, jonDoe, janeDoe, cookieDoe, pieDoe, sourDoe);
assertPeople(everyoneElse, jackBlack, joeDirt, jackHill, jillHill);
@@ -195,12 +207,16 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
private final String lastName;
public LastNameSnapshotFilter(String lastName) {
Assert.hasText(lastName, "'lastName' must be specified");
this.lastName = lastName;
}
protected String getLastName() {
Assert.state(StringUtils.hasText(lastName), "'lastName' was not properly initialized");
return lastName;
}
@@ -231,11 +247,13 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
@Autowired
private ApplicationEventPublisher eventPublisher;
private static final Map<File, Long> snapshotFileLastModifiedMap = new ConcurrentHashMap<File, Long>(2);
private static final Map<File, Long> snapshotFileLastModifiedMap =
new ConcurrentHashMap<File, Long>(2);
@Scheduled(fixedDelay = 1000)
@SuppressWarnings("unchecked")
public void processSnapshots() {
boolean triggerEvent = false;
for (File snapshotFile : nullSafeArray(snapshotsDirectory.listFiles(FileSystemUtils.FileOnlyFilter.INSTANCE))) {
@@ -248,10 +266,11 @@ public class SnapshotApplicationEventTriggeredImportsExportsIntegrationTest {
}
protected File[] nullSafeArray(File... files) {
return (files != null ? files : new File[0]);
return files != null ? files : new File[0];
}
protected boolean isUnprocessedSnapshotFile(File snapshotFile) {
Long lastModified = snapshotFile.lastModified();
Long previousLastModified = snapshotFileLastModifiedMap.get(snapshotFile);

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.snapshot;
import static com.gemstone.gemfire.cache.snapshot.SnapshotOptions.SnapshotFormat;
@@ -48,18 +47,12 @@ import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.logging.Log;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Matchers;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.gemfire.snapshot.event.ExportSnapshotApplicationEvent;
import org.springframework.data.gemfire.snapshot.event.ImportSnapshotApplicationEvent;
import org.springframework.data.gemfire.snapshot.event.SnapshotApplicationEvent;
import org.springframework.data.gemfire.test.support.FileSystemUtils;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.Region;
@@ -68,6 +61,14 @@ import com.gemstone.gemfire.cache.snapshot.RegionSnapshotService;
import com.gemstone.gemfire.cache.snapshot.SnapshotFilter;
import com.gemstone.gemfire.cache.snapshot.SnapshotOptions;
import org.apache.commons.logging.Log;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.gemfire.snapshot.event.ExportSnapshotApplicationEvent;
import org.springframework.data.gemfire.snapshot.event.ImportSnapshotApplicationEvent;
import org.springframework.data.gemfire.snapshot.event.SnapshotApplicationEvent;
import org.springframework.data.gemfire.test.support.FileSystemUtils;
/**
* The SnapshotServiceFactoryBeanTest class is a test suite of test cases testing the contract and functionality
* of the SnapshotServiceFactoryBean class.
@@ -92,10 +93,13 @@ public class SnapshotServiceFactoryBeanTest {
private SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean();
protected static File mockFile(String filename) {
File mockFile = mock(File.class, filename);
when(mockFile.isFile()).thenReturn(true);
when(mockFile.getAbsolutePath()).thenReturn(String.format("/path/to/%1$s", filename));
when(mockFile.getName()).thenReturn(filename);
return mockFile;
}
@@ -117,6 +121,7 @@ public class SnapshotServiceFactoryBeanTest {
protected <K, V> SnapshotMetadata<K, V> newSnapshotMetadata(File location, SnapshotFilter<K, V> filter,
SnapshotFormat format) {
return new SnapshotMetadata<K, V>(location, filter, format);
}
@@ -125,6 +130,7 @@ public class SnapshotServiceFactoryBeanTest {
}
protected String toPathname(String... pathElements) {
StringBuilder pathname = new StringBuilder();
for (String pathElement : pathElements) {
@@ -135,7 +141,7 @@ public class SnapshotServiceFactoryBeanTest {
}
@BeforeClass
public static void setupBeforeClass() throws Exception {
public static void setupBeforeClass() {
snapshotDat = mockFile("snapshot.dat");
}
@@ -173,12 +179,14 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void nullSafeIsFileWithFile() {
assertThat(SnapshotServiceFactoryBean.nullSafeIsFile(FileSystemUtils.JAVA_EXE),
is(FileSystemUtils.JAVA_EXE.isFile()));
}
@Test
public void nullSafeIsFileWithNonFiles() {
assertThat(SnapshotServiceFactoryBean.nullSafeIsFile(new File("/path/to/non-existing/file.ext")), is(false));
assertThat(SnapshotServiceFactoryBean.nullSafeIsFile(new File(System.getProperty("user.dir"))), is(false));
}
@@ -202,6 +210,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void setAndGetCacheSuccessfully() {
Cache mockCache = mock(Cache.class, "MockCache");
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean();
factoryBean.setCache(mockCache);
@@ -298,7 +307,9 @@ public class SnapshotServiceFactoryBeanTest {
"MockSnapshotServiceAdapter");
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override protected SnapshotServiceAdapter create() {
@Override
protected SnapshotServiceAdapter create() {
return mockSnapshotService;
}
};
@@ -316,7 +327,9 @@ public class SnapshotServiceFactoryBeanTest {
final SnapshotServiceAdapter mockSnapshotService = mock(SnapshotServiceAdapter.class, "MockSnapshotServiceAdapter");
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override protected SnapshotServiceAdapter create() {
@Override
protected SnapshotServiceAdapter create() {
return mockSnapshotService;
}
};
@@ -332,6 +345,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void createCacheSnapshotService() {
Cache mockCache = mock(Cache.class, "MockCache");
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
when(mockCache.getSnapshotService()).thenReturn(mockCacheSnapshotService);
@@ -350,6 +364,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void createRegionSnapshotService() {
Region mockRegion = mock(Region.class, "MockRegion");
RegionSnapshotService mockRegionSnapshotService = mock(RegionSnapshotService.class, "MockRegionSnapshotService");
when(mockRegion.getSnapshotService()).thenReturn(mockRegionSnapshotService);
@@ -389,7 +404,9 @@ public class SnapshotServiceFactoryBeanTest {
"MockSnapshotServiceAdapter");
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override public SnapshotServiceAdapter getObject() throws Exception {
@Override
public SnapshotServiceAdapter getObject() {
return mockSnapshotService;
}
};
@@ -403,7 +420,8 @@ public class SnapshotServiceFactoryBeanTest {
}
@Test
public void onApplicationEventWhenMatchUsingEventSnapshotMetadataPerformsExport() throws Exception {
public void onApplicationEventWhenMatchUsingEventSnapshotMetadataPerformsExport() {
Region mockRegion = mock(Region.class, "MockRegion");
SnapshotApplicationEvent mockSnapshotEvent = mock(ExportSnapshotApplicationEvent.class,
@@ -418,7 +436,9 @@ public class SnapshotServiceFactoryBeanTest {
when(mockSnapshotEvent.getSnapshotMetadata()).thenReturn(toArray(eventSnapshotMetadata));
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override public SnapshotServiceAdapter getObject() throws Exception {
@Override
public SnapshotServiceAdapter getObject() {
return mockSnapshotService;
}
};
@@ -438,7 +458,8 @@ public class SnapshotServiceFactoryBeanTest {
}
@Test
public void onApplicationEventWhenMatchUsingFactorySnapshotMetadataPerformsImport() throws Exception {
public void onApplicationEventWhenMatchUsingFactorySnapshotMetadataPerformsImport() {
SnapshotApplicationEvent mockSnapshotEvent = mock(ImportSnapshotApplicationEvent.class,
"MockImportSnapshotApplicationEvent");
@@ -451,7 +472,9 @@ public class SnapshotServiceFactoryBeanTest {
when(mockSnapshotEvent.getSnapshotMetadata()).thenReturn(null);
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override public SnapshotServiceAdapter getObject() throws Exception {
@Override
public SnapshotServiceAdapter getObject() {
return mockSnapshotService;
}
};
@@ -470,7 +493,8 @@ public class SnapshotServiceFactoryBeanTest {
}
@Test
public void onApplicationEventWhenNoMatchDoesNotPerformExport() throws Exception {
public void onApplicationEventWhenNoMatchDoesNotPerformExport() {
SnapshotApplicationEvent mockSnapshotEvent = mock(ExportSnapshotApplicationEvent.class,
"MockExportSnapshotApplicationEvent");
@@ -481,7 +505,9 @@ public class SnapshotServiceFactoryBeanTest {
final SnapshotServiceAdapter mockSnapshotService = mock(SnapshotServiceAdapter.class, "MockSnapshotServiceAdapter");
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override public SnapshotServiceAdapter getObject() throws Exception {
@Override
public SnapshotServiceAdapter getObject() {
return mockSnapshotService;
}
};
@@ -500,7 +526,8 @@ public class SnapshotServiceFactoryBeanTest {
}
@Test
public void onApplicationEventWhenNoMatchDoesNotPerformImport() throws Exception {
public void onApplicationEventWhenNoMatchDoesNotPerformImport() {
Region mockRegion = mock(Region.class, "MockRegion");
SnapshotApplicationEvent mockSnapshotEvent = mock(ImportSnapshotApplicationEvent.class,
@@ -513,7 +540,9 @@ public class SnapshotServiceFactoryBeanTest {
when(mockSnapshotEvent.getSnapshotMetadata()).thenReturn(null);
SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean() {
@Override public SnapshotServiceAdapter getObject() throws Exception {
@Override
public SnapshotServiceAdapter getObject() {
return mockSnapshotService;
}
};
@@ -534,6 +563,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void resolveSnapshotMetadataFromEvent() {
SnapshotMetadata eventSnapshotMetadata = newSnapshotMetadata(snapshotDat);
SnapshotMetadata factoryExportSnapshotMetadata = newSnapshotMetadata();
SnapshotMetadata factoryImportSnapshotMetadata = newSnapshotMetadata(FileSystemUtils.USER_HOME);
@@ -555,6 +585,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void resolveExportSnapshotMetadataFromFactory() {
SnapshotMetadata factoryExportSnapshotMetadata = newSnapshotMetadata();
SnapshotMetadata factoryImportSnapshotMetadata = newSnapshotMetadata(FileSystemUtils.USER_HOME);
@@ -575,6 +606,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void resolveImportSnapshotMetadataFromFactory() {
SnapshotMetadata factoryExportSnapshotMetadata = newSnapshotMetadata();
SnapshotMetadata factoryImportSnapshotMetadata = newSnapshotMetadata(FileSystemUtils.USER_HOME);
@@ -595,6 +627,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void withCacheBasedSnapshotServiceOnCacheSnapshotEventIsMatch() {
SnapshotApplicationEvent mockSnapshotEvent = mock(SnapshotApplicationEvent.class, "MockSnapshotApplicationEvent");
when(mockSnapshotEvent.isCacheSnapshotEvent()).thenReturn(true);
@@ -608,6 +641,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void withCacheBasedSnapshotServiceOnRegionSnapshotEventIsNotAMatch() {
SnapshotApplicationEvent mockSnapshotEvent = mock(SnapshotApplicationEvent.class, "MockSnapshotApplicationEvent");
when(mockSnapshotEvent.isCacheSnapshotEvent()).thenReturn(false);
@@ -622,6 +656,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void withRegionBasedSnapshotServiceOnCacheSnapshotEventIsMatch() {
SnapshotApplicationEvent mockSnapshotEvent = mock(SnapshotApplicationEvent.class, "MockSnapshotApplicationEvent");
when(mockSnapshotEvent.isCacheSnapshotEvent()).thenReturn(true);
@@ -637,6 +672,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void withRegionBasedSnapshotServiceOnRegionSnapshotEventIsMatch() {
Region mockRegion = mock(Region.class, "MockRegion");
SnapshotApplicationEvent mockSnapshotEvent = mock(SnapshotApplicationEvent.class, "MockSnapshotApplicationEvent");
@@ -655,6 +691,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void importCacheSnapshotOnInitialization() throws Exception {
Cache mockCache = mock(Cache.class, "MockCache");
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
@@ -705,6 +742,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
@SuppressWarnings("unchecked")
public void importRegionSnapshotOnInitialization() throws Exception {
Cache mockCache = mock(Cache.class, "MockCache");
Region mockRegion = mock(Region.class, "MockRegion");
@@ -758,6 +796,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void exportCacheSnapshotOnDestroy() throws Exception {
Cache mockCache = mock(Cache.class, "MockCache");
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
@@ -800,6 +839,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void exportRegionSnapshotOnDestroy() throws Exception {
Cache mockCache = mock(Cache.class, "MockCache");
Region mockRegion = mock(Region.class, "MockRegion");
@@ -846,6 +886,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void createOptionsWithFilterOnSnapshotServiceAdapterSupport() {
SnapshotFilter mockSnapshotFilter = mock(SnapshotFilter.class, "MockSnapshotFilter");
final SnapshotOptions mockSnapshotOptions = mock(SnapshotOptions.class, "MockSnapshotOptions");
@@ -853,7 +894,9 @@ public class SnapshotServiceFactoryBeanTest {
when(mockSnapshotOptions.setFilter(any(SnapshotFilter.class))).thenReturn(mockSnapshotOptions);
TestSnapshotServiceAdapter snapshotService = new TestSnapshotServiceAdapter() {
@Override public SnapshotOptions<Object, Object> createOptions() {
@Override
public SnapshotOptions<Object, Object> createOptions() {
return mockSnapshotOptions;
}
};
@@ -867,7 +910,7 @@ public class SnapshotServiceFactoryBeanTest {
public void invokeExceptionSuppressingCloseOnSnapshotServiceAdapterSupportIsSuccessful() throws Exception {
Closeable mockCloseable = mock(Closeable.class, "MockCloseable");
assertThat(new TestSnapshotServiceAdapter().exceptionSuppressingClose(mockCloseable), is(true));
assertThat(new SnapshotServiceFactoryBeanIntegrationTest.TestSnapshotServiceAdapter().exceptionSuppressingClose(mockCloseable), is(true));
verify(mockCloseable, times(1)).close();
}
@@ -878,7 +921,7 @@ public class SnapshotServiceFactoryBeanTest {
doThrow(new IOException("TEST")).when(mockCloseable).close();
assertThat(new TestSnapshotServiceAdapter().exceptionSuppressingClose(mockCloseable), is(false));
assertThat(new SnapshotServiceFactoryBeanIntegrationTest.TestSnapshotServiceAdapter().exceptionSuppressingClose(mockCloseable), is(false));
verify(mockCloseable, times(1)).close();
}
@@ -890,7 +933,9 @@ public class SnapshotServiceFactoryBeanTest {
when(mockLog.isDebugEnabled()).thenReturn(true);
TestSnapshotServiceAdapter snapshotService = new TestSnapshotServiceAdapter() {
@Override Log createLog() {
@Override
Log createLog() {
return mockLog;
}
};
@@ -905,12 +950,15 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void logDebugWhenNotDebugging() {
final Log mockLog = mock(Log.class, "MockLog");
when(mockLog.isDebugEnabled()).thenReturn(false);
TestSnapshotServiceAdapter snapshotService = new TestSnapshotServiceAdapter() {
@Override Log createLog() {
@Override
Log createLog() {
return mockLog;
}
};
@@ -923,6 +971,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void toSimpleFilenameUsingVariousPathnames() {
TestSnapshotServiceAdapter snapshotService = new TestSnapshotServiceAdapter();
assertThat(snapshotService.toSimpleFilename(toPathname("path", "to", "file.ext")), is(equalTo("file.ext")));
@@ -937,6 +986,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test(expected = ImportSnapshotException.class)
public void loadCacheSnapshotWithDirectoryAndFormatHandlesExceptionAppropriately() throws Exception {
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
doThrow(new IOException("TEST")).when(mockCacheSnapshotService).load(any(File.class), any(SnapshotFormat.class));
@@ -949,11 +999,13 @@ public class SnapshotServiceFactoryBeanTest {
adapter.load(FileSystemUtils.WORKING_DIRECTORY, SnapshotFormat.GEMFIRE);
}
catch (ImportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to load snapshots from directory (%1$s) in format (GEMFIRE)",
FileSystemUtils.WORKING_DIRECTORY))));
assertThat(expected.getCause(), is(instanceOf(IOException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -964,6 +1016,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test(expected = ImportSnapshotException.class)
public void loadCacheSnapshotWithFormatOptionsAndSnapshotFilesHandlesExceptionAppropriately() throws Exception {
SnapshotOptions mockSnapshotOptions = mock(SnapshotOptions.class, "MockSnapshotOptions");
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
@@ -979,11 +1032,13 @@ public class SnapshotServiceFactoryBeanTest {
adapter.load(SnapshotFormat.GEMFIRE, mockSnapshotOptions, snapshotDat);
}
catch (ImportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to load snapshots (%1$s) in format (GEMFIRE) using options (%2$s)",
Arrays.toString(new File[] { snapshotDat }), mockSnapshotOptions))));
assertThat(expected.getCause(), is(instanceOf(ClassCastException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -994,6 +1049,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test(expected = ExportSnapshotException.class)
public void saveCacheSnapshotWithDirectoryAndFormatHandlesExceptionAppropriately() throws Exception {
CacheSnapshotService mockCacheSnapshotService = mock(CacheSnapshotService.class, "MockCacheSnapshotService");
doThrow(new IOException("TEST")).when(mockCacheSnapshotService).save(any(File.class), any(SnapshotFormat.class));
@@ -1006,11 +1062,13 @@ public class SnapshotServiceFactoryBeanTest {
adapter.save(FileSystemUtils.WORKING_DIRECTORY, SnapshotFormat.GEMFIRE);
}
catch (ExportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to save snapshots to directory (%1$s) in format (GEMFIRE)",
FileSystemUtils.WORKING_DIRECTORY))));
assertThat(expected.getCause(), is(instanceOf(IOException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -1036,11 +1094,13 @@ public class SnapshotServiceFactoryBeanTest {
adapter.save(FileSystemUtils.USER_HOME, SnapshotFormat.GEMFIRE, mockSnapshotOptions);
}
catch (ExportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to save snapshots to directory (%1$s) in format (GEMFIRE) using options (%2$s)",
FileSystemUtils.USER_HOME, mockSnapshotOptions))));
assertThat(expected.getCause(), is(instanceOf(ClassCastException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -1064,10 +1124,12 @@ public class SnapshotServiceFactoryBeanTest {
adapter.load(snapshotDat, SnapshotFormat.GEMFIRE);
}
catch (ImportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to load snapshot from file (%1$s) in format (GEMFIRE)", snapshotDat))));
assertThat(expected.getCause(), is(instanceOf(IOException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -1092,11 +1154,13 @@ public class SnapshotServiceFactoryBeanTest {
adapter.load(SnapshotFormat.GEMFIRE, mockSnapshotOptions, snapshotDat);
}
catch (ImportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to load snapshots (%1$s) in format (GEMFIRE) using options (%2$s)",
Arrays.toString(new File[] { snapshotDat }), mockSnapshotOptions))));
assertThat(expected.getCause(), is(instanceOf(ClassCastException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -1120,10 +1184,12 @@ public class SnapshotServiceFactoryBeanTest {
adapter.save(snapshotDat, SnapshotFormat.GEMFIRE);
}
catch (ExportSnapshotException expected) {
assertThat(expected.getMessage(), is(equalTo(String.format(
"Failed to save snapshot to file (%1$s) in format (GEMFIRE)", snapshotDat))));
assertThat(expected.getCause(), is(instanceOf(IOException.class)));
assertThat(expected.getCause().getMessage(), is(equalTo("TEST")));
throw expected;
}
finally {
@@ -1163,9 +1229,11 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void createSnapshotMetadataWithNullLocation() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectCause(is(nullValue(Throwable.class)));
expectedException.expectMessage("Location must not be null");
new SnapshotMetadata(null, mock(SnapshotFilter.class), SnapshotFormat.GEMFIRE);
}
@@ -1185,6 +1253,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void createSnapshotMetadataWithFileNullFilterAndGemFireFormat() throws Exception {
SnapshotMetadata snapshotMetadata = new SnapshotMetadata(snapshotDat, null, SnapshotFormat.GEMFIRE);
assertThat(snapshotMetadata.getLocation(), is(equalTo(snapshotDat)));
@@ -1197,6 +1266,7 @@ public class SnapshotServiceFactoryBeanTest {
@Test
public void isJarFileIsTrue() {
// JRE
File runtimeDotJar = new File(new File(FileSystemUtils.JAVA_HOME, "lib"), "rt.jar");

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.test.support;
/**
@@ -49,6 +48,7 @@ public abstract class StackTraceUtils extends ThreadUtils {
}
public static StackTraceElement getTestCaller(final Thread thread) {
for (StackTraceElement stackTraceElement : thread.getStackTrace()) {
if (isTestSuiteClass(stackTraceElement) && isTestCaseMethod(stackTraceElement)) {
return stackTraceElement;
@@ -59,6 +59,7 @@ public abstract class StackTraceUtils extends ThreadUtils {
}
private static boolean isTestCaseMethod(final StackTraceElement element) {
boolean result = element.getMethodName().toLowerCase().startsWith("test");
try {
@@ -71,9 +72,11 @@ public abstract class StackTraceUtils extends ThreadUtils {
}
private static boolean isTestSuiteClass(final StackTraceElement element) {
boolean result = element.getClass().getSimpleName().toLowerCase().endsWith("test");
result |= element.getClass().isAssignableFrom(junit.framework.TestCase.class);
return result;
}
}

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.test.support;
import java.util.concurrent.TimeUnit;
@@ -30,6 +29,7 @@ public abstract class ThreadUtils {
/* (non-Javadoc) */
public static boolean sleep(long milliseconds) {
try {
Thread.sleep(milliseconds);
return true;
@@ -45,8 +45,11 @@ public abstract class ThreadUtils {
}
public static boolean timedWait(long duration, long interval) {
return timedWait(duration, interval, new WaitCondition() {
@Override public boolean waiting() {
@Override
public boolean waiting() {
return true;
}
});

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.test.support;
import java.io.PrintWriter;
@@ -31,10 +30,12 @@ import java.io.StringWriter;
@SuppressWarnings("unused")
public abstract class ThrowableUtils {
public static String toString(final Throwable t) {
public static String toString(Throwable cause) {
StringWriter writer = new StringWriter();
t.printStackTrace(new PrintWriter(writer));
cause.printStackTrace(new PrintWriter(writer));
return writer.toString();
}
}