Repository: incubator-geode Updated Branches: refs/heads/feature/GEODE-2017 47d295cb2 -> cc67eddb6
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/789814d5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/789814d5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/789814d5 Branch: refs/heads/feature/GEODE-2017 Commit: 789814d5c0239d86c9a4f7970eabc0a7ad9473a7 Parents: 1a522c0 Author: Kirk Lund <[email protected]> Authored: Wed Nov 2 13:01:05 2016 -0700 Committer: Udo Kohlmeyer <[email protected]> Committed: Tue Nov 8 05:39:37 2016 +1100 ---------------------------------------------------------------------- .../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/789814d5/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/789814d5/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/789814d5/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
