You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2019/02/15 21:59:15 UTC
[geode] branch feature/GEODE-6414 updated: added unit test for
TypeRegistryTest
This is an automated email from the ASF dual-hosted git repository.
dschneider pushed a commit to branch feature/GEODE-6414
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6414 by this push:
new a7f6783 added unit test for TypeRegistryTest
a7f6783 is described below
commit a7f6783405dbc5d2239a08e0088d92b680e9b4f9
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Fri Feb 15 13:58:31 2019 -0800
added unit test for TypeRegistryTest
---
.../apache/geode/pdx/internal/TypeRegistry.java | 19 ++-
.../geode/pdx/internal/TypeRegistryTest.java | 136 +++++++++++++++++++++
2 files changed, 154 insertions(+), 1 deletion(-)
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/TypeRegistry.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/TypeRegistry.java
index f388969..f586e38 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/TypeRegistry.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/TypeRegistry.java
@@ -192,7 +192,10 @@ public class TypeRegistry {
public PdxType defineType(PdxType newType) {
Integer existingId = this.typeToId.get(newType);
if (existingId != null) {
- return this.idToType.get(existingId);
+ PdxType existingType = this.idToType.get(existingId);
+ if (existingType != null) {
+ return existingType;
+ }
}
int id = this.distributedTypeRegistry.defineType(newType);
@@ -544,4 +547,18 @@ public class TypeRegistry {
public void setPdxReadSerializedOverride(boolean overridePdxReadSerialized) {
pdxReadSerializedOverride.set(overridePdxReadSerialized);
}
+
+ // accessors for unit test
+
+ Map<Integer, PdxType> getIdToType() {
+ return idToType;
+ }
+
+ Map<PdxType, Integer> getTypeToId() {
+ return typeToId;
+ }
+
+ Map<Class<?>, PdxType> getLocalTypeIds() {
+ return localTypeIds;
+ }
}
diff --git a/geode-core/src/test/java/org/apache/geode/pdx/internal/TypeRegistryTest.java b/geode-core/src/test/java/org/apache/geode/pdx/internal/TypeRegistryTest.java
new file mode 100644
index 0000000..fdb26d0
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/pdx/internal/TypeRegistryTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.pdx.internal;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.test.junit.categories.SerializationTest;
+
+@Category({SerializationTest.class})
+public class TypeRegistryTest {
+
+ private InternalCache internalCache = mock(InternalCache.class);
+ private TypeRegistration typeRegistration = mock(TypeRegistration.class);
+ private TypeRegistry typeRegistry = new TypeRegistry(internalCache, typeRegistration);
+
+ private PdxType newType = mock(PdxType.class);
+
+ @Before
+ public void setUp() {}
+
+ @Test
+ public void defineTypeGivenANewTypeStoresItWithTheCorrectIdAndReturnsIt() {
+ when(typeRegistration.defineType(newType)).thenReturn(37);
+
+ PdxType result = typeRegistry.defineType(newType);
+
+ assertThat(result).isSameAs(newType);
+ verify(newType).setTypeId(37);
+ assertThat(typeRegistry.getIdToType().get(37)).isSameAs(newType);
+ assertThat(typeRegistry.getTypeToId().get(newType)).isSameAs(37);
+ }
+
+ @Test
+ public void defineTypeGivenANewTypeThatIsInTypeToIdButNotIdToTypeStoresItWithTheCorrectIdAndReturnsIt() {
+ when(typeRegistration.defineType(newType)).thenReturn(37);
+ typeRegistry.getTypeToId().put(newType, 37);
+ typeRegistry.getIdToType().put(37, null);
+
+ PdxType result = typeRegistry.defineType(newType);
+
+ assertThat(result).isSameAs(newType);
+ verify(newType).setTypeId(37);
+ assertThat(typeRegistry.getIdToType().get(37)).isSameAs(newType);
+ assertThat(typeRegistry.getTypeToId().get(newType)).isSameAs(37);
+ }
+
+ @Test
+ public void defineTypeGivenATypeEqualToAnExistingTypeReturnsTheExistingType() {
+ PdxType existingType = new PdxType("myClass", true);
+ PdxType equalType = new PdxType("myClass", true);
+ typeRegistry.getTypeToId().put(existingType, 37);
+ typeRegistry.getIdToType().put(37, existingType);
+
+ PdxType result = typeRegistry.defineType(equalType);
+
+ assertThat(result).isSameAs(existingType);
+ }
+
+ @Test
+ public void defineTypeGivenATypeEqualToAnExistingButNotInTypeToIdTypeReturnsTheExistingType() {
+ PdxType existingType = new PdxType("myClass", true);
+ PdxType equalType = new PdxType("myClass", true);
+ typeRegistry.getTypeToId().put(existingType, null);
+ typeRegistry.getIdToType().put(37, existingType);
+ when(typeRegistration.defineType(equalType)).thenReturn(37);
+
+ PdxType result = typeRegistry.defineType(equalType);
+
+ assertThat(result).isSameAs(existingType);
+ }
+
+ @Test
+ public void defineTypeGivenATypeNotEqualToAnExistingButWithTheSameIdThrows() {
+ PdxType existingType = mock(PdxType.class);
+ typeRegistry.getTypeToId().put(existingType, null);
+ typeRegistry.getIdToType().put(37, existingType);
+ when(typeRegistration.defineType(newType)).thenReturn(37);
+
+ assertThatThrownBy(() -> typeRegistry.defineType(newType))
+ .hasMessageContaining("Old type does not equal new type for the same id.");
+ }
+
+ @Test
+ public void defineLocalTypeGivenNullCallsDefineType() {
+ TypeRegistry spy = spy(typeRegistry);
+
+ PdxType result = spy.defineLocalType(null, newType);
+
+ assertThat(result).isSameAs(newType);
+ verify(spy).defineType(newType);
+ }
+
+ @Test
+ public void defineLocalTypeGivenNewTypeAddsItToLocalTypeIds() {
+ Object domainInstance = new Object();
+
+ PdxType result = typeRegistry.defineLocalType(domainInstance, newType);
+
+ assertThat(result).isSameAs(newType);
+ assertThat(typeRegistry.getLocalTypeIds().get(Object.class)).isSameAs(newType);
+ }
+
+ @Test
+ public void defineLocalTypeGivenExistingTypeReturnsIt() {
+ PdxType existingType = new PdxType("myClass", true);
+ PdxType equalType = new PdxType("myClass", true);
+ Object domainInstance = new Object();
+ typeRegistry.getLocalTypeIds().put(Object.class, existingType);
+
+ PdxType result = typeRegistry.defineLocalType(domainInstance, equalType);
+
+ assertThat(result).isSameAs(existingType);
+ }
+}