http://git-wip-us.apache.org/repos/asf/geode/blob/0c124b77/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java index e913746..a1b9ade 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java @@ -27,37 +27,39 @@ import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT; import static org.apache.geode.distributed.ConfigurationProperties.NAME; import static org.apache.geode.distributed.ConfigurationProperties.USE_CLUSTER_CONFIGURATION; import static org.apache.geode.test.dunit.Assert.assertEquals; -import static org.apache.geode.test.dunit.Assert.assertFalse; import static org.apache.geode.test.dunit.Assert.assertNotNull; -import static org.apache.geode.test.dunit.Assert.assertNull; import static org.apache.geode.test.dunit.Assert.assertTrue; import static org.apache.geode.test.dunit.Assert.fail; import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter; import static org.awaitility.Awaitility.waitAtMost; +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.text.MessageFormat; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.Callable; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; + +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; + import org.apache.commons.io.FileUtils; +import org.junit.Test; +import org.junit.experimental.categories.Category; + import org.apache.geode.cache.Cache; -import org.apache.geode.cache.PartitionAttributes; -import org.apache.geode.cache.PartitionAttributesFactory; -import org.apache.geode.cache.PartitionResolver; import org.apache.geode.cache.Region; -import org.apache.geode.cache.RegionAttributes; -import org.apache.geode.cache.RegionFactory; -import org.apache.geode.cache.RegionShortcut; -import org.apache.geode.cache.Scope; -import org.apache.geode.cache.asyncqueue.AsyncEvent; -import org.apache.geode.cache.asyncqueue.AsyncEventListener; -import org.apache.geode.cache.wan.GatewaySenderFactory; -import org.apache.geode.compression.SnappyCompressor; import org.apache.geode.distributed.Locator; import org.apache.geode.distributed.internal.ClusterConfigurationService; import org.apache.geode.distributed.internal.InternalLocator; import org.apache.geode.internal.AvailablePort; import org.apache.geode.internal.AvailablePortHelper; -import org.apache.geode.internal.ClassBuilder; import org.apache.geode.internal.cache.GemFireCacheImpl; -import org.apache.geode.internal.cache.PartitionedRegion; -import org.apache.geode.internal.cache.RegionEntryContext; import org.apache.geode.management.ManagementService; import org.apache.geode.management.cli.Result; import org.apache.geode.management.internal.MBeanJMXAdapter; @@ -70,330 +72,26 @@ import org.apache.geode.test.dunit.SerializableCallable; import org.apache.geode.test.dunit.VM; import org.apache.geode.test.junit.categories.DistributedTest; import org.apache.geode.test.junit.categories.FlakyTest; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.text.MessageFormat; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.Callable; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.TimeUnit; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; @Category(DistributedTest.class) public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBase { - private static final long serialVersionUID = 1L; + private final List<String> filesToBeDeleted = new CopyOnWriteArrayList<String>(); - final String alterRegionName = "testAlterRegionRegion"; - final String alterAsyncEventQueueId1 = "testAlterRegionQueue1"; - final String alterAsyncEventQueueId2 = "testAlterRegionQueue2"; - final String alterAsyncEventQueueId3 = "testAlterRegionQueue3"; - final String alterGatewaySenderId1 = "testAlterRegionSender1"; - final String alterGatewaySenderId2 = "testAlterRegionSender2"; - final String alterGatewaySenderId3 = "testAlterRegionSender3"; - final String region46391 = "region46391"; - VM alterVm1; - String alterVm1Name; - VM alterVm2; - String alterVm2Name; - - final List<String> filesToBeDeleted = new CopyOnWriteArrayList<String>(); - - /** - * Asserts that the "compressor" option for the "create region" command succeeds for a recognized - * compressor. - */ - @Test - public void testCreateRegionWithGoodCompressor() { - setUpJmxManagerOnVm0ThenConnect(null); - VM vm = Host.getHost(0).getVM(1); - - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - // Run create region command with compression - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "compressedRegion"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__COMPRESSOR, - RegionEntryContext.DEFAULT_COMPRESSION_PROVIDER); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - // Make sure our region exists with compression enabled - vm.invoke(() -> { - Region region = getCache().getRegion("compressedRegion"); - assertNotNull(region); - assertTrue( - SnappyCompressor.getDefaultInstance().equals(region.getAttributes().getCompressor())); - }); - - // cleanup - commandStringBuilder = new CommandStringBuilder(CliStrings.DESTROY_REGION); - commandStringBuilder.addOption(CliStrings.DESTROY_REGION__REGION, "compressedRegion"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - } - - /** - * Asserts that the "compressor" option for the "create region" command fails for an unrecognized - * compressorc. - */ - @Test - public void testCreateRegionWithBadCompressor() { - setUpJmxManagerOnVm0ThenConnect(null); - - VM vm = Host.getHost(0).getVM(1); - - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - // Create a region with an unrecognized compressor - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "compressedRegion"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__COMPRESSOR, "BAD_COMPRESSOR"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - // Assert that our region was not created - vm.invoke(() -> { - Region region = getCache().getRegion("compressedRegion"); - assertNull(region); - }); - } - - /** - * Asserts that a missing "compressor" option for the "create region" command results in a region - * with no compression. - */ - @Test - public void testCreateRegionWithNoCompressor() { - setUpJmxManagerOnVm0ThenConnect(null); - - VM vm = Host.getHost(0).getVM(1); - - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - // Create a region with no compression - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "testRegion"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - // Assert that our newly created region has no compression - vm.invoke(() -> { - Region region = getCache().getRegion("testRegion"); - assertNotNull(region); - assertNull(region.getAttributes().getCompressor()); - }); - - // Cleanup - commandStringBuilder = new CommandStringBuilder(CliStrings.DESTROY_REGION); - commandStringBuilder.addOption(CliStrings.DESTROY_REGION__REGION, "testRegion"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - } - - @Test - public void testDestroyDistributedRegion() { - setUpJmxManagerOnVm0ThenConnect(null); - - for (int i = 1; i <= 2; i++) { - Host.getHost(0).getVM(i).invoke(() -> { - final Cache cache = getCache(); - - RegionFactory<Object, Object> factory = cache.createRegionFactory(RegionShortcut.PARTITION); - factory.create("Customer"); - - PartitionAttributesFactory paFactory = new PartitionAttributesFactory(); - paFactory.setColocatedWith("Customer"); - factory.setPartitionAttributes(paFactory.create()); - factory.create("Order"); - }); - } - - waitForRegionMBeanCreation("/Customer", 2); - waitForRegionMBeanCreation("/Order", 2); - - // Test failure when region not found - String command = "destroy region --name=DOESNOTEXIST"; - getLogWriter().info("testDestroyRegion command=" + command); - CommandResult cmdResult = executeCommand(command); - String strr = commandResultToString(cmdResult); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertTrue(stringContainsLine(strr, "Could not find.*\"DOESNOTEXIST\".*")); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - // Test unable to destroy with co-location - command = "destroy region --name=/Customer"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - // Test success - command = "destroy region --name=/Order"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Order.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - command = "destroy region --name=/Customer"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Customer.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - } - - @Test - public void testDestroyLocalRegions() { - setUpJmxManagerOnVm0ThenConnect(null); - - for (int i = 1; i <= 3; i++) { - Host.getHost(0).getVM(i).invoke(() -> { - final Cache cache = getCache(); - - RegionFactory<Object, Object> factory = cache.createRegionFactory(RegionShortcut.REPLICATE); - factory.setScope(Scope.LOCAL); - factory.create("Customer"); - }); - } - - waitForRegionMBeanCreation("/Customer", 3); - - // Test failure when region not found - String command = "destroy region --name=DOESNOTEXIST"; - getLogWriter().info("testDestroyRegion command=" + command); - CommandResult cmdResult = executeCommand(command); - String strr = commandResultToString(cmdResult); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertTrue(stringContainsLine(strr, "Could not find.*\"DOESNOTEXIST\".*")); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - command = "destroy region --name=/Customer"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Customer.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - for (int i = 1; i <= 3; i++) { - final int x = i; - Host.getHost(0).getVM(i).invoke(() -> { - assertNull("Region still exists in VM " + x, getCache().getRegion("Customer")); - }); - } - } - - @Test - public void testDestroyLocalAndDistributedRegions() { - setUpJmxManagerOnVm0ThenConnect(null); - - for (int i = 1; i <= 2; i++) { - Host.getHost(0).getVM(i).invoke(() -> { - final Cache cache = getCache(); - RegionFactory<Object, Object> factory = cache.createRegionFactory(RegionShortcut.PARTITION); - factory.create("Customer"); - factory.create("Customer-2"); - factory.create("Customer_3"); - }); - } - - Host.getHost(0).getVM(3).invoke(() -> { - final Cache cache = getCache(); - RegionFactory<Object, Object> factory = cache.createRegionFactory(RegionShortcut.REPLICATE); - factory.setScope(Scope.LOCAL); - factory.create("Customer"); - factory.create("Customer-2"); - factory.create("Customer_3"); - }); - - waitForRegionMBeanCreation("/Customer", 3); - - // Test failure when region not found - String command = "destroy region --name=DOESNOTEXIST"; - getLogWriter().info("testDestroyRegion command=" + command); - CommandResult cmdResult = executeCommand(command); - String strr = commandResultToString(cmdResult); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertTrue(stringContainsLine(strr, "Could not find.*\"DOESNOTEXIST\".*")); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - command = "destroy region --name=/Customer"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Customer.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - command = "destroy region --name=/Customer_3"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Customer_3.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - command = "destroy region --name=/Customer-2"; - getLogWriter().info("testDestroyRegion command=" + command); - cmdResult = executeCommand(command); - strr = commandResultToString(cmdResult); - assertTrue(stringContainsLine(strr, ".*Customer-2.*destroyed successfully.*")); - getLogWriter().info("testDestroyRegion strr=" + strr); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - for (int i = 1; i <= 3; i++) { - final int x = i; - Host.getHost(0).getVM(i).invoke(() -> { - assertNull("Region still exists in VM " + x, getCache().getRegion("Customer")); - assertNull("Region still exists in VM " + x, getCache().getRegion("Customer-2")); - assertNull("Region still exists in VM " + x, getCache().getRegion("Customer_3")); - }); - } - } - - private void waitForRegionMBeanCreation(final String regionPath, final int mbeanCount) { + private void waitForRegionMBeanCreation(final String regionPath) { Host.getHost(0).getVM(0).invoke(() -> { - waitAtMost(5, TimeUnit.SECONDS).until(newRegionMBeanIsCreated(regionPath, mbeanCount)); + waitAtMost(5, TimeUnit.SECONDS).until(newRegionMBeanIsCreated(regionPath)); }); } - private Callable<Boolean> newRegionMBeanIsCreated(final String regionPath, final int mbeanCount) { + private Callable<Boolean> newRegionMBeanIsCreated(final String regionPath) { return () -> { try { MBeanServer mbeanServer = MBeanJMXAdapter.mbeanServer; String queryExp = MessageFormat.format(ManagementConstants.OBJECTNAME__REGION_MXBEAN, regionPath, "*"); ObjectName queryExpON = new ObjectName(queryExp); - return mbeanServer.queryNames(null, queryExpON).size() == mbeanCount; + return mbeanServer.queryNames(null, queryExpON).size() == 1; } catch (MalformedObjectNameException mone) { getLogWriter().error(mone); fail(mone.getMessage()); @@ -402,556 +100,6 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas }; } - @Category(FlakyTest.class) // GEODE-973: random ports, BindException, - // java.rmi.server.ExportException: Port already in use - @Test - public void testCreateRegion46391() throws IOException { - setUpJmxManagerOnVm0ThenConnect(null); // GEODE-973: getRandomAvailablePort - String command = CliStrings.CREATE_REGION + " --" + CliStrings.CREATE_REGION__REGION + "=" - + this.region46391 + " --" + CliStrings.CREATE_REGION__REGIONSHORTCUT + "=REPLICATE"; - - getLogWriter().info("testCreateRegion46391 create region command=" + command); - - CommandResult cmdResult = executeCommand(command); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - command = CliStrings.PUT + " --" + CliStrings.PUT__KEY + "=k1" + " --" + CliStrings.PUT__VALUE - + "=k1" + " --" + CliStrings.PUT__REGIONNAME + "=" + this.region46391; - - getLogWriter().info("testCreateRegion46391 put command=" + command); - - CommandResult cmdResult2 = executeCommand(command); - assertEquals(Result.Status.OK, cmdResult2.getStatus()); - - getLogWriter().info("testCreateRegion46391 cmdResult2=" + commandResultToString(cmdResult2)); - String str1 = "Result : true"; - String str2 = "Key : k1"; - String str3 = "Key Class : java.lang.String"; - String str4 = "Value Class : java.lang.String"; - String str5 = "Old Value : <NULL>"; - - assertTrue(commandResultToString(cmdResult) - .contains("Region \"/" + this.region46391 + "\" created on")); - - assertTrue(commandResultToString(cmdResult2).contains(str1)); - assertTrue(commandResultToString(cmdResult2).contains(str2)); - assertTrue(commandResultToString(cmdResult2).contains(str3)); - assertTrue(commandResultToString(cmdResult2).contains(str4)); - assertTrue(commandResultToString(cmdResult2).contains(str5)); - } - - @Ignore("bug51924") - @Test - public void testAlterRegion() throws IOException { - setUpJmxManagerOnVm0ThenConnect(null); - - CommandResult cmdResult = executeCommand(CliStrings.LIST_REGION); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - assertTrue(commandResultToString(cmdResult).contains("No Regions Found")); - - Host.getHost(0).getVM(0).invoke(() -> { - Cache cache = getCache(); - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - }); - - this.alterVm1 = Host.getHost(0).getVM(1); - this.alterVm1Name = "VM" + this.alterVm1.getPid(); - this.alterVm1.invoke(() -> { - Properties localProps = new Properties(); - localProps.setProperty(NAME, alterVm1Name); - localProps.setProperty(GROUPS, "Group1"); - getSystem(localProps); - Cache cache = getCache(); - - // Setup queues and gateway senders to be used by all tests - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - AsyncEventListener listener = new AsyncEventListener() { - @Override - public void close() { - // Nothing to do - } - - @Override - public boolean processEvents(List<AsyncEvent> events) { - return true; - } - }; - cache.createAsyncEventQueueFactory().create(alterAsyncEventQueueId1, listener); - cache.createAsyncEventQueueFactory().create(alterAsyncEventQueueId2, listener); - cache.createAsyncEventQueueFactory().create(alterAsyncEventQueueId3, listener); - - GatewaySenderFactory gatewaySenderFactory = cache.createGatewaySenderFactory(); - gatewaySenderFactory.setManualStart(true); - gatewaySenderFactory.create(alterGatewaySenderId1, 2); - gatewaySenderFactory.create(alterGatewaySenderId2, 3); - gatewaySenderFactory.create(alterGatewaySenderId3, 4); - }); - - this.alterVm2 = Host.getHost(0).getVM(2); - this.alterVm2Name = "VM" + this.alterVm2.getPid(); - this.alterVm2.invoke(() -> { - Properties localProps = new Properties(); - localProps.setProperty(NAME, alterVm2Name); - localProps.setProperty(GROUPS, "Group1,Group2"); - getSystem(localProps); - Cache cache = getCache(); - - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - }); - - deployJarFilesForRegionAlter(); - regionAlterGroupTest(); - regionAlterSetAllTest(); - regionAlterNoChangeTest(); - regionAlterSetDefaultsTest(); - regionAlterManipulatePlugInsTest(); - - this.alterVm1.invoke(() -> { - getCache().getRegion(alterRegionName).destroyRegion(); - }); - } - - private void regionAlterGroupTest() { - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__EVICTIONMAX, "5764"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - String stringResult = commandResultToString(cmdResult); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(5764, attributes.getEvictionAttributes().getMaximum()); - }); - - this.alterVm2.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(5764, attributes.getEvictionAttributes().getMaximum()); - }); - - commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group2"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__EVICTIONMAX, "6963"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - stringResult = commandResultToString(cmdResult); - assertEquals(3, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertFalse(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(5764, attributes.getEvictionAttributes().getMaximum()); - }); - - this.alterVm2.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(6963, attributes.getEvictionAttributes().getMaximum()); - }); - } - - private void regionAlterSetAllTest() { - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__EVICTIONMAX, "35464"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CLONINGENABLED, "true"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIME, "3453"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIMEACTION, - "DESTROY"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONTIMETOLIVE, "7563"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONTTLACTION, "DESTROY"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerA"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELOADER, - "com.cadrdunit.RegionAlterCacheLoader"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHEWRITER, - "com.cadrdunit.RegionAlterCacheWriter"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIME, "6234"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION, - "DESTROY"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONTTL, "4562"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONTTLACTION, "DESTROY"); - - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - String stringResult = commandResultToString(cmdResult); - assertEquals(5, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - "Manager.*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(35464, attributes.getEvictionAttributes().getMaximum()); - assertEquals(3453, attributes.getEntryIdleTimeout().getTimeout()); - assertTrue(attributes.getEntryIdleTimeout().getAction().isDestroy()); - assertEquals(7563, attributes.getEntryTimeToLive().getTimeout()); - assertTrue(attributes.getEntryTimeToLive().getAction().isDestroy()); - assertEquals(6234, attributes.getRegionIdleTimeout().getTimeout()); - assertTrue(attributes.getRegionIdleTimeout().getAction().isDestroy()); - assertEquals(4562, attributes.getRegionTimeToLive().getTimeout()); - assertTrue(attributes.getRegionTimeToLive().getAction().isDestroy()); - assertEquals(1, attributes.getAsyncEventQueueIds().size()); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId1)); - assertEquals(1, attributes.getGatewaySenderIds().size()); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId1)); - assertEquals(1, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerA", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheWriter", - attributes.getCacheWriter().getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheLoader", - attributes.getCacheLoader().getClass().getName()); - }); - } - - private void regionAlterNoChangeTest() { - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CLONINGENABLED, "true"); - - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - String stringResult = commandResultToString(cmdResult); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm2.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(35464, attributes.getEvictionAttributes().getMaximum()); - assertEquals(3453, attributes.getEntryIdleTimeout().getTimeout()); - assertTrue(attributes.getEntryIdleTimeout().getAction().isDestroy()); - assertEquals(7563, attributes.getEntryTimeToLive().getTimeout()); - assertTrue(attributes.getEntryTimeToLive().getAction().isDestroy()); - assertEquals(6234, attributes.getRegionIdleTimeout().getTimeout()); - assertTrue(attributes.getRegionIdleTimeout().getAction().isDestroy()); - assertEquals(4562, attributes.getRegionTimeToLive().getTimeout()); - assertTrue(attributes.getRegionTimeToLive().getAction().isDestroy()); - assertEquals(1, attributes.getAsyncEventQueueIds().size()); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId1)); - assertEquals(1, attributes.getGatewaySenderIds().size()); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId1)); - assertEquals(1, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerA", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheWriter", - attributes.getCacheWriter().getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheLoader", - attributes.getCacheLoader().getClass().getName()); - }); - } - - private void regionAlterSetDefaultsTest() { - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__EVICTIONMAX); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CLONINGENABLED); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIME); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ENTRYEXPIRATIONTTLACTION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELOADER); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHEWRITER); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIME); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION); - - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - String stringResult = commandResultToString(cmdResult); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(0, attributes.getEvictionAttributes().getMaximum()); - assertEquals(0, attributes.getEntryIdleTimeout().getTimeout()); - assertTrue(attributes.getEntryIdleTimeout().getAction().isDestroy()); - assertEquals(7563, attributes.getEntryTimeToLive().getTimeout()); - assertTrue(attributes.getEntryTimeToLive().getAction().isInvalidate()); - assertEquals(0, attributes.getRegionIdleTimeout().getTimeout()); - assertTrue(attributes.getRegionIdleTimeout().getAction().isInvalidate()); - assertEquals(4562, attributes.getRegionTimeToLive().getTimeout()); - assertTrue(attributes.getRegionTimeToLive().getAction().isDestroy()); - assertEquals(0, attributes.getAsyncEventQueueIds().size()); - assertEquals(0, attributes.getGatewaySenderIds().size()); - assertEquals(0, attributes.getCacheListeners().length); - }); - } - - private void regionAlterManipulatePlugInsTest() { - - // Start out by putting 3 entries into each of the plug-in sets - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId2); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId3); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId2); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId3); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerA"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerB"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerC"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - String stringResult = commandResultToString(cmdResult); - - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(3, attributes.getAsyncEventQueueIds().size()); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId1)); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId2)); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId3)); - assertEquals(3, attributes.getGatewaySenderIds().size()); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId1)); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId2)); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId3)); - assertEquals(3, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerA", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerB", - attributes.getCacheListeners()[1].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerC", - attributes.getCacheListeners()[2].getClass().getName()); - }); - - // Now take 1 entry out of each of the sets - commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId2); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId3); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerB"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerC"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - stringResult = commandResultToString(cmdResult); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm2.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(2, attributes.getAsyncEventQueueIds().size()); - Iterator iterator = attributes.getAsyncEventQueueIds().iterator(); - assertEquals(alterAsyncEventQueueId1, iterator.next()); - assertEquals(alterAsyncEventQueueId2, iterator.next()); - assertEquals(2, attributes.getGatewaySenderIds().size()); - iterator = attributes.getGatewaySenderIds().iterator(); - assertEquals(alterGatewaySenderId1, iterator.next()); - assertEquals(alterGatewaySenderId3, iterator.next()); - assertEquals(2, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerB", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerC", - attributes.getCacheListeners()[1].getClass().getName()); - }); - - // Add 1 back to each of the sets - commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId2); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID, - this.alterAsyncEventQueueId3); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId1); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId3); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__GATEWAYSENDERID, - this.alterGatewaySenderId2); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerB"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerC"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerA"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - stringResult = commandResultToString(cmdResult); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(3, attributes.getAsyncEventQueueIds().size()); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId1)); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId2)); - assertTrue(attributes.getAsyncEventQueueIds().contains(alterAsyncEventQueueId3)); - assertEquals(3, attributes.getGatewaySenderIds().size()); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId1)); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId3)); - assertTrue(attributes.getGatewaySenderIds().contains(alterGatewaySenderId2)); - assertEquals(3, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerB", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerC", - attributes.getCacheListeners()[1].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerA", - attributes.getCacheListeners()[2].getClass().getName()); - }); - } - - @Category(FlakyTest.class) // GEODE-3018 - @Test - public void testAlterRegionResetCacheListeners() throws IOException { - setUpJmxManagerOnVm0ThenConnect(null); - - CommandResult cmdResult = executeCommand(CliStrings.LIST_REGION); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - assertTrue(commandResultToString(cmdResult).contains("No Regions Found")); - - Host.getHost(0).getVM(0).invoke(() -> { - Cache cache = getCache(); - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - }); - - this.alterVm1 = Host.getHost(0).getVM(1); - this.alterVm1Name = "VM" + this.alterVm1.getPid(); - this.alterVm1.invoke(() -> { - Properties localProps = new Properties(); - localProps.setProperty(NAME, alterVm1Name); - localProps.setProperty(GROUPS, "Group1"); - getSystem(localProps); - Cache cache = getCache(); - - // Setup queues and gateway senders to be used by all tests - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - }); - - this.alterVm2 = Host.getHost(0).getVM(2); - this.alterVm2Name = "VM" + this.alterVm2.getPid(); - this.alterVm2.invoke(() -> { - Properties localProps = new Properties(); - localProps.setProperty(NAME, alterVm2Name); - localProps.setProperty(GROUPS, "Group1,Group2"); - getSystem(localProps); - Cache cache = getCache(); - - cache.createRegionFactory(RegionShortcut.PARTITION).setStatisticsEnabled(true) - .create(alterRegionName); - }); - - deployJarFilesForRegionAlter(); - - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, - "com.cadrdunit.RegionAlterCacheListenerA,com.cadrdunit.RegionAlterCacheListenerB,com.cadrdunit.RegionAlterCacheListenerC"); - - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - String stringResult = commandResultToString(cmdResult); - - assertEquals(5, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(3, attributes.getCacheListeners().length); - assertEquals("com.cadrdunit.RegionAlterCacheListenerA", - attributes.getCacheListeners()[0].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerB", - attributes.getCacheListeners()[1].getClass().getName()); - assertEquals("com.cadrdunit.RegionAlterCacheListenerC", - attributes.getCacheListeners()[2].getClass().getName()); - }); - - // Add 1 back to each of the sets - commandStringBuilder = new CommandStringBuilder(CliStrings.ALTER_REGION); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__REGION, "/" + this.alterRegionName); - commandStringBuilder.addOption(CliStrings.GROUP, "Group1"); - commandStringBuilder.addOption(CliStrings.ALTER_REGION__CACHELISTENER, "''"); - cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - stringResult = commandResultToString(cmdResult); - assertEquals(4, countLinesInString(stringResult, false)); - assertEquals(false, stringResult.contains("ERROR")); - assertTrue(stringContainsLine(stringResult, - this.alterVm1Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - assertTrue(stringContainsLine(stringResult, - this.alterVm2Name + ".*Region \"/" + this.alterRegionName + "\" altered.*")); - - this.alterVm1.invoke(() -> { - RegionAttributes attributes = getCache().getRegion(alterRegionName).getAttributes(); - assertEquals(0, attributes.getCacheListeners().length); - }); - } - /** * Asserts that creating, altering and destroying regions correctly updates the shared * configuration. @@ -969,7 +117,6 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas jmxHost = "localhost"; } - final String regionName = "testRegionSharedConfigRegion"; final String regionPath = "/" + regionName; final String groupName = "testRegionSharedConfigGroup"; @@ -994,7 +141,7 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locatorPort, locatorLogFile, null, locatorProps); - waitAtMost(5, TimeUnit.SECONDS).until(() -> locator.isSharedConfigurationRunning()); + waitAtMost(5, TimeUnit.SECONDS).until(locator::isSharedConfigurationRunning); ManagementService managementService = ManagementService.getExistingManagementService(GemFireCacheImpl.getInstance()); @@ -1030,7 +177,7 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas assertEquals(Result.Status.OK, cmdResult.getStatus()); // Make sure that the region has been registered with the Manager MXBean - waitForRegionMBeanCreation(regionPath, 1); + waitForRegionMBeanCreation(regionPath); // Make sure the region exists in the shared config Host.getHost(0).getVM(0).invoke(() -> { @@ -1109,251 +256,8 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas return null; } }); - - } - - @Test - public void testDestroyRegionWithSharedConfig() { - disconnectAllFromDS(); - - final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2); - jmxPort = ports[0]; - httpPort = ports[1]; - try { - jmxHost = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException ignore) { - jmxHost = "localhost"; - } - - - final String regionName = "testRegionSharedConfigRegion"; - final String regionPath = "/" + regionName; - final String groupName = "testRegionSharedConfigGroup"; - - // Start the Locator and wait for shared configuration to be available - final int locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET); - - final Properties locatorProps = new Properties(); - locatorProps.setProperty(NAME, "Locator"); - locatorProps.setProperty(MCAST_PORT, "0"); - locatorProps.setProperty(LOG_LEVEL, "fine"); - locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true"); - locatorProps.setProperty(JMX_MANAGER, "true"); - locatorProps.setProperty(JMX_MANAGER_START, "true"); - locatorProps.setProperty(JMX_MANAGER_BIND_ADDRESS, String.valueOf(jmxHost)); - locatorProps.setProperty(JMX_MANAGER_PORT, String.valueOf(jmxPort)); - locatorProps.setProperty(HTTP_SERVICE_PORT, String.valueOf(httpPort)); - - Host.getHost(0).getVM(0).invoke(() -> { - final File locatorLogFile = new File("locator-" + locatorPort + ".log"); - try { - final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locatorPort, - locatorLogFile, null, locatorProps); - - waitAtMost(5, TimeUnit.SECONDS).until(() -> locator.isSharedConfigurationRunning()); - } catch (IOException ioex) { - fail("Unable to create a locator with a shared configuration"); - } - }); - - connect(jmxHost, jmxPort, httpPort, getDefaultShell()); - - // Create a cache in VM 1 - VM vm = Host.getHost(0).getVM(1); - vm.invoke(() -> { - Properties localProps = new Properties(); - localProps.setProperty(MCAST_PORT, "0"); - localProps.setProperty(LOCATORS, "localhost[" + locatorPort + "]"); - localProps.setProperty(GROUPS, groupName); - getSystem(localProps); - assertNotNull(getCache()); - }); - - // Test creating the region - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, regionName); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__STATISTICSENABLED, "true"); - commandStringBuilder.addOption(CliStrings.GROUP, groupName); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - // Make sure that the region has been registered with the Manager MXBean - waitForRegionMBeanCreation(regionPath, 1); - - // Make sure the region exists in the shared config - Host.getHost(0).getVM(0).invoke(() -> { - ClusterConfigurationService sharedConfig = - ((InternalLocator) Locator.getLocator()).getSharedConfiguration(); - try { - assertTrue( - sharedConfig.getConfiguration(groupName).getCacheXmlContent().contains(regionName)); - } catch (Exception e) { - fail("Error occurred in cluster configuration service"); - } - }); - - // Test destroying the region - commandStringBuilder = new CommandStringBuilder(CliStrings.DESTROY_REGION); - commandStringBuilder.addOption(CliStrings.DESTROY_REGION__REGION, regionName); - cmdResult = executeCommand(commandStringBuilder.toString()); - getLogWriter().info("#SB" + commandResultToString(cmdResult)); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - // Make sure the region was removed from the shared config - Host.getHost(0).getVM(0).invoke(() -> { - ClusterConfigurationService sharedConfig = - ((InternalLocator) Locator.getLocator()).getSharedConfiguration(); - try { - assertFalse( - sharedConfig.getConfiguration(groupName).getCacheXmlContent().contains(regionName)); - } catch (Exception e) { - fail("Error occurred in cluster configuration service"); - } - }); - - - // Restart the data vm to make sure the region is not existing any more - vm = Host.getHost(0).getVM(1); - vm.invoke(() -> { - Cache cache = getCache(); - assertNotNull(cache); - cache.close(); - assertTrue(cache.isClosed()); - - Properties localProps = new Properties(); - localProps.setProperty(MCAST_PORT, "0"); - localProps.setProperty(LOCATORS, "localhost[" + locatorPort + "]"); - localProps.setProperty(GROUPS, groupName); - localProps.setProperty(USE_CLUSTER_CONFIGURATION, "true"); - getSystem(localProps); - cache = getCache(); - assertNotNull(cache); - Region region = cache.getRegion(regionName); - assertNull(region); - - return null; - }); } - - final String PR_STRING = " package com.cadrdunit;" - + " public class TestPartitionResolver implements org.apache.geode.cache.PartitionResolver { " - + " @Override" + " public void close() {" + " }" + " @Override" - + " public Object getRoutingObject(org.apache.geode.cache.EntryOperation opDetails) { " - + " return null; " + " }" + " @Override" + " public String getName() { " - + " return \"TestPartitionResolver\";" + " }" + " }"; - - /** - * Test Description 1. Deploy a JAR with Custom Partition Resolver 2. Create Region with Partition - * Resolver 3. Region should get created with no Errors 4. Verify Region Partition Attributes for - * Partition Resolver - */ - @Test - public void testCreateRegionWithPartitionResolver() throws IOException { - setUpJmxManagerOnVm0ThenConnect(null); - VM vm = Host.getHost(0).getVM(1); - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - ClassBuilder classBuilder = new ClassBuilder(); - // classBuilder.addToClassPath("."); - final File prJarFile = new File(temporaryFolder.getRoot().getCanonicalPath() + File.separator, - "myPartitionResolver.jar"); - this.filesToBeDeleted.add(prJarFile.getAbsolutePath()); - byte[] jarBytes = - classBuilder.createJarFromClassContent("com/cadrdunit/TestPartitionResolver", PR_STRING); - writeJarBytesToFile(prJarFile, jarBytes); - - CommandResult cmdResult = executeCommand("deploy --jar=" + prJarFile.getAbsolutePath()); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - - // Create a region with an unrecognized compressor - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "regionWithPartitionResolver"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "PARTITION"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, - "com.cadrdunit.TestPartitionResolver"); - CommandResult cmdResult1 = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.OK, cmdResult1.getStatus()); - - // Assert that our region was not created - vm.invoke(() -> { - Region region = getCache().getRegion("regionWithPartitionResolver"); - assertNotNull(region); - - PartitionedRegion pr = (PartitionedRegion) region; - PartitionAttributes partitionAttributes = pr.getPartitionAttributes(); - assertNotNull(partitionAttributes); - PartitionResolver partitionResolver = partitionAttributes.getPartitionResolver(); - assertNotNull(partitionResolver); - assertEquals("TestPartitionResolver", partitionResolver.getName()); - }); - - vm.invoke(() -> { - getCache().getRegion("regionWithPartitionResolver").destroyRegion(); - }); - } - - @Test - public void testCreateRegionWithInvalidPartitionResolver() { - setUpJmxManagerOnVm0ThenConnect(null); - VM vm = Host.getHost(0).getVM(1); - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - // Create a region with an unrecognized compressor - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, - "testCreateRegionWithInvalidPartitionResolver"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "PARTITION"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, "a.b.c.d"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - // Assert that our region was not created - vm.invoke(() -> { - Region region = getCache().getRegion("testCreateRegionWithInvalidPartitionResolver"); - assertNull(region); - }); - } - - /** - * Test Description Try creating region of type REPLICATED and specify partition resolver Region - * Creation should fail. - */ - @Test - public void testCreateRegionForReplicatedRegionWithParitionResolver() { - setUpJmxManagerOnVm0ThenConnect(null); - VM vm = Host.getHost(0).getVM(1); - // Create a cache in vm 1 - vm.invoke(() -> { - assertNotNull(getCache()); - }); - - // Create a region with an unrecognized compressor - CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, - "testCreateRegionForReplicatedRegionWithParitionResolver"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); - commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, "a.b.c.d"); - CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); - assertEquals(Result.Status.ERROR, cmdResult.getStatus()); - - // Assert that our region was not created - vm.invoke(() -> { - Region region = - getCache().getRegion("testCreateRegionForReplicatedRegionWithParitionResolver"); - assertNull(region); - }); - } - - @Override protected final void preTearDownCliCommandTestBase() throws Exception { for (String path : this.filesToBeDeleted) { @@ -1369,69 +273,4 @@ public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBas } this.filesToBeDeleted.clear(); } - - /** - * Deploys JAR files which contain classes to be instantiated by the "alter region" test. - */ - private void deployJarFilesForRegionAlter() throws IOException { - ClassBuilder classBuilder = new ClassBuilder(); - final File jarFile1 = new File(new File(".").getAbsolutePath(), "testAlterRegion1.jar"); - this.filesToBeDeleted.add(jarFile1.getAbsolutePath()); - final File jarFile2 = new File(new File(".").getAbsolutePath(), "testAlterRegion2.jar"); - this.filesToBeDeleted.add(jarFile2.getAbsolutePath()); - final File jarFile3 = new File(new File(".").getAbsolutePath(), "testAlterRegion3.jar"); - this.filesToBeDeleted.add(jarFile3.getAbsolutePath()); - final File jarFile4 = new File(new File(".").getAbsolutePath(), "testAlterRegion4.jar"); - this.filesToBeDeleted.add(jarFile4.getAbsolutePath()); - final File jarFile5 = new File(new File(".").getAbsolutePath(), "testAlterRegion5.jar"); - this.filesToBeDeleted.add(jarFile5.getAbsolutePath()); - - byte[] jarBytes = - classBuilder.createJarFromClassContent("com/cadrdunit/RegionAlterCacheListenerA", - "package com.cadrdunit;" + "import org.apache.geode.cache.util.CacheListenerAdapter;" - + "public class RegionAlterCacheListenerA extends CacheListenerAdapter {}"); - writeJarBytesToFile(jarFile1, jarBytes); - CommandResult cmdResult = executeCommand("deploy --jar=testAlterRegion1.jar"); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - jarBytes = classBuilder.createJarFromClassContent("com/cadrdunit/RegionAlterCacheListenerB", - "package com.cadrdunit;" + "import org.apache.geode.cache.util.CacheListenerAdapter;" - + "public class RegionAlterCacheListenerB extends CacheListenerAdapter {}"); - writeJarBytesToFile(jarFile2, jarBytes); - cmdResult = executeCommand("deploy --jar=testAlterRegion2.jar"); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - jarBytes = classBuilder.createJarFromClassContent("com/cadrdunit/RegionAlterCacheListenerC", - "package com.cadrdunit;" + "import org.apache.geode.cache.util.CacheListenerAdapter;" - + "public class RegionAlterCacheListenerC extends CacheListenerAdapter {}"); - writeJarBytesToFile(jarFile3, jarBytes); - cmdResult = executeCommand("deploy --jar=testAlterRegion3.jar"); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - jarBytes = classBuilder.createJarFromClassContent("com/cadrdunit/RegionAlterCacheLoader", - "package com.cadrdunit;" + "import org.apache.geode.cache.CacheLoader;" - + "import org.apache.geode.cache.CacheLoaderException;" - + "import org.apache.geode.cache.LoaderHelper;" - + "public class RegionAlterCacheLoader implements CacheLoader {" - + "public void close() {}" - + "public Object load(LoaderHelper helper) throws CacheLoaderException {return null;}}"); - writeJarBytesToFile(jarFile4, jarBytes); - cmdResult = executeCommand("deploy --jar=testAlterRegion4.jar"); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - - jarBytes = classBuilder.createJarFromClassContent("com/cadrdunit/RegionAlterCacheWriter", - "package com.cadrdunit;" + "import org.apache.geode.cache.util.CacheWriterAdapter;" - + "public class RegionAlterCacheWriter extends CacheWriterAdapter {}"); - writeJarBytesToFile(jarFile5, jarBytes); - cmdResult = executeCommand("deploy --jar=testAlterRegion5.jar"); - assertEquals(Result.Status.OK, cmdResult.getStatus()); - } - - private void writeJarBytesToFile(File jarFile, byte[] jarBytes) throws IOException { - final OutputStream outStream = new FileOutputStream(jarFile); - outStream.write(jarBytes); - outStream.flush(); - outStream.close(); - } - }
http://git-wip-us.apache.org/repos/asf/geode/blob/0c124b77/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsTest.java deleted file mode 100644 index 85b660d..0000000 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommandsTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more contributor license - * agreements. See the NOTICE file distributed with this work for additional information regarding - * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. You may obtain a - * copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -package org.apache.geode.management.internal.cli.commands; - - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.mockito.Mockito; - -import org.apache.geode.internal.cache.InternalCache; -import org.apache.geode.management.DistributedSystemMXBean; -import org.apache.geode.test.dunit.rules.GfshParserRule; -import org.apache.geode.test.junit.categories.IntegrationTest; - -@Category(IntegrationTest.class) -public class CreateAlterDestroyRegionCommandsTest { - - @Rule - public GfshParserRule parser = new GfshParserRule(); - - @Test - public void testCreateRegionWithInvalidPartitionResolver() throws Exception { - InternalCache cache = mock(InternalCache.class); - DistributedSystemMXBean dsMBean = mock(DistributedSystemMXBean.class); - CreateAlterDestroyRegionCommands spy = Mockito.spy(CreateAlterDestroyRegionCommands.class); - - doReturn(cache).when(spy).getCache(); - doReturn(dsMBean).when(spy).getDSMBean(cache); - - String command = "create region --name=region3 --type=PARTITION --partition-resolver=Foo"; - - assertThatThrownBy(() -> parser.executeCommandWithInstance(spy, command)) - .hasMessageContaining("Foo is an invalid Partition Resolver"); - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/0c124b77/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandDUnitTest.java new file mode 100644 index 0000000..04168d5 --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandDUnitTest.java @@ -0,0 +1,318 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.apache.geode.management.internal.cli.commands; + +import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import org.apache.geode.cache.PartitionAttributes; +import org.apache.geode.cache.PartitionResolver; +import org.apache.geode.cache.Region; +import org.apache.geode.compression.SnappyCompressor; +import org.apache.geode.internal.ClassBuilder; +import org.apache.geode.internal.cache.PartitionedRegion; +import org.apache.geode.internal.cache.RegionEntryContext; +import org.apache.geode.management.cli.Result; +import org.apache.geode.management.internal.cli.i18n.CliStrings; +import org.apache.geode.management.internal.cli.result.CommandResult; +import org.apache.geode.management.internal.cli.util.CommandStringBuilder; +import org.apache.geode.test.dunit.Host; +import org.apache.geode.test.dunit.VM; +import org.apache.geode.test.junit.categories.DistributedTest; +import org.apache.geode.test.junit.categories.FlakyTest; + +@Category(DistributedTest.class) +public class CreateRegionCommandDUnitTest extends CliCommandTestBase { + private final List<String> filesToBeDeleted = new CopyOnWriteArrayList<String>(); + + /** + * Asserts that the "compressor" option for the "create region" command succeeds for a recognized + * compressor. + */ + @Test + public void testCreateRegionWithGoodCompressor() { + setUpJmxManagerOnVm0ThenConnect(null); + VM vm = Host.getHost(0).getVM(1); + + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + // Run create region command with compression + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "compressedRegion"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__COMPRESSOR, + RegionEntryContext.DEFAULT_COMPRESSION_PROVIDER); + CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + + // Make sure our region exists with compression enabled + vm.invoke(() -> { + Region region = getCache().getRegion("compressedRegion"); + assertNotNull(region); + assertTrue( + SnappyCompressor.getDefaultInstance().equals(region.getAttributes().getCompressor())); + }); + + // cleanup + commandStringBuilder = new CommandStringBuilder(CliStrings.DESTROY_REGION); + commandStringBuilder.addOption(CliStrings.DESTROY_REGION__REGION, "compressedRegion"); + cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + } + + /** + * Asserts that the "compressor" option for the "create region" command fails for an unrecognized + * compressorc. + */ + @Test + public void testCreateRegionWithBadCompressor() { + setUpJmxManagerOnVm0ThenConnect(null); + + VM vm = Host.getHost(0).getVM(1); + + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + // Create a region with an unrecognized compressor + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "compressedRegion"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__COMPRESSOR, "BAD_COMPRESSOR"); + CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.ERROR, cmdResult.getStatus()); + + // Assert that our region was not created + vm.invoke(() -> { + Region region = getCache().getRegion("compressedRegion"); + assertNull(region); + }); + } + + /** + * Asserts that a missing "compressor" option for the "create region" command results in a region + * with no compression. + */ + @Test + public void testCreateRegionWithNoCompressor() { + setUpJmxManagerOnVm0ThenConnect(null); + + VM vm = Host.getHost(0).getVM(1); + + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + // Create a region with no compression + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "testRegion"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); + CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + + // Assert that our newly created region has no compression + vm.invoke(() -> { + Region region = getCache().getRegion("testRegion"); + assertNotNull(region); + assertNull(region.getAttributes().getCompressor()); + }); + + // Cleanup + commandStringBuilder = new CommandStringBuilder(CliStrings.DESTROY_REGION); + commandStringBuilder.addOption(CliStrings.DESTROY_REGION__REGION, "testRegion"); + cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + } + + @Category(FlakyTest.class) // GEODE-973: random ports, BindException, + // java.rmi.server.ExportException: Port already in use + @Test + public void testCreateRegion46391() throws IOException { + setUpJmxManagerOnVm0ThenConnect(null); // GEODE-973: getRandomAvailablePort + String region46391 = "region46391"; + String command = CliStrings.CREATE_REGION + " --" + CliStrings.CREATE_REGION__REGION + "=" + + region46391 + " --" + CliStrings.CREATE_REGION__REGIONSHORTCUT + "=REPLICATE"; + + getLogWriter().info("testCreateRegion46391 create region command=" + command); + + CommandResult cmdResult = executeCommand(command); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + + command = CliStrings.PUT + " --" + CliStrings.PUT__KEY + "=k1" + " --" + CliStrings.PUT__VALUE + + "=k1" + " --" + CliStrings.PUT__REGIONNAME + "=" + region46391; + + getLogWriter().info("testCreateRegion46391 put command=" + command); + + CommandResult cmdResult2 = executeCommand(command); + assertEquals(Result.Status.OK, cmdResult2.getStatus()); + + getLogWriter().info("testCreateRegion46391 cmdResult2=" + commandResultToString(cmdResult2)); + String str1 = "Result : true"; + String str2 = "Key : k1"; + String str3 = "Key Class : java.lang.String"; + String str4 = "Value Class : java.lang.String"; + String str5 = "Old Value : <NULL>"; + + assertTrue( + commandResultToString(cmdResult).contains("Region \"/" + region46391 + "\" created on")); + + assertTrue(commandResultToString(cmdResult2).contains(str1)); + assertTrue(commandResultToString(cmdResult2).contains(str2)); + assertTrue(commandResultToString(cmdResult2).contains(str3)); + assertTrue(commandResultToString(cmdResult2).contains(str4)); + assertTrue(commandResultToString(cmdResult2).contains(str5)); + } + + /** + * Test Description 1. Deploy a JAR with Custom Partition Resolver 2. Create Region with Partition + * Resolver 3. Region should get created with no Errors 4. Verify Region Partition Attributes for + * Partition Resolver + */ + @Test + public void testCreateRegionWithPartitionResolver() throws IOException { + setUpJmxManagerOnVm0ThenConnect(null); + VM vm = Host.getHost(0).getVM(1); + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + ClassBuilder classBuilder = new ClassBuilder(); + // classBuilder.addToClassPath("."); + final File prJarFile = new File(temporaryFolder.getRoot().getCanonicalPath() + File.separator, + "myPartitionResolver.jar"); + this.filesToBeDeleted.add(prJarFile.getAbsolutePath()); + String PR_STRING = " package com.cadrdunit;" + + " public class TestPartitionResolver implements org.apache.geode.cache.PartitionResolver { " + + " @Override" + " public void close() {" + " }" + " @Override" + + " public Object getRoutingObject(org.apache.geode.cache.EntryOperation opDetails) { " + + " return null; " + " }" + " @Override" + " public String getName() { " + + " return \"TestPartitionResolver\";" + " }" + " }"; + byte[] jarBytes = + classBuilder.createJarFromClassContent("com/cadrdunit/TestPartitionResolver", PR_STRING); + writeJarBytesToFile(prJarFile, jarBytes); + + CommandResult cmdResult = executeCommand("deploy --jar=" + prJarFile.getAbsolutePath()); + assertEquals(Result.Status.OK, cmdResult.getStatus()); + + + // Create a region with an unrecognized compressor + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, "regionWithPartitionResolver"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "PARTITION"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, + "com.cadrdunit.TestPartitionResolver"); + CommandResult cmdResult1 = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.OK, cmdResult1.getStatus()); + + // Assert that our region was not created + vm.invoke(() -> { + Region region = getCache().getRegion("regionWithPartitionResolver"); + assertNotNull(region); + + PartitionedRegion pr = (PartitionedRegion) region; + PartitionAttributes partitionAttributes = pr.getPartitionAttributes(); + assertNotNull(partitionAttributes); + PartitionResolver partitionResolver = partitionAttributes.getPartitionResolver(); + assertNotNull(partitionResolver); + assertEquals("TestPartitionResolver", partitionResolver.getName()); + }); + + vm.invoke(() -> { + getCache().getRegion("regionWithPartitionResolver").destroyRegion(); + }); + } + + @Test + public void testCreateRegionWithInvalidPartitionResolver() { + setUpJmxManagerOnVm0ThenConnect(null); + VM vm = Host.getHost(0).getVM(1); + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + // Create a region with an unrecognized compressor + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, + "testCreateRegionWithInvalidPartitionResolver"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "PARTITION"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, "a.b.c.d"); + CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.ERROR, cmdResult.getStatus()); + + // Assert that our region was not created + vm.invoke(() -> { + Region region = getCache().getRegion("testCreateRegionWithInvalidPartitionResolver"); + assertNull(region); + }); + } + + /** + * Test Description Try creating region of type REPLICATED and specify partition resolver Region + * Creation should fail. + */ + @Test + public void testCreateRegionForReplicatedRegionWithParitionResolver() { + setUpJmxManagerOnVm0ThenConnect(null); + VM vm = Host.getHost(0).getVM(1); + // Create a cache in vm 1 + vm.invoke(() -> { + assertNotNull(getCache()); + }); + + // Create a region with an unrecognized compressor + CommandStringBuilder commandStringBuilder = new CommandStringBuilder(CliStrings.CREATE_REGION); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGION, + "testCreateRegionForReplicatedRegionWithParitionResolver"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, "REPLICATE"); + commandStringBuilder.addOption(CliStrings.CREATE_REGION__PARTITION_RESOLVER, "a.b.c.d"); + CommandResult cmdResult = executeCommand(commandStringBuilder.toString()); + assertEquals(Result.Status.ERROR, cmdResult.getStatus()); + + // Assert that our region was not created + vm.invoke(() -> { + Region region = + getCache().getRegion("testCreateRegionForReplicatedRegionWithParitionResolver"); + assertNull(region); + }); + } + + private void writeJarBytesToFile(File jarFile, byte[] jarBytes) throws IOException { + final OutputStream outStream = new FileOutputStream(jarFile); + outStream.write(jarBytes); + outStream.flush(); + outStream.close(); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/0c124b77/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandTest.java new file mode 100644 index 0000000..5011d78 --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommandTest.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.apache.geode.management.internal.cli.commands; + +import static org.apache.geode.management.internal.cli.commands.CreateRegionCommand.regionExists; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.mockito.Mockito; + +import org.apache.geode.internal.cache.InternalCache; +import org.apache.geode.management.DistributedSystemMXBean; +import org.apache.geode.test.dunit.rules.GfshParserRule; +import org.apache.geode.test.junit.categories.IntegrationTest; + +@Category(IntegrationTest.class) +public class CreateRegionCommandTest { + @Rule + public GfshParserRule parser = new GfshParserRule(); + + @Test + public void testCreateRegionWithInvalidPartitionResolver() throws Exception { + InternalCache cache = mock(InternalCache.class); + DistributedSystemMXBean dsMBean = mock(DistributedSystemMXBean.class); + CreateRegionCommand spy = Mockito.spy(CreateRegionCommand.class); + + doReturn(cache).when(spy).getCache(); + doReturn(dsMBean).when(spy).getDSMBean(cache); + + String command = "create region --name=region3 --type=PARTITION --partition-resolver=Foo"; + assertThatThrownBy(() -> parser.executeCommandWithInstance(spy, command)) + .hasMessageContaining("Foo is an invalid Partition Resolver"); + } + + @Test + public void testRegionExistsReturnsCorrectValue() throws Exception { + InternalCache cache = mock(InternalCache.class); + assertThat(regionExists(cache, null)).isFalse(); + } +}