DATAGEODE-71 - Change all com.gemstone.gemfire package references in the RegionDataAccessTracingAspect Pointcuts to org.apache.geode.

This commit is contained in:
John Blum
2017-12-14 18:22:07 -08:00
parent db0977f8eb
commit ba841a3473
6 changed files with 644 additions and 16 deletions

View File

@@ -0,0 +1,516 @@
/*
* Copyright 2017 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
*
* 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.springframework.data.gemfire.config.annotation;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Resource;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Bean;
import org.springframework.data.gemfire.client.ClientRegionFactoryBean;
import org.springframework.data.gemfire.config.annotation.support.RegionDataAccessTracingAspect;
import org.springframework.data.gemfire.test.logging.slf4j.logback.TestAppender;
import org.springframework.data.gemfire.test.mock.annotation.EnableGemFireMockObjects;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.ClassUtils;
/**
* Unit tests for {@link RegionDataAccessTracingAspect}.
*
* @author John Blum
* @see org.junit.Test
* @see org.apache.geode.cache.GemFireCache
* @see org.apache.geode.cache.Region
* @see org.springframework.data.gemfire.client.ClientRegionFactoryBean
* @see org.springframework.data.gemfire.config.annotation.support.RegionDataAccessTracingAspect
* @see org.springframework.data.gemfire.test.logging.slf4j.logback.TestAppender
* @see org.springframework.data.gemfire.test.mock.annotation.EnableGemFireMockObjects
* @see org.springframework.test.context.ContextConfiguration
* @see org.springframework.test.context.junit4.SpringRunner
* @since 2.0.2
*/
@RunWith(SpringRunner.class)
@ContextConfiguration
public class RegionDataAccessTracingAspectUnitTests {
private static final String LOGBACK_LOGGER_CLASS_NAME = "ch.qos.logback.classic.Logger";
@BeforeClass
public static void setupBeforeTestSuite() {
assumeLogbackIsPresent();
}
private static void assumeLogbackIsPresent() {
Assume.assumeTrue(String.format("Ignoring test class [%s]; Logback is not on the classpath",
RegionDataAccessTracingAspectUnitTests.class.getName()), ClassUtils.isPresent(LOGBACK_LOGGER_CLASS_NAME,
Thread.currentThread().getContextClassLoader()));
}
@Resource(name = "ClientRegion")
@SuppressWarnings("all")
private Region<Object, Object> region;
private Runnable regionCallbackArgument(AtomicBoolean called) {
return () -> called.set(true);
}
@Test
public void logsRegionCreate() {
this.region.create("testKey", "testValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.create\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionCreate",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionCreateWithCallbackArgument() {
this.region.create("testKey", "testValue",
regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.create\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionCreateWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionGet() {
this.region.get("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.get\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionGet",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionGetAll() {
this.region.getAll(Arrays.asList("testKeyOne", "testKeyTwo", "testKeyThree"));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.getAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionGetAll",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionGetAllWithCallbackArgument() {
this.region.getAll(Arrays.asList("testKeyOne", "testKeyTwo", "testKeyThree"),
regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.getAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionGetAllWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionGetEntry() {
this.region.getEntry("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.getEntry\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionGetEntry",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionInvalidate() {
this.region.invalidate("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.invalidate\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionInvalidate",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionInvalidateWithCallbackArgument() {
this.region.invalidate("testKey", regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.invalidate\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionInvalidateWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionKeySet() {
this.region.keySet();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.keySet\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionKeySet",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionKeySetOnServer() {
this.region.keySetOnServer();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.keySetOnServer\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionKeySetOnServer",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionLocalClear() {
this.region.localClear();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.localClear\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionLocalClear",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionLocalDestroy() {
this.region.localDestroy("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.localDestroy\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionLocalDestroy",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionLocalDestroyWithCallbackArgument() {
this.region.localDestroy("testKey", regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.localDestroy\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionLocalDestroyWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionLocalInvalidate() {
this.region.localInvalidate("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.localInvalidate\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionLocalInvalidate",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionLocalInvalidateWithCallbackArgument() {
this.region.localInvalidate("testKey", regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.localInvalidate\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionLocalInvalidateWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionPut() {
this.region.put("testKey", "testValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.put\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionPut",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionPutWithCallbackArgument() {
this.region.put("testKey", "testValue", regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.put\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionPutWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionPutAll() {
this.region.putAll(Collections.emptyMap());
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.putAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionPutAll",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionPutAllWithCallbackArgument() {
this.region.putAll(Collections.emptyMap(), regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.putAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionPutAllWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionPutIfAbsent() {
this.region.putIfAbsent("testKey", "testValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.putIfAbsent\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionPutIfAbsent",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionQuery() throws Exception {
this.region.query("SELECT * FROM /Region WHERE id = ?");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.query\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionQuery",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionRemoveWithKey() {
this.region.remove("testKey");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.remove\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionRemoveWithKey",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionRemoveWithKeyAndValue() {
this.region.remove("testKey", "testValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.remove\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionRemoveWithKeyAndValue",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionRemoveAll() {
this.region.removeAll(Arrays.asList("testKeyOne", "testKeyTwo", "testKeyThree"));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.removeAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionRemoveAll",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionRemoveAllWithCallbackArgument() {
this.region.removeAll(Arrays.asList("testKeyOne", "testKeyTwo", "testKeyThree"),
regionCallbackArgument(new AtomicBoolean(false)));
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.removeAll\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionRemoveAllWithCallbackArgument",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionReplace() {
this.region.replace("testKey", "testValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.replace\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionReplace",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionReplaceWithKeyOldValueNewValue() {
this.region.replace("testKey", "testOldValue", "testNewValue");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.replace\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionReplaceWithKeyOldValueNewValue",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionSelectValue() throws Exception {
this.region.selectValue("id = ?");
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.selectValue\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionSelectValue",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionSize() throws Exception {
this.region.size();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.size\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionSize",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionSizeOnServer() throws Exception {
this.region.sizeOnServer();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.sizeOnServer\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionSizeOnServer",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void logsRegionValues() throws Exception {
this.region.values();
String logMessage = TestAppender.getInstance().lastLogMessage();
assertThat(logMessage)
.containsPattern("Region data access call \\[org.apache.geode.cache.Region.*.values\\(..\\)\\] with stack trace");
assertThat(logMessage).contains(String.format("%s.logsRegionValues",
RegionDataAccessTracingAspectUnitTests.class.getName()));
}
@Test
public void doesNotLogRegionGetName() {
this.region.getName();
assertThat(TestAppender.getInstance().lastLogMessage()).isNull();
}
@ClientCacheApplication
@EnableGemFireMockObjects
@EnableRegionDataAccessTracing
static class TestConfiguration {
@Bean("ClientRegion")
@SuppressWarnings("unused")
public ClientRegionFactoryBean<Object, Object> clientRegion(GemFireCache gemfireCache) {
ClientRegionFactoryBean<Object, Object> clientRegion = new ClientRegionFactoryBean<>();
clientRegion.setCache(gemfireCache);
clientRegion.setClose(false);
clientRegion.setShortcut(ClientRegionShortcut.LOCAL);
return clientRegion;
}
}
}

View File

@@ -0,0 +1,75 @@
/*
* Copyright 2017 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
*
* 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.springframework.data.gemfire.test.logging.slf4j.logback;
import static org.springframework.data.gemfire.util.RuntimeExceptionFactory.newIllegalStateException;
import java.util.Optional;
import java.util.Stack;
import java.util.concurrent.atomic.AtomicReference;
import org.springframework.util.StringUtils;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.AppenderBase;
/**
* The {@link TestAppender} class is a SLF4J, Logback {@link Appender} implementation used for testing purposes.
*
* @author John Blum
* @see ch.qos.logback.core.Appender
* @see ch.qos.logback.core.AppenderBase
* @since 2.0.2
*/
@SuppressWarnings("unused")
public class TestAppender extends AppenderBase<ILoggingEvent> implements Appender<ILoggingEvent> {
private static final AtomicReference<TestAppender> INSTANCE = new AtomicReference<>(null);
private static final Stack<String> logMessages = new Stack<>();
public static TestAppender getInstance() {
return Optional.ofNullable(INSTANCE.get())
.orElseThrow(() -> newIllegalStateException("[%s] was not properly configured",
TestAppender.class.getName()));
}
public TestAppender() {
INSTANCE.compareAndSet(null, this);
}
@Override
protected void append(ILoggingEvent event) {
Optional.ofNullable(event)
.map(ILoggingEvent::getFormattedMessage)
.filter(StringUtils::hasText)
.ifPresent(logMessages::push);
}
public String lastLogMessage() {
synchronized (logMessages) {
return (logMessages.empty() ? null : logMessages.pop());
}
}
public void clear() {
logMessages.clear();
}
}

View File

@@ -1326,7 +1326,8 @@ public abstract class MockGemFireObjectsSupport extends MockObjectsSupport {
data.get(invocation.<K>getArgument(0)));
when(mockRegion.getEntry(ArgumentMatchers.<K>any())).thenAnswer(invocation ->
data.entrySet().stream().filter(entry -> entry.getKey().equals(invocation.getArgument(0))).findFirst());
data.entrySet().stream().filter(entry -> entry.getKey().equals(invocation.getArgument(0)))
.findFirst().orElse(null));
when(mockRegion.put(any(), any())).thenAnswer(invocation ->
data.put(invocation.getArgument(0), invocation.getArgument(1)));