/* * 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.wan.misc; import org.junit.Ignore; import org.junit.experimental.categories.Category; import org.junit.Test; import static org.junit.Assert.*; import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase; import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase; import org.apache.geode.test.junit.categories.DistributedTest; import org.apache.geode.test.junit.categories.FlakyTest; import org.apache.geode.internal.cache.wan.WANTestBase; import org.apache.geode.test.dunit.IgnoredException; import org.apache.geode.test.dunit.Wait; @Category(DistributedTest.class) public class PDXNewWanDUnitTest extends WANTestBase { private static final long serialVersionUID = 1L; public PDXNewWanDUnitTest() { super(); } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> DR is defined on member * 1 on site1 4> Serial GatewaySender is defined on member 1 on site1 5> Same DR is defined on * site2 member 1 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. */ @Test public void testWANPDX_RR_SerialSender() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> DR is defined on member * 1 on site1 4> Serial GatewaySender is defined on member 1 on site1 5> Same DR is defined on * site2 member 1 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. 8> Bounce site 1 and delete all of it's data 9> Make * sure that site 1 get the the PDX types along with entries and can deserialize entries. */ @Test public void testWANPDX_RemoveRemoteData() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); // bounce vm2 vm2.invoke(() -> WANTestBase.closeCache()); vm2.invoke(() -> WANTestBase.deletePDXDir()); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 2)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 2)); } @Test public void testWANPDX_CacheWriterCheck() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> setSystemProperty("gemfire.disk.recoverValues", "false")); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); // Close VM2 cache vm2.invoke(() -> WANTestBase.closeCache()); // do some puts on VM3 and create extra pdx id vm3.invoke(() -> WANTestBase.doPutsPDXSerializable2(getTestMethodName() + "_RR", 2)); // start cache in vm2 again, now it should receive pdx id from vm3 vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); try { Wait.pause(10000); // Define a different type from vm3 vm3.invoke(() -> WANTestBase.doPutsPDXSerializable2(getTestMethodName() + "_RR", 2)); // Give the updates some time to make it over the WAN Wait.pause(10000); vm2.invoke(() -> WANTestBase.validateRegionSizeOnly_PDX(getTestMethodName() + "_RR", 2)); vm3.invoke(() -> WANTestBase.closeCache()); vm2.invoke(() -> WANTestBase.closeCache()); } finally { vm2.invoke(() -> setSystemProperty("gemfire.disk.recoverValues", "true")); } } private void setSystemProperty(String key, String value) { System.setProperty(key, value); } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> DR is defined on member * 1 on site1 4> Serial GatewaySender is defined on member 1 on site1 5> Same DR is defined on * site2 member 1 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. 8> Bounce site 1 and delete all of it's data 9> Make * some conflicting PDX registries in site 1 before the reconnect 10> Make sure we flag a warning * about the conflicting updates. */ @Test public void testWANPDX_ConflictingData() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); // bounce vm3 vm3.invoke(() -> WANTestBase.closeCache()); IgnoredException ex1 = IgnoredException.addIgnoredException("Trying to add a PDXType with the same id"); IgnoredException ex2 = IgnoredException.addIgnoredException("CacheWriterException"); IgnoredException ex3 = IgnoredException.addIgnoredException("does match the existing PDX type"); IgnoredException ex4 = IgnoredException.addIgnoredException("ServerOperationException"); IgnoredException ex5 = IgnoredException.addIgnoredException("Stopping the processor"); try { // blow away vm3's PDX data vm3.invoke(() -> WANTestBase.deletePDXDir()); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); // Define a different type from vm3 vm3.invoke(() -> WANTestBase.doPutsPDXSerializable2(getTestMethodName() + "_RR", 2)); // Give the updates some time to make it over the WAN Wait.pause(10000); vm2.invoke(() -> WANTestBase.validateRegionSizeOnly_PDX(getTestMethodName() + "_RR", 2)); vm3.invoke(() -> WANTestBase.closeCache()); } finally { ex1.remove(); ex2.remove(); ex3.remove(); ex4.remove(); ex5.remove(); } } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> Site 3 : 1 locator, 1 * member 3> DR is defined on member 1 on site1 4> Serial GatewaySender is defined on member 1 on * site1 5> Same DR is defined on site2 member 1 6> Put is done with value which is * PDXSerializable 7> Validate whether other sites member receive this put operation. */ @Test public void testWANPDX_RR_SerialSender3Sites() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); Integer tkPort = (Integer) vm2.invoke(() -> WANTestBase.createFirstRemoteLocator(3, lnPort)); createCacheInVMs(lnPort, vm3); createCacheInVMs(nyPort, vm4); createCacheInVMs(tkPort, vm5); vm3.invoke(() -> WANTestBase.createReceiver()); vm4.invoke(() -> WANTestBase.createReceiver()); vm5.invoke(() -> WANTestBase.createReceiver()); // Create all of our gateway senders vm3.invoke(() -> WANTestBase.createSender("ny", 2, false, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.createSender("tk", 3, false, 100, 10, false, false, null, true)); vm4.invoke(() -> WANTestBase.createSender("ln", 1, false, 100, 10, false, false, null, true)); vm4.invoke(() -> WANTestBase.createSender("tk", 3, false, 100, 10, false, false, null, true)); vm5.invoke(() -> WANTestBase.createSender("ln", 1, false, 100, 10, false, false, null, true)); vm5.invoke(() -> WANTestBase.createSender("ny", 2, false, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ny,tk", isOffHeap())); vm4.invoke(() -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln,tk", isOffHeap())); vm5.invoke(() -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln,ny", isOffHeap())); // Start all of the senders vm3.invoke(() -> WANTestBase.startSender("ny")); vm3.invoke(() -> WANTestBase.startSender("tk")); vm4.invoke(() -> WANTestBase.startSender("ln")); vm4.invoke(() -> WANTestBase.startSender("tk")); vm5.invoke(() -> WANTestBase.startSender("ln")); vm5.invoke(() -> WANTestBase.startSender("ny")); // Pause ln to ny. This means the PDX type will not be dispatched // to ny from ln vm3.invoke(() -> WANTestBase.pauseSender("ny")); Wait.pause(5000); // Do some puts that define a PDX type in ln vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); // Make sure that tk received the update vm5.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); // Make ny didn't receive the update because the sender is paused vm4.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 0)); // Now, do a put from tk. This serialized object will be distributed // to ny from tk, using the type defined by ln. vm5.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 2)); // Verify the ny can read the object vm4.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 2)); // Wait for vm3 to receive the update (prevents a broken pipe suspect string) vm3.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 2)); } @Test public void testWANPDX_RR_SerialSender_StartedLater() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 10)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 40)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 40)); } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> PR is defined on member * 1 on site1 4> Serial GatewaySender is defined on member 1 on site1 5> Same PR is defined on * site2 member 1 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. */ @Test public void testWANPDX_PR_SerialSender() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 1)); } @Test public void testWANPDX_PR_SerialSender_StartedLater() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 20)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 40)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 40)); } /** * Test 1> Site 1 : 1 locator, 2 member 2> Site 2 : 1 locator, 2 member 3> PR is defined on member * 1, 2 on site1 4> Serial GatewaySender is defined on member 1 on site1 5> Same PR is defined on * site2 member 1, 2 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. */ @Test public void testWANPDX_PR_MultipleVM_SerialSender() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 1, 5, isOffHeap())); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3, vm4); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 1, 5, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 1, 5, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 10)); } @Test public void testWANPDX_PR_MultipleVM_SerialSender_StartedLater() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm4.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 1, 5, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 1, 5, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 1, 5, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm4.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 40)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 40)); } /** * Test 1> Site 1 : 1 locator, 1 member 2> Site 2 : 1 locator, 1 member 3> PR is defined on member * 1 on site1 4> Parallel GatewaySender is defined on member 1 on site1 5> Same PR is defined on * site2 member 1 6> Put is done with value which is PDXSerializable 7> Validate whether other * sites member receive this put operation. */ @Test public void testWANPDX_PR_ParallelSender() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); vm3.invoke(() -> WANTestBase.createCache(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 1, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 1, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 1)); } @Test public void testWANPDX_PR_ParallelSender_47826() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 1, isOffHeap())); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 1, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 1)); } @Test public void testWANPDX_PR_ParallelSender_StartedLater() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 40)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 40)); } @Test public void testWANPDX_PR_MultipleVM_ParallelSender() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3, vm4); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm4.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); startSenderInVMs("ln", vm3, vm4); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 10)); } @Test public void testWANPDX_PR_MultipleVM_ParallelSender_StartedLater() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); vm2.invoke(() -> WANTestBase.createReceiver_PDX(nyPort)); vm3.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm4.invoke(() -> WANTestBase.createCache_PDX(lnPort)); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm4.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); startSenderInVMsAsync("ln", vm3, vm4); vm4.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 40)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 40)); } @Category(FlakyTest.class) // GEODE-1319 @Test public void testWANPDX_RR_SerialSenderWithFilter() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, new PDXGatewayEventFilter(), true)); vm2.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", null, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke( () -> WANTestBase.createReplicatedRegion(getTestMethodName() + "_RR", "ln", isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_RR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_RR", 1)); vm3.invoke(() -> PDXNewWanDUnitTest.verifyFilterInvocation(1)); } @Test public void testWANPDX_PR_MultipleVM_ParallelSenderWithFilter() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3, vm4); vm3.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, new PDXGatewayEventFilter(), true)); vm4.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, false, false, new PDXGatewayEventFilter(), true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); startSenderInVMs("ln", vm3, vm4); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 10)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 10)); vm3.invoke(() -> PDXNewWanDUnitTest.verifyFilterInvocation(5)); vm4.invoke(() -> PDXNewWanDUnitTest.verifyFilterInvocation(5)); } /** * When remote site bounces then we should send pdx event again. */ @Ignore @Test public void testWANPDX_PR_SerialSender_RemoteSite_Bounce() { Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1)); Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort)); createCacheInVMs(nyPort, vm2); vm2.invoke(() -> WANTestBase.createReceiver()); createCacheInVMs(lnPort, vm3); vm3.invoke(() -> WANTestBase.createSender("ln", 2, false, 100, 10, false, false, null, true)); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.startSender("ln")); vm3.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", "ln", 0, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.killSender()); createReceiverInVMs(vm2, vm4); vm2.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 1, 2, isOffHeap())); vm4.invoke(() -> WANTestBase.createPartitionedRegion(getTestMethodName() + "_PR", null, 1, 2, isOffHeap())); vm3.invoke(() -> WANTestBase.doPutsPDXSerializable(getTestMethodName() + "_PR", 1)); vm2.invoke(() -> WANTestBase.validateRegionSize_PDX(getTestMethodName() + "_PR", 1)); } public static void verifyFilterInvocation(int invocation) { assertEquals(((PDXGatewayEventFilter) eventFilter).beforeEnqueueInvoked, invocation); assertEquals(((PDXGatewayEventFilter) eventFilter).beforeTransmitInvoked, invocation); assertEquals(((PDXGatewayEventFilter) eventFilter).afterAckInvoked, invocation); } }