From 7caaa4fe75ad5481cf4f3594417fae6e8a444ac3 Mon Sep 17 00:00:00 2001 From: John Blum Date: Fri, 27 Mar 2020 17:50:06 -0700 Subject: [PATCH] DATAGEODE-318 - Introduce a CacheResolver Strategy interface for resolving GemFireCache instances. --- .../data/gemfire/CacheResolver.java | 54 ++++++++++++++++++ .../data/gemfire/CacheResolverUnitTests.java | 57 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 spring-data-geode/src/main/java/org/springframework/data/gemfire/CacheResolver.java create mode 100644 spring-data-geode/src/test/java/org/springframework/data/gemfire/CacheResolverUnitTests.java diff --git a/spring-data-geode/src/main/java/org/springframework/data/gemfire/CacheResolver.java b/spring-data-geode/src/main/java/org/springframework/data/gemfire/CacheResolver.java new file mode 100644 index 00000000..5a2d25ea --- /dev/null +++ b/spring-data-geode/src/main/java/org/springframework/data/gemfire/CacheResolver.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.data.gemfire; + +import java.util.function.Supplier; + +import org.apache.geode.cache.GemFireCache; + +/** + * Strategy interface for resolving a instance reference to a {@link GemFireCache}. + * + * @author John Blum + * @param {@link Class subclass} of {@link GemFireCache}. + * @see java.util.function.Supplier + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.client.ClientCache + * @since 2.3.0 + */ +@FunctionalInterface +public interface CacheResolver extends Supplier { + + /** + * Gets the resolved instance of the {@link GemFireCache}. + * + * @return the resolved instance of the {@link GemFireCache}. + * @see #resolve() + */ + @Override + default T get() { + return resolve(); + } + + /** + * Resolves the instance reference to the {@link GemFireCache} implementation. + * + * @return a instance reference to a {@link GemFireCache} implementation. + */ + T resolve(); + +} diff --git a/spring-data-geode/src/test/java/org/springframework/data/gemfire/CacheResolverUnitTests.java b/spring-data-geode/src/test/java/org/springframework/data/gemfire/CacheResolverUnitTests.java new file mode 100644 index 00000000..ea8db430 --- /dev/null +++ b/spring-data-geode/src/test/java/org/springframework/data/gemfire/CacheResolverUnitTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020 the original author or authors. + * + * Licensed 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 + * + * https://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.springframework.data.gemfire; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import org.junit.Test; + +import org.apache.geode.cache.GemFireCache; + +/** + * Unit Tests for {@link CacheResolver}. + * + * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.apache.geode.cache.GemFireCache + * @see org.springframework.data.gemfire.CacheResolver + * @since 2.3.0 + */ +public class CacheResolverUnitTests { + + @Test + @SuppressWarnings("rawtypes") + public void getCallsResolve() { + + GemFireCache mockCache = mock(GemFireCache.class); + + CacheResolver mockCacheResolver = mock(CacheResolver.class); + + when(mockCacheResolver.get()).thenCallRealMethod(); + when(mockCacheResolver.resolve()).thenReturn(mockCache); + + assertThat(mockCacheResolver.get()).isEqualTo(mockCache); + + verify(mockCacheResolver, times(1)).resolve(); + verifyNoInteractions(mockCache); + } +}