You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2016/10/07 14:44:30 UTC
incubator-geode git commit: GEODE-136: Fix possible
NullPointerException in Gfsh's 'list regions' command's GetRegionsFunction.
Repository: incubator-geode
Updated Branches:
refs/heads/develop 71f6d677e -> 769d9b3ae
GEODE-136: Fix possible NullPointerException in Gfsh's 'list regions' command's GetRegionsFunction.
* this closes #253
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/769d9b3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/769d9b3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/769d9b3a
Branch: refs/heads/develop
Commit: 769d9b3ae6435beb967b7c2f648ee01aa909d271
Parents: 71f6d67
Author: Kevin Duling <kd...@pivotal.io>
Authored: Tue Oct 4 17:08:17 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Oct 7 07:43:49 2016 -0700
----------------------------------------------------------------------
.../cli/functions/GetRegionsFunction.java | 69 +++++-------
.../functions/GetRegionsFunctionJUnitTest.java | 111 +++++++++++++++++++
2 files changed, 141 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/769d9b3a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
index bfb6164..658f012 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
@@ -20,55 +20,46 @@ import java.util.HashSet;
import java.util.Set;
import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheClosedException;
import org.apache.geode.cache.CacheFactory;
import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.FunctionAdapter;
+import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.internal.InternalEntity;
import org.apache.geode.management.internal.cli.domain.RegionInformation;
/**
* Function that retrieves regions hosted on every member
- *
*/
-public class GetRegionsFunction extends FunctionAdapter implements InternalEntity {
+public class GetRegionsFunction implements Function, InternalEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public String getId() {
+ // TODO Auto-generated method stub
+ return GetRegionsFunction.class.toString();
+ }
+
+ @Override
+ public void execute(FunctionContext functionContext) {
+ try {
+ Cache cache = CacheFactory.getAnyInstance();
+ Set<Region<?, ?>> regions = cache.rootRegions(); // should never return a null
- /**
- *
- */
- private static final long serialVersionUID = 1L;
+ if (regions == null || regions.isEmpty()) {
+ functionContext.getResultSender().lastResult(null);
+ } else {
+ Set<RegionInformation> regionInformationSet = new HashSet<>();
- @Override
- public String getId() {
- // TODO Auto-generated method stub
- return GetRegionsFunction.class.toString();
- }
-
- @Override
- public void execute(FunctionContext functionContext) {
- try {
-
- Cache cache = CacheFactory.getAnyInstance();
- Set <Region<?,?>> regions = cache.rootRegions();
-
- if (regions.isEmpty() || regions == null) {
- functionContext.getResultSender().lastResult(null);
- } else {
- //Set<RegionInformation> regionInformationSet = RegionInformation.getRegionInformation(regions, true);
- Set<RegionInformation> regionInformationSet = new HashSet<RegionInformation>();
-
- for (Region<?,?> region : regions) {
- RegionInformation regInfo = new RegionInformation(region, true);
- regionInformationSet.add(regInfo);
- }
- functionContext.getResultSender().lastResult(regionInformationSet.toArray());
- }
- } catch (CacheClosedException e) {
- functionContext.getResultSender().sendException(e);
- } catch (Exception e) {
- functionContext.getResultSender().sendException(e);
- }
- }
+ for (Region<?, ?> region : regions) {
+ RegionInformation regInfo = new RegionInformation(region, true);
+ regionInformationSet.add(regInfo);
+ }
+ functionContext.getResultSender().lastResult(regionInformationSet.toArray());
+ }
+ } catch (Exception e) {
+ functionContext.getResultSender().sendException(e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/769d9b3a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunctionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunctionJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunctionJUnitTest.java
new file mode 100644
index 0000000..6c57160
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunctionJUnitTest.java
@@ -0,0 +1,111 @@
+package org.apache.geode.management.internal.cli.functions;
+
+import static org.mockito.Mockito.*;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import org.apache.geode.CancelCriterion;
+import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.cache.DataPolicy;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionAttributes;
+import org.apache.geode.cache.Scope;
+import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.cache.execute.ResultSender;
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.cache.LocalRegion;
+import org.apache.geode.internal.cache.control.InternalResourceManager;
+import org.apache.geode.internal.security.AuthorizeRequest;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore("*.UnitTest")
+@PrepareForTest({ CacheFactory.class })
+public class GetRegionsFunctionJUnitTest {
+
+ TestResultSender testResultSender = new TestResultSender();
+ Set<Region<?, ?>> regions = new HashSet<>();
+ Set<Region<?, ?>> subregions = new HashSet<>();
+ @Mock
+ private RegionAttributes regionAttributes;
+ @Mock
+ private AuthorizeRequest authzRequest;
+ @Mock
+ private LocalRegion region;
+ @Mock
+ private GemFireCacheImpl cache;
+ @Mock
+ private InternalResourceManager internalResourceManager;
+ @Mock
+ private FunctionContext functionContext;
+ @InjectMocks
+ private GetRegionsFunction getRegionsFunction;
+
+ @Before
+ public void before() throws Exception {
+ System.setProperty(DistributionConfig.GEMFIRE_PREFIX + "statsDisabled", "true");
+ getRegionsFunction = new GetRegionsFunction();
+ MockitoAnnotations.initMocks(this);
+
+ when(this.cache.getCancelCriterion()).thenReturn(mock(CancelCriterion.class));
+ when(this.cache.getDistributedSystem()).thenReturn(mock(InternalDistributedSystem.class));
+ when(this.cache.getResourceManager()).thenReturn(this.internalResourceManager);
+ when(functionContext.getResultSender()).thenReturn(testResultSender);
+
+ PowerMockito.mockStatic(CacheFactory.class);
+ when(CacheFactory.getAnyInstance()).thenReturn(cache);
+ }
+
+ @Test
+ public void testExecuteWithoutRegions() throws Exception {
+ getRegionsFunction.execute(functionContext);
+ }
+
+ @Test
+ public void testExecuteWithRegions() throws Exception {
+ when(cache.rootRegions()).thenReturn(regions);
+ when(region.getFullPath()).thenReturn("/MyRegion");
+
+ when(region.getParentRegion()).thenReturn(null);
+ when(region.subregions(true)).thenReturn(subregions);
+ when(region.subregions(false)).thenReturn(subregions);
+ when(region.getAttributes()).thenReturn(regionAttributes);
+ when(regionAttributes.getDataPolicy()).thenReturn(mock(DataPolicy.class));
+ when(regionAttributes.getScope()).thenReturn(mock(Scope.class));
+ regions.add(region);
+ getRegionsFunction.execute(functionContext);
+ }
+
+ private static class TestResultSender implements ResultSender {
+
+ @Override
+ public void lastResult(final Object lastResult) {
+ }
+
+ @Override
+ public void sendResult(final Object oneResult) {
+ }
+
+ @Override
+ public void sendException(final Throwable t) {
+ throw new RuntimeException(t);
+ }
+ }
+
+}