Repository: incubator-geode
Updated Branches:
  refs/heads/develop aa05b5d2c -> 80026a7d6


GEODE-2013: throw IllegalStateException if resource type is missing


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/80026a7d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/80026a7d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/80026a7d

Branch: refs/heads/develop
Commit: 80026a7d63434186819dc15fc8f0c455e07286a5
Parents: aa05b5d
Author: Kirk Lund <[email protected]>
Authored: Wed Nov 2 13:01:05 2016 -0700
Committer: Kirk Lund <[email protected]>
Committed: Thu Nov 3 13:52:19 2016 -0700

----------------------------------------------------------------------
 .../internal/statistics/StatArchiveReader.java  |   5 ++
 ...veWithMissingResourceTypeRegressionTest.java |  65 +++++++++++++++++++
 ...iveWithMissingResourceTypeRegressionTest.gfs | Bin 0 -> 253 bytes
 3 files changed, 70 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/80026a7d/geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveReader.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveReader.java
 
b/geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveReader.java
index ca1a6c4..9fba511 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveReader.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/statistics/StatArchiveReader.java
@@ -3228,6 +3228,11 @@ public class StatArchiveReader implements 
StatArchiveFormat {
       if ((resourceInstId + 1) > this.resourceInstSize) {
         this.resourceInstSize = resourceInstId + 1;
       }
+      ResourceType type = resourceTypeTable[resourceTypeId];
+      if (type == null) {
+        throw new IllegalStateException(
+            "ResourceType is missing for resourceTypeId " + resourceTypeId);
+      }
       boolean loadInstance = loadInstance(name, id, 
resourceTypeTable[resourceTypeId]);
       resourceInstTable[resourceInstId] = new ResourceInst(this, 
resourceInstId, name, id,
           resourceTypeTable[resourceTypeId], loadInstance);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/80026a7d/geode-core/src/test/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
new file mode 100644
index 0000000..73d6739
--- /dev/null
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.internal.statistics;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.net.URL;
+
+@Category(IntegrationTest.class)
+public class StatArchiveWithMissingResourceTypeRegressionTest {
+
+  private static final String ARCHIVE_FILE_NAME =
+      StatArchiveWithMissingResourceTypeRegressionTest.class.getSimpleName() + 
".gfs";
+
+  private File archiveFile;
+
+  @Rule
+  public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+  @Before
+  public void setUp() throws Exception {
+    URL url = getClass().getResource(ARCHIVE_FILE_NAME);
+    assertThat(url).isNotNull(); // precondition
+
+    this.archiveFile = this.temporaryFolder.newFile(ARCHIVE_FILE_NAME);
+    FileUtils.copyURLToFile(url, this.archiveFile);
+    assertThat(this.archiveFile).exists(); // precondition
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    StatisticsTypeFactoryImpl.clear();
+  }
+
+  @Test // fixed GEODE-2013
+  public void throwsIllegalStateExceptionWithMessage() throws Exception {
+    assertThatThrownBy(() -> new StatArchiveReader(new File[] 
{this.archiveFile}, null, true))
+        .isExactlyInstanceOf(IllegalStateException.class) // was 
NullPointerException
+        .hasMessage("ResourceType is missing for resourceTypeId 0"); // was 
null
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/80026a7d/geode-core/src/test/resources/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.gfs
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/resources/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.gfs
 
b/geode-core/src/test/resources/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.gfs
new file mode 100755
index 0000000..b071642
Binary files /dev/null and 
b/geode-core/src/test/resources/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.gfs
 differ

Reply via email to