diff --git a/src/main/java/org/springframework/data/gemfire/config/xml/SnapshotServiceParser.java b/src/main/java/org/springframework/data/gemfire/config/xml/SnapshotServiceParser.java index 5c35d29a..722f098a 100644 --- a/src/main/java/org/springframework/data/gemfire/config/xml/SnapshotServiceParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/xml/SnapshotServiceParser.java @@ -16,6 +16,8 @@ package org.springframework.data.gemfire.config.xml; +import static org.springframework.data.gemfire.util.CollectionUtils.nullSafeList; + import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedList; @@ -71,28 +73,31 @@ class SnapshotServiceParser extends AbstractSingleBeanDefinitionParser { private ManagedList parseSnapshots(Element element, ParserContext parserContext, String childTagName) { - ManagedList snapshotBeans = new ManagedList(); + ManagedList snapshotBeans = new ManagedList<>(); - for (Element childElement : DomUtils.getChildElementsByTagName(element, childTagName)) { - snapshotBeans.add(parseSnapshotMetadata(childElement, parserContext)); - } + nullSafeList(DomUtils.getChildElementsByTagName(element, childTagName)).forEach(childElement -> + snapshotBeans.add(parseSnapshotMetadata(childElement, parserContext))); return snapshotBeans; } /* (non-Javadoc) */ private BeanDefinition parseSnapshotMetadata(Element snapshotMetadataElement, ParserContext parserContext) { - BeanDefinitionBuilder snapshotMetadataBuilder = BeanDefinitionBuilder.genericBeanDefinition( - SnapshotServiceFactoryBean.SnapshotMetadata.class); + + BeanDefinitionBuilder snapshotMetadataBuilder = + BeanDefinitionBuilder.genericBeanDefinition(SnapshotServiceFactoryBean.SnapshotMetadata.class); snapshotMetadataBuilder.addConstructorArgValue(snapshotMetadataElement.getAttribute("location")); + snapshotMetadataBuilder.addConstructorArgValue(snapshotMetadataElement.getAttribute("format")); + if (isSnapshotFilterSpecified(snapshotMetadataElement)) { snapshotMetadataBuilder.addConstructorArgValue(ParsingUtils.parseRefOrNestedBeanDeclaration( - snapshotMetadataElement, parserContext, snapshotMetadataBuilder, "filter-ref", true)); + snapshotMetadataElement, parserContext, snapshotMetadataBuilder, "filter-ref", + true)); } - snapshotMetadataBuilder.addConstructorArgValue(snapshotMetadataElement.getAttribute("format")); + ParsingUtils.setPropertyValue(snapshotMetadataElement, snapshotMetadataBuilder, "parallel"); return snapshotMetadataBuilder.getBeanDefinition(); } diff --git a/src/main/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBean.java b/src/main/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBean.java index ac2ce083..368ef736 100644 --- a/src/main/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBean.java @@ -168,7 +168,7 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport * @see org.apache.geode.cache.snapshot.RegionSnapshotService */ protected SnapshotServiceAdapter wrap(RegionSnapshotService regionSnapshotService) { - return new RegionSnapshotServiceAdapter(regionSnapshotService); + return new RegionSnapshotServiceAdapter<>(regionSnapshotService); } /** @@ -446,8 +446,10 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport throw new UnsupportedOperationException("not implemented"); } - protected SnapshotOptions createOptions(SnapshotFilter filter) { - return createOptions().setFilter(filter); + protected SnapshotOptions createOptions(SnapshotMetadata metadata) { + return createOptions() + .setFilter(metadata.getFilter()) + .setParallelMode(metadata.isParallel()); } @Override @@ -455,7 +457,7 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport public void doExport(SnapshotMetadata... configurations) { stream(nullSafeArray(configurations)).forEach(configuration -> - save(configuration.getLocation(), configuration.getFormat(), createOptions(configuration.getFilter()))); + save(configuration.getLocation(), configuration.getFormat(), createOptions(configuration))); } @Override @@ -463,8 +465,7 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport public void doImport(SnapshotMetadata... configurations) { stream(nullSafeArray(configurations)).forEach(configuration -> - load(configuration.getFormat(), createOptions(configuration.getFilter()), - handleLocation(configuration))); + load(configuration.getFormat(), createOptions(configuration), handleLocation(configuration))); } protected abstract File[] handleLocation(SnapshotMetadata configuration); @@ -671,7 +672,7 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport } @Override - protected File[] handleLocation(final SnapshotMetadata configuration) { + protected File[] handleLocation(SnapshotMetadata configuration) { return new File[] { configuration.getLocation() }; } @@ -739,22 +740,33 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport */ public static class SnapshotMetadata { + protected static final boolean DEFAULT_PARALLEL = false; + + protected static final SnapshotFormat DEFAULT_SNAPSHOT_FORMAT = SnapshotFormat.GEMFIRE; + + private boolean parallel; + private final File location; private final SnapshotFilter filter; private final SnapshotFormat format; - public SnapshotMetadata(File location, SnapshotFormat format) { - this(location, null, format); + public SnapshotMetadata(File location) { + this(location, DEFAULT_SNAPSHOT_FORMAT, null); } - public SnapshotMetadata(File location, SnapshotFilter filter, SnapshotFormat format) { - Assert.notNull(location, "Location must not be null"); + public SnapshotMetadata(File location, SnapshotFormat format) { + this(location, format, null); + } + + public SnapshotMetadata(File location, SnapshotFormat format, SnapshotFilter filter) { + + Assert.notNull(location, "Location is required"); this.location = location; - this.filter = filter; this.format = format; + this.filter = filter; } public boolean isDirectory() { @@ -766,7 +778,11 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport } public File getLocation() { - return location; + return this.location; + } + + public SnapshotFormat getFormat() { + return Optional.ofNullable(this.format).orElse(DEFAULT_SNAPSHOT_FORMAT); } public boolean isFilterPresent() { @@ -774,17 +790,21 @@ public class SnapshotServiceFactoryBean extends AbstractFactoryBeanSupport } public SnapshotFilter getFilter() { - return filter; + return this.filter; } - public SnapshotFormat getFormat() { - return (format != null ? format : SnapshotFormat.GEMFIRE); + public void setParallel(boolean parallel) { + this.parallel = parallel; + } + + public boolean isParallel() { + return this.parallel; } @Override public String toString() { - return String.format("{ @type = %1$s, location = %2$s, filter = %2$s, format = %4$s }", - getClass().getName(), getLocation().getAbsolutePath(), getFilter(), getFormat()); + return String.format("{ @type = %1$s, location = %2$s, format = %3$s, filter = %4$s, parallel = %5$s }", + getClass().getName(), getLocation().getAbsolutePath(), getFormat(), getFilter(), isParallel()); } } diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-data-geode-2.1.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-data-geode-2.1.xsd index cc206800..40cdb713 100644 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-data-geode-2.1.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-data-geode-2.1.xsd @@ -248,9 +248,10 @@ both in the same definition) is illegal. - - + + + diff --git a/src/test/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBeanTest.java index 093007c5..234d3535 100644 --- a/src/test/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/snapshot/SnapshotServiceFactoryBeanTest.java @@ -27,6 +27,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isNull; @@ -60,7 +61,7 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.mockito.Matchers; +import org.mockito.ArgumentMatchers; import org.springframework.core.io.ClassPathResource; import org.springframework.data.gemfire.snapshot.event.ExportSnapshotApplicationEvent; import org.springframework.data.gemfire.snapshot.event.ImportSnapshotApplicationEvent; @@ -95,7 +96,7 @@ public class SnapshotServiceFactoryBeanTest { File mockFile = mock(File.class, filename); when(mockFile.isFile()).thenReturn(true); - when(mockFile.getAbsolutePath()).thenReturn(String.format("/path/to/%1$s", filename)); + when(mockFile.getAbsolutePath()).thenReturn(String.format("/path/to/%s", filename)); when(mockFile.getName()).thenReturn(filename); return mockFile; @@ -106,21 +107,27 @@ public class SnapshotServiceFactoryBeanTest { } protected SnapshotMetadata newSnapshotMetadata(File location) { - return newSnapshotMetadata(location, null); + return newSnapshotMetadata(location, null, false, SnapshotFormat.GEMFIRE); } - protected SnapshotMetadata newSnapshotMetadata(SnapshotFilter filter) { - return newSnapshotMetadata(FileSystemUtils.WORKING_DIRECTORY, filter); - } - - protected SnapshotMetadata newSnapshotMetadata(File location, SnapshotFilter filter) { - return newSnapshotMetadata(location, filter, SnapshotFormat.GEMFIRE); + protected SnapshotMetadata newSnapshotMetadata(SnapshotFilter filter, boolean parallel) { + return newSnapshotMetadata(FileSystemUtils.WORKING_DIRECTORY, filter, parallel); } protected SnapshotMetadata newSnapshotMetadata(File location, SnapshotFilter filter, - SnapshotFormat format) { + boolean parallel) { - return new SnapshotMetadata(location, filter, format); + return newSnapshotMetadata(location, filter, parallel, SnapshotFormat.GEMFIRE); + } + + protected SnapshotMetadata newSnapshotMetadata(File location, SnapshotFilter filter, + boolean parallel, SnapshotFormat format) { + + SnapshotMetadata snapshotMetadata = new SnapshotMetadata<>(location, format, filter); + + snapshotMetadata.setParallel(parallel); + + return snapshotMetadata; } protected SnapshotMetadata[] toArray(SnapshotMetadata... metadata) { @@ -716,15 +723,18 @@ public class SnapshotServiceFactoryBeanTest { when(mockCacheSnapshotService.createOptions()).thenReturn(mockSnapshotOptionsOne) .thenReturn(mockSnapshotOptionsTwo); when(mockSnapshotOptionsOne.setFilter(eq(mockSnapshotFilterOne))).thenReturn(mockSnapshotOptionsOne); + when(mockSnapshotOptionsOne.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsOne); when(mockSnapshotOptionsTwo.setFilter(eq(mockSnapshotFilterTwo))).thenReturn(mockSnapshotOptionsTwo); + when(mockSnapshotOptionsTwo.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsTwo); - SnapshotMetadata[] expectedImports = toArray( - newSnapshotMetadata(FileSystemUtils.USER_HOME, mockSnapshotFilterOne), - newSnapshotMetadata(mockSnapshotFilterTwo)); + SnapshotMetadata[] expectedImports = + toArray(newSnapshotMetadata(FileSystemUtils.USER_HOME, mockSnapshotFilterOne, true), + newSnapshotMetadata(mockSnapshotFilterTwo, false)); SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean(); factoryBean.setCache(mockCache); + factoryBean.setExports(null); factoryBean.setImports(expectedImports); factoryBean.setRegion(null); @@ -740,13 +750,16 @@ public class SnapshotServiceFactoryBeanTest { verify(mockCache, times(1)).getSnapshotService(); verify(mockCacheSnapshotService, times(2)).createOptions(); - verify(mockCacheSnapshotService, times(1)).load(eq(FileSystemUtils.safeListFiles(FileSystemUtils.USER_HOME, FileSystemUtils.FileOnlyFilter.INSTANCE)), - eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsOne)); - verify(mockCacheSnapshotService, times(1)).load(eq(FileSystemUtils.safeListFiles( - FileSystemUtils.WORKING_DIRECTORY, FileSystemUtils.FileOnlyFilter.INSTANCE)), - eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsTwo)); + verify(mockCacheSnapshotService, times(1)) + .load(eq(FileSystemUtils.safeListFiles(FileSystemUtils.USER_HOME, FileSystemUtils.FileOnlyFilter.INSTANCE)), + eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsOne)); + verify(mockCacheSnapshotService, times(1)) + .load(eq(FileSystemUtils.safeListFiles(FileSystemUtils.WORKING_DIRECTORY, FileSystemUtils.FileOnlyFilter.INSTANCE)), + eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsTwo)); verify(mockSnapshotOptionsOne, times(1)).setFilter(eq(mockSnapshotFilterOne)); + verify(mockSnapshotOptionsOne, times(1)).setParallelMode(eq(true)); verify(mockSnapshotOptionsTwo, times(1)).setFilter(eq(mockSnapshotFilterTwo)); + verify(mockSnapshotOptionsTwo, times(1)).setParallelMode(eq(false)); } @Test @@ -771,16 +784,20 @@ public class SnapshotServiceFactoryBeanTest { when(mockRegionSnapshotService.createOptions()).thenReturn(mockSnapshotOptionsOne) .thenReturn(mockSnapshotOptionsTwo); when(mockSnapshotOptionsOne.setFilter(eq(mockSnapshotFilterOne))).thenReturn(mockSnapshotOptionsOne); + when(mockSnapshotOptionsOne.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsOne); when(mockSnapshotOptionsTwo.setFilter(eq(mockSnapshotFilterTwo))).thenReturn(mockSnapshotOptionsTwo); + when(mockSnapshotOptionsTwo.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsTwo); File snapshotDatTwo = mockFile("snapshot-2.dat"); - SnapshotMetadata[] expectedImports = toArray(newSnapshotMetadata(snapshotDat, mockSnapshotFilterOne), - newSnapshotMetadata(snapshotDatTwo, mockSnapshotFilterTwo)); + SnapshotMetadata[] expectedImports = + toArray(newSnapshotMetadata(snapshotDat, mockSnapshotFilterOne, true), + newSnapshotMetadata(snapshotDatTwo, mockSnapshotFilterTwo, false)); SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean(); factoryBean.setCache(mockCache); + factoryBean.setExports(null); factoryBean.setImports(expectedImports); factoryBean.setRegion(mockRegion); @@ -797,12 +814,14 @@ public class SnapshotServiceFactoryBeanTest { verify(mockCache, never()).getSnapshotService(); verify(mockRegion, times(1)).getSnapshotService(); verify(mockRegionSnapshotService, times(2)).createOptions(); - verify(mockRegionSnapshotService, times(1)).load(eq(snapshotDat), eq(SnapshotFormat.GEMFIRE), - eq(mockSnapshotOptionsOne)); - verify(mockRegionSnapshotService, times(1)).load(eq(snapshotDatTwo), eq(SnapshotFormat.GEMFIRE), - eq(mockSnapshotOptionsTwo)); + verify(mockRegionSnapshotService, times(1)) + .load(eq(snapshotDat), eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsOne)); + verify(mockRegionSnapshotService, times(1)) + .load(eq(snapshotDatTwo), eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptionsTwo)); verify(mockSnapshotOptionsOne, times(1)).setFilter(eq(mockSnapshotFilterOne)); + verify(mockSnapshotOptionsOne, times(1)).setParallelMode(eq(true)); verify(mockSnapshotOptionsTwo, times(1)).setFilter(eq(mockSnapshotFilterTwo)); + verify(mockSnapshotOptionsTwo, times(1)).setParallelMode(eq(false)); } @Test @@ -823,10 +842,13 @@ public class SnapshotServiceFactoryBeanTest { when(mockCacheSnapshotService.createOptions()).thenReturn(mockSnapshotOptionsOne) .thenReturn(mockSnapshotOptionsTwo); when(mockSnapshotOptionsOne.setFilter(eq(mockSnapshotFilterOne))).thenReturn(mockSnapshotOptionsOne); + when(mockSnapshotOptionsOne.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsOne); when(mockSnapshotOptionsTwo.setFilter(eq(mockSnapshotFilterTwo))).thenReturn(mockSnapshotOptionsTwo); + when(mockSnapshotOptionsTwo.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsTwo); - SnapshotMetadata[] expectedExports = toArray(newSnapshotMetadata(mockSnapshotFilterOne), - newSnapshotMetadata(mockSnapshotFilterTwo)); + SnapshotMetadata[] expectedExports = + toArray(newSnapshotMetadata(mockSnapshotFilterOne, true), + newSnapshotMetadata(mockSnapshotFilterTwo, false)); SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean(); @@ -846,7 +868,9 @@ public class SnapshotServiceFactoryBeanTest { verify(mockCacheSnapshotService, times(1)).save(eq(expectedExports[1].getLocation()), eq(expectedExports[1].getFormat()), eq(mockSnapshotOptionsTwo)); verify(mockSnapshotOptionsOne, times(1)).setFilter(eq(mockSnapshotFilterOne)); + verify(mockSnapshotOptionsOne, times(1)).setParallelMode(eq(true)); verify(mockSnapshotOptionsTwo, times(1)).setFilter(eq(mockSnapshotFilterTwo)); + verify(mockSnapshotOptionsTwo, times(1)).setParallelMode(eq(false)); } @Test @@ -870,10 +894,13 @@ public class SnapshotServiceFactoryBeanTest { when(mockRegionSnapshotService.createOptions()).thenReturn(mockSnapshotOptionsOne) .thenReturn(mockSnapshotOptionsTwo); when(mockSnapshotOptionsOne.setFilter(eq(mockSnapshotFilterOne))).thenReturn(mockSnapshotOptionsOne); + when(mockSnapshotOptionsOne.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsOne); when(mockSnapshotOptionsTwo.setFilter(eq(mockSnapshotFilterTwo))).thenReturn(mockSnapshotOptionsTwo); + when(mockSnapshotOptionsTwo.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptionsTwo); - SnapshotMetadata[] expectedExports = toArray(newSnapshotMetadata(mockSnapshotFilterOne), - newSnapshotMetadata(mockSnapshotFilterTwo)); + SnapshotMetadata[] expectedExports = + toArray(newSnapshotMetadata(mockSnapshotFilterOne, true), + newSnapshotMetadata(mockSnapshotFilterTwo, false)); SnapshotServiceFactoryBean factoryBean = new SnapshotServiceFactoryBean(); @@ -894,17 +921,20 @@ public class SnapshotServiceFactoryBeanTest { verify(mockRegionSnapshotService, times(1)).save(eq(expectedExports[1].getLocation()), eq(expectedExports[1].getFormat()), eq(mockSnapshotOptionsTwo)); verify(mockSnapshotOptionsOne, times(1)).setFilter(eq(mockSnapshotFilterOne)); + verify(mockSnapshotOptionsOne, times(1)).setParallelMode(eq(true)); verify(mockSnapshotOptionsTwo, times(1)).setFilter(eq(mockSnapshotFilterTwo)); + verify(mockSnapshotOptionsTwo, times(1)).setParallelMode(eq(false)); } @Test - public void createOptionsWithFilterOnSnapshotServiceAdapterSupport() { + public void createOptionsWithParallelModeAndFilterOnSnapshotServiceAdapterSupport() { SnapshotFilter mockSnapshotFilter = mock(SnapshotFilter.class, "MockSnapshotFilter"); SnapshotOptions mockSnapshotOptions = mock(SnapshotOptions.class, "MockSnapshotOptions"); when(mockSnapshotOptions.setFilter(any(SnapshotFilter.class))).thenReturn(mockSnapshotOptions); + when(mockSnapshotOptions.setParallelMode(anyBoolean())).thenReturn(mockSnapshotOptions); TestSnapshotServiceAdapter snapshotService = new TestSnapshotServiceAdapter() { @Override public SnapshotOptions createOptions() { @@ -912,9 +942,16 @@ public class SnapshotServiceFactoryBeanTest { } }; - assertThat(snapshotService.createOptions(mockSnapshotFilter), is(equalTo(mockSnapshotOptions))); + SnapshotMetadata snapshotMetadata = + new SnapshotMetadata<>(mockFile("snapshot.gfd"), SnapshotMetadata.DEFAULT_SNAPSHOT_FORMAT, + mockSnapshotFilter); + + snapshotMetadata.setParallel(true); + + assertThat(snapshotService.createOptions(snapshotMetadata), is(equalTo(mockSnapshotOptions))); verify(mockSnapshotOptions, times(1)).setFilter(eq(mockSnapshotFilter)); + verify(mockSnapshotOptions, times(1)).setParallelMode(eq(true)); } @Test @@ -1051,7 +1088,7 @@ public class SnapshotServiceFactoryBeanTest { } finally { verify(mockCacheSnapshotService, times(1)).load(eq(new File[] { snapshotDat }), - eq(SnapshotFormat.GEMFIRE), Matchers.isA(SnapshotOptions.class)); + eq(SnapshotFormat.GEMFIRE), ArgumentMatchers.isA(SnapshotOptions.class)); } } @@ -1112,7 +1149,7 @@ public class SnapshotServiceFactoryBeanTest { } finally { verify(mockCacheSnapshotService, times(1)).save(eq(FileSystemUtils.USER_HOME), eq(SnapshotFormat.GEMFIRE), - Matchers.isA(SnapshotOptions.class)); + ArgumentMatchers.isA(SnapshotOptions.class)); } } @@ -1208,9 +1245,10 @@ public class SnapshotServiceFactoryBeanTest { public void saveRegionSnapshotWithSnapshotFileFormatAndOptionsHandlesExceptionAppropriately() throws Exception { SnapshotOptions mockSnapshotOptions = - mock(SnapshotOptions.class, "MockSnapahotOptions"); + mock(SnapshotOptions.class, "MockSnapshotOptions"); - RegionSnapshotService mockRegionSnapshotService = mock(RegionSnapshotService.class, "MockRegionSnapshotService"); + RegionSnapshotService mockRegionSnapshotService = + mock(RegionSnapshotService.class, "MockRegionSnapshotService"); doThrow(new ClassCastException("TEST")).when(mockRegionSnapshotService).save(any(File.class), any(SnapshotFormat.class), any(SnapshotOptions.class)); @@ -1223,16 +1261,18 @@ public class SnapshotServiceFactoryBeanTest { adapter.save(snapshotDat, SnapshotFormat.GEMFIRE, mockSnapshotOptions); } catch (ExportSnapshotException expected) { + assertThat(expected.getMessage(), is(equalTo(String.format( "Failed to save snapshot to file [%1$s] in format [GEMFIRE] using options [%2$s]", snapshotDat, mockSnapshotOptions)))); assertThat(expected.getCause(), is(instanceOf(ClassCastException.class))); assertThat(expected.getCause().getMessage(), is(equalTo("TEST"))); + throw expected; } finally { - verify(mockRegionSnapshotService, times(1)).save(eq(snapshotDat), eq(SnapshotFormat.GEMFIRE), - eq(mockSnapshotOptions)); + verify(mockRegionSnapshotService, times(1)) + .save(eq(snapshotDat), eq(SnapshotFormat.GEMFIRE), eq(mockSnapshotOptions)); } } @@ -1241,38 +1281,40 @@ public class SnapshotServiceFactoryBeanTest { exception.expect(IllegalArgumentException.class); exception.expectCause(is(nullValue(Throwable.class))); - exception.expectMessage("Location must not be null"); + exception.expectMessage("Location is required"); - new SnapshotMetadata(null, mock(SnapshotFilter.class), SnapshotFormat.GEMFIRE); + new SnapshotMetadata(null, SnapshotFormat.GEMFIRE, mock(SnapshotFilter.class)); } @Test - public void createSnapshotMetadataWithDirectoryFilterAndUnspecifiedFormat() { + public void createSnapshotMetadataWithFileGemFireFormatAndNullFilter() throws Exception { - SnapshotFilter mockSnapshotFilter = mock(SnapshotFilter.class, "MockSnapshotFilter"); - - SnapshotMetadata metadata = - new SnapshotMetadata(FileSystemUtils.WORKING_DIRECTORY, mockSnapshotFilter, null); - - assertThat(metadata.getLocation(), is(equalTo(FileSystemUtils.WORKING_DIRECTORY))); - assertThat(metadata.isDirectory(), is(true)); - assertThat(metadata.isFile(), is(false)); - assertThat(metadata.getFilter(), is(equalTo(mockSnapshotFilter))); - assertThat(metadata.isFilterPresent(), is(true)); - assertThat(metadata.getFormat(), is(equalTo(SnapshotFormat.GEMFIRE))); - } - - @Test - public void createSnapshotMetadataWithFileNullFilterAndGemFireFormat() throws Exception { - - SnapshotMetadata snapshotMetadata = new SnapshotMetadata(snapshotDat, null, SnapshotFormat.GEMFIRE); + SnapshotMetadata snapshotMetadata = new SnapshotMetadata(snapshotDat, SnapshotFormat.GEMFIRE, null); assertThat(snapshotMetadata.getLocation(), is(equalTo(snapshotDat))); assertThat(snapshotMetadata.isDirectory(), is(false)); assertThat(snapshotMetadata.isFile(), is(true)); - assertThat(snapshotMetadata.getFilter(), is(nullValue())); - assertThat(snapshotMetadata.isFilterPresent(), is(false)); assertThat(snapshotMetadata.getFormat(), is(equalTo(SnapshotFormat.GEMFIRE))); + assertThat(snapshotMetadata.isFilterPresent(), is(false)); + assertThat(snapshotMetadata.getFilter(), is(nullValue())); + assertThat(snapshotMetadata.isParallel(), is(false)); + } + + @Test + public void createSnapshotMetadataWithDirectoryNullFormatAndFilter() { + + SnapshotFilter mockSnapshotFilter = mock(SnapshotFilter.class, "MockSnapshotFilter"); + + SnapshotMetadata snapshotMetadata = + new SnapshotMetadata(FileSystemUtils.WORKING_DIRECTORY, null, mockSnapshotFilter); + + assertThat(snapshotMetadata.getLocation(), is(equalTo(FileSystemUtils.WORKING_DIRECTORY))); + assertThat(snapshotMetadata.isDirectory(), is(true)); + assertThat(snapshotMetadata.isFile(), is(false)); + assertThat(snapshotMetadata.getFormat(), is(equalTo(SnapshotFormat.GEMFIRE))); + assertThat(snapshotMetadata.isFilterPresent(), is(true)); + assertThat(snapshotMetadata.getFilter(), is(equalTo(mockSnapshotFilter))); + assertThat(snapshotMetadata.isParallel(), is(false)); } @Test diff --git a/src/test/java/org/springframework/data/gemfire/snapshot/event/SnapshotApplicationEventTest.java b/src/test/java/org/springframework/data/gemfire/snapshot/event/SnapshotApplicationEventTest.java index 1ed7c080..8dd4a879 100644 --- a/src/test/java/org/springframework/data/gemfire/snapshot/event/SnapshotApplicationEventTest.java +++ b/src/test/java/org/springframework/data/gemfire/snapshot/event/SnapshotApplicationEventTest.java @@ -54,18 +54,19 @@ import org.springframework.data.gemfire.test.support.FileSystemUtils; public class SnapshotApplicationEventTest { @Mock + @SuppressWarnings("unused") private Region mockRegion; protected SnapshotMetadata newSnapshotMetadata() { - return new SnapshotMetadata(FileSystemUtils.WORKING_DIRECTORY, null, - SnapshotOptions.SnapshotFormat.GEMFIRE); + return new SnapshotMetadata<>(FileSystemUtils.WORKING_DIRECTORY, SnapshotOptions.SnapshotFormat.GEMFIRE); } @Test public void constructSnapshotApplicationEventWithoutRegionOrSnapshotMetadata() { + SnapshotApplicationEvent event = new TestSnapshotApplicationEvent(this); - assertThat((SnapshotApplicationEventTest) event.getSource(), is(equalTo(this))); + assertThat(event.getSource(), is(equalTo(this))); assertThat(event.getRegionPath(), is(nullValue())); assertThat(event.getSnapshotMetadata(), is(notNullValue())); assertThat(event.getSnapshotMetadata().length, is(equalTo(0))); @@ -75,11 +76,12 @@ public class SnapshotApplicationEventTest { @Test public void constructSnapshotApplicationEventWithRegionAndSnapshotMetadata() { + SnapshotMetadata eventSnapshotMetadata = newSnapshotMetadata(); SnapshotApplicationEvent event = new TestSnapshotApplicationEvent(this, "/Example", eventSnapshotMetadata); - assertThat((SnapshotApplicationEventTest) event.getSource(), is(equalTo(this))); + assertThat(event.getSource(), is(equalTo(this))); assertThat(event.getRegionPath(), is(equalTo("/Example"))); assertThat(event.getSnapshotMetadata()[0], is(sameInstance(eventSnapshotMetadata))); assertThat(event.isCacheSnapshotEvent(), is(false)); @@ -88,9 +90,10 @@ public class SnapshotApplicationEventTest { @Test public void constructSnapshotApplicationEventWithRegionButNoSnapshotMetadata() { + SnapshotApplicationEvent event = new TestSnapshotApplicationEvent(this, "/Example"); - assertThat((SnapshotApplicationEventTest) event.getSource(), is(equalTo(this))); + assertThat(event.getSource(), is(equalTo(this))); assertThat(event.getRegionPath(), is(equalTo("/Example"))); assertThat(event.getSnapshotMetadata(), is(notNullValue())); assertThat(event.getSnapshotMetadata().length, is(equalTo(0))); @@ -100,13 +103,14 @@ public class SnapshotApplicationEventTest { @Test public void constructSnapshotApplicationEventWithSnapshotMetadataButNoRegion() { + SnapshotMetadata eventSnapshotMetadataOne = newSnapshotMetadata(); SnapshotMetadata eventSnapshotMetadataTwo = newSnapshotMetadata(); - SnapshotApplicationEvent event = new TestSnapshotApplicationEvent(this, eventSnapshotMetadataOne, - eventSnapshotMetadataTwo); + SnapshotApplicationEvent event = + new TestSnapshotApplicationEvent(this, eventSnapshotMetadataOne, eventSnapshotMetadataTwo); - assertThat((SnapshotApplicationEventTest) event.getSource(), is(equalTo(this))); + assertThat(event.getSource(), is(equalTo(this))); assertThat(event.getRegionPath(), is(nullValue())); assertThat(event.getSnapshotMetadata()[0], is(equalTo(eventSnapshotMetadataOne))); assertThat(event.getSnapshotMetadata()[1], is(equalTo(eventSnapshotMetadataTwo))); @@ -121,6 +125,7 @@ public class SnapshotApplicationEventTest { @Test public void matchesNonMatchingRegionIsFalse() { + Region mockRegion = mock(Region.class, "MockRegion"); when(mockRegion.getFullPath()).thenReturn("/Example"); @@ -132,6 +137,7 @@ public class SnapshotApplicationEventTest { @Test public void matchesMatchingRegionIsTrue() { + Region mockRegion = mock(Region.class, "MockRegion"); when(mockRegion.getFullPath()).thenReturn("/Example"); @@ -143,6 +149,7 @@ public class SnapshotApplicationEventTest { @Test public void matchesNonMatchingRegionPathsIsFalse() { + SnapshotApplicationEvent event = new TestSnapshotApplicationEvent(this, "/Example"); assertThat(event.getRegionPath(), is(equalTo("/Example"))); @@ -162,6 +169,7 @@ public class SnapshotApplicationEventTest { @Test public void matchesMatchingRegionPathsIsTrue() { + assertThat(new TestSnapshotApplicationEvent(this, "/Example").matches("/Example"), is(true)); assertThat(new TestSnapshotApplicationEvent(this, "/").matches("/"), is(true)); assertThat(new TestSnapshotApplicationEvent(this, " ").matches(" "), is(true)); @@ -181,5 +189,4 @@ public class SnapshotApplicationEventTest { super(source, regionPath, snapshotMetadata); } } - }