This is an automated email from the ASF dual-hosted git repository. jasonhuynh pushed a commit to branch support/1.13 in repository https://gitbox.apache.org/repos/asf/geode.git
commit ce8ba3e6801dffd969555796c521cfceae30c81e Author: Jason Huynh <[email protected]> AuthorDate: Wed Jun 24 15:52:10 2020 -0700 Disk store rest api (#5) * Updating assembly validation txt Trying to remove disk store folders after test * Attempt to clear out disk dirs between runs * Added temporary folder and forced disk dirs to use the absolute path * Added tests for groups Prevent removal of disk store from specific groups to be consistent with region api (cherry picked from commit 5f98828019b309f7e01ca77b44b9b99d6d7947a2) --- .../validators/DiskStoreValidator.java | 11 +++++ .../client/CreateDiskStoreDUnitTest.java | 57 +++++++++++++++++++--- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/DiskStoreValidator.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/DiskStoreValidator.java index d239e7d..448cad4 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/DiskStoreValidator.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/DiskStoreValidator.java @@ -27,6 +27,7 @@ import static org.apache.geode.internal.cache.DiskStoreAttributes.verifyNonNegat import org.apache.commons.lang3.StringUtils; import org.apache.geode.internal.cache.DiskStoreMonitor; +import org.apache.geode.management.configuration.AbstractConfiguration; import org.apache.geode.management.configuration.DiskStore; import org.apache.geode.management.internal.CacheElementOperation; @@ -39,6 +40,16 @@ public class DiskStoreValidator implements ConfigurationValidator<DiskStore> { case UPDATE: checkRequiredItems(config); checkValueRanges(config); + break; + case DELETE: + validateDelete(config); + } + } + + private void validateDelete(AbstractConfiguration config) { + if (StringUtils.isNotBlank(config.getGroup())) { + throw new IllegalArgumentException( + "Group is an invalid option when deleting disk store."); } } diff --git a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/CreateDiskStoreDUnitTest.java b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/CreateDiskStoreDUnitTest.java index 95cf0d2..334e2f2 100644 --- a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/CreateDiskStoreDUnitTest.java +++ b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/CreateDiskStoreDUnitTest.java @@ -20,8 +20,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.function.UnaryOperator; import org.junit.After; import org.junit.Before; @@ -37,6 +39,7 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.WebApplicationContext; +import org.apache.geode.cache.configuration.CacheConfig; import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService; import org.apache.geode.distributed.internal.InternalLocator; import org.apache.geode.management.api.ClusterManagementException; @@ -80,7 +83,7 @@ public class CreateDiskStoreDUnitTest { private MemberVM server; @Before - public void before() { + public void before() throws Exception { cluster.setSkipLocalDistributedSystemCleanup(true); webContext = new LocatorWebContext(webApplicationContext); client = new ClusterManagementServiceBuilder().setTransport( @@ -94,16 +97,20 @@ public class CreateDiskStoreDUnitTest { public void after() { // for the test to be run multiple times, we need to clean out the cluster config InternalConfigurationPersistenceService cps = getLocator().getConfigurationPersistenceService(); - cps.updateCacheConfig("cluster", config -> { + UnaryOperator<CacheConfig> mutator = config -> { config.getDiskStores().clear(); return config; - }); + }; + + cps.updateCacheConfig("cluster", mutator); + cps.updateCacheConfig("SameGroup", mutator); + cps.updateCacheConfig("OtherGroup", mutator); if (server != null) { server.stop(true); } } - private DiskStore createDiskStoreConfigObject(String diskStoreName) { + private DiskStore createDiskStoreConfigObject(String diskStoreName) throws IOException { DiskStore diskStore = new DiskStore(); diskStore.setName(diskStoreName); DiskDir diskDir = new DiskDir( @@ -255,7 +262,7 @@ public class CreateDiskStoreDUnitTest { } @Test - public void listDiskStoresShouldReturnAllConfiguredDiskStores() { + public void listDiskStoresShouldReturnAllConfiguredDiskStores() throws Exception { assertThatThrownBy(() -> client.get(diskStore)).isInstanceOf(ClusterManagementException.class) .hasMessageContaining("ENTITY_NOT_FOUND"); @@ -265,9 +272,8 @@ public class CreateDiskStoreDUnitTest { assertThat(client.list(new DiskStore()).getResult().size()).isEqualTo(3); } - @Test - public void listDiskStoresShouldReturnNonDeletedDiskStores() { + public void listDiskStoresShouldReturnNonDeletedDiskStores() throws Exception { assertThatThrownBy(() -> client.get(diskStore)).isInstanceOf(ClusterManagementException.class) .hasMessageContaining("ENTITY_NOT_FOUND"); @@ -300,4 +306,41 @@ public class CreateDiskStoreDUnitTest { ClusterManagementRealizationResult deleteResult = client.delete(diskStore); assertThat(deleteResult.isSuccessful()).isTrue(); } + + @Test + public void createDiskStoreOnGroupShouldOnlyExecuteOnServersInThatGroup() throws Exception { + assertThatThrownBy(() -> client.get(diskStore)).isInstanceOf(ClusterManagementException.class) + .hasMessageContaining("ENTITY_NOT_FOUND"); + + server = cluster.startServerVM(1, "OtherGroup", webContext.getLocator().getPort()); + + diskStore.setGroup("SameGroup"); + ClusterManagementRealizationResult createResult = client.create(diskStore); + assertThat(createResult.getMemberStatuses().size()).isEqualTo(0); + assertThat(client.list(new DiskStore()).getResult().size()).isEqualTo(1); + } + + @Test + public void deleteDiskStoreShouldThrowExceptionIfGroupSpecified() throws Exception { + assertThatThrownBy(() -> client.get(diskStore)).isInstanceOf(ClusterManagementException.class) + .hasMessageContaining("ENTITY_NOT_FOUND"); + + server = cluster.startServerVM(1, "SameGroup", webContext.getLocator().getPort()); + diskStore.setGroup("SameGroup"); + client.create(diskStore); + + assertThatThrownBy(() -> client.delete(diskStore)) + .hasMessageContaining( + "ILLEGAL_ARGUMENT: Group is an invalid option when deleting disk store"); + } + + @Test + public void createDiskStoreByGroupShouldSucceed() throws Exception { + assertThatThrownBy(() -> client.get(diskStore)).isInstanceOf(ClusterManagementException.class) + .hasMessageContaining("ENTITY_NOT_FOUND"); + + diskStore.setGroup("SameGroup"); + client.create(diskStore); + assertThat(client.list(new DiskStore()).getResult().size()).isEqualTo(1); + } }
