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);
+  }
 }

Reply via email to