This is an automated email from the ASF dual-hosted git repository. nnag pushed a commit to branch support/1.14 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 509c96b640d1d595103f6caecffa41c31194e995 Author: Barry Oglesby <bogle...@pivotal.io> AuthorDate: Tue Jun 15 13:54:24 2021 -0700 GEODE-9295: Added dunit test (cherry picked from commit c9d4f681d0700bd5344960f2da83ae960fc0b778) --- ...LatestLastAccessTimeMessageDistributedTest.java | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageDistributedTest.java new file mode 100644 index 0000000..098b572 --- /dev/null +++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageDistributedTest.java @@ -0,0 +1,93 @@ +/* + * 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.cache; + +import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout; +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +import java.io.Serializable; +import java.util.Objects; +import java.util.Set; + +import org.junit.Rule; +import org.junit.Test; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.partition.PartitionRegionHelper; +import org.apache.geode.distributed.internal.DistributionManager; +import org.apache.geode.distributed.internal.membership.InternalDistributedMember; +import org.apache.geode.test.dunit.rules.ClusterStartupRule; +import org.apache.geode.test.dunit.rules.MemberVM; +import org.apache.geode.test.junit.rules.serializable.SerializableTestName; + +public class LatestLastAccessTimeMessageDistributedTest implements Serializable { + + @Rule + public ClusterStartupRule cluster = new ClusterStartupRule(); + + @Rule + public SerializableTestName testName = new SerializableTestName(); + + @Test + public void testSendLatestLastAccessTimeMessageToMemberWithNoRegion() { + // Start Locator + MemberVM locator = cluster.startLocatorVM(0); + + // Start servers + int locatorPort = locator.getPort(); + MemberVM server1 = + cluster.startServerVM(1, s -> s.withConnectionToLocator(locatorPort).withRegion( + RegionShortcut.PARTITION_REDUNDANT, testName.getMethodName())); + cluster.startServerVM(2, s -> s.withConnectionToLocator(locatorPort)); + + // Assign buckets to create the BucketRegions + server1.invoke(this::assignBucketsToPartitions); + + // Send LastAccessTimeMessage from server1 to server2 + server1.invoke(this::sendLastAccessTimeMessage); + } + + private void assignBucketsToPartitions() { + Cache cache = Objects.requireNonNull(ClusterStartupRule.getCache()); + PartitionedRegion pr = (PartitionedRegion) cache.getRegion(testName.getMethodName()); + PartitionRegionHelper.assignBucketsToPartitions(pr); + } + + private void sendLastAccessTimeMessage() throws InterruptedException { + // Get a BucketRegion + Cache cache = Objects.requireNonNull(ClusterStartupRule.getCache()); + PartitionedRegion pr = (PartitionedRegion) cache.getRegion(testName.getMethodName()); + BucketRegion br = pr.getBucketRegion(0); + + // Get the recipients + DistributionManager dm = br.getDistributionManager(); + Set<InternalDistributedMember> recipients = dm.getOtherNormalDistributionManagerIds(); + + // Create and sent the LatestLastAccessTimeMessage + LatestLastAccessTimeReplyProcessor replyProcessor = + new LatestLastAccessTimeReplyProcessor(dm, recipients); + dm.putOutgoing(new LatestLastAccessTimeMessage<>(replyProcessor, recipients, br, (Object) 0)); + + // Wait for the reply. Timeout if no reply is received. + boolean success = replyProcessor.waitForReplies(getTimeout().toMillis()); + + // Assert the wait was successful + assertThat(success).isTrue(); + + // Assert the latest last accessed time is 0 + assertThat(replyProcessor.getLatestLastAccessTime()).isEqualTo(0L); + } +}