/*
* 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.wancommand;
import org.apache.geode.cache.wan.GatewaySender;
import org.apache.geode.cache.wan.GatewaySender.OrderPolicy;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.internal.cache.wan.GatewaySenderException;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.result.CommandResult;
import org.apache.geode.management.internal.cli.result.TabularResultData;
import org.apache.geode.test.dunit.IgnoredException;
import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.junit.categories.DistributedTest;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import static org.apache.geode.distributed.ConfigurationProperties.*;
import static org.apache.geode.test.dunit.Assert.*;
import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
@Category(DistributedTest.class)
public class WanCommandCreateDestroyGatewaySenderDUnitTest extends WANCommandTestBase {
private static final long serialVersionUID = 1L;
private CommandResult executeCommandWithIgnoredExceptions(String command) {
final IgnoredException exln = IgnoredException.addIgnoredException("Could not connect");
try {
CommandResult commandResult = executeCommand(command);
return commandResult;
} finally {
exln.remove();
}
}
/**
* GatewaySender with all default attributes
*/
@Test
public void testCreateDestroyGatewaySenderWithDefault() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info(
"testCreateDestroyGatewaySenderWithDefault stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyGatewaySenderWithDefault failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", true, false));
vm4.invoke(() -> verifySenderState("ln", true, false));
vm5.invoke(() -> verifySenderState("ln", true, false));
doDestroyAndVerifyGatewaySender("ln", null, null, "testCreateDestroyGatewaySenderWithDefault",
Arrays.asList(vm3, vm4, vm5), 5, false);
}
/**
* + * GatewaySender with given attribute values +
*/
@Test
public void testCreateDestroyGatewaySender() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info("testCreateDestroyGatewaySender stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyGatewaySender failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", false, false));
vm4.invoke(() -> verifySenderState("ln", false, false));
vm5.invoke(() -> verifySenderState("ln", false, false));
vm3.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, null));
vm4.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, null));
vm5.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, null));
doDestroyAndVerifyGatewaySender("ln", null, null, "testCreateDestroyGatewaySender",
Arrays.asList(vm3, vm4, vm5), 5, false);
}
/**
* GatewaySender with given attribute values. Error scenario where dispatcher threads is set to
* more than 1 and no order policy provided.
*/
@Test
public void testCreateGatewaySender_Error() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info("testCreateDestroyGatewaySender stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation should fail", status.get(i).indexOf("ERROR:") != -1);
}
} else {
fail("testCreateDestroyGatewaySender failed as did not get CommandResult");
}
}
/**
* GatewaySender with given attribute values and event filters.
*/
@Test
public void testCreateDestroyGatewaySenderWithGatewayEventFilters() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__GATEWAYEVENTFILTER
+ "=org.apache.geode.cache30.MyGatewayEventFilter1,org.apache.geode.cache30.MyGatewayEventFilter2";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info("testCreateDestroyGatewaySenderWithGatewayEventFilters stringResult : "
+ strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail(
"testCreateDestroyGatewaySenderWithGatewayEventFilters failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", false, false));
vm4.invoke(() -> verifySenderState("ln", false, false));
vm5.invoke(() -> verifySenderState("ln", false, false));
List<String> eventFilters = new ArrayList<String>();
eventFilters.add("org.apache.geode.cache30.MyGatewayEventFilter1");
eventFilters.add("org.apache.geode.cache30.MyGatewayEventFilter2");
vm3.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, eventFilters, null));
vm4.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, eventFilters, null));
vm5.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, eventFilters, null));
doDestroyAndVerifyGatewaySender("ln", null, null,
"testCreateDestroyGatewaySenderWithGatewayEventFilters", Arrays.asList(vm3, vm4, vm5), 5,
false);
}
/**
* GatewaySender with given attribute values and transport filters.
*/
@Test
public void testCreateDestroyGatewaySenderWithGatewayTransportFilters() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__GATEWAYTRANSPORTFILTER
+ "=org.apache.geode.cache30.MyGatewayTransportFilter1";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter()
.info("testCreateDestroyGatewaySenderWithGatewayTransportFilters stringResult : "
+ strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail(
"testCreateDestroyGatewaySenderWithGatewayTransportFilters failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", false, false));
vm4.invoke(() -> verifySenderState("ln", false, false));
vm5.invoke(() -> verifySenderState("ln", false, false));
List<String> transportFilters = new ArrayList<String>();
transportFilters.add("org.apache.geode.cache30.MyGatewayTransportFilter1");
vm3.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, transportFilters));
vm4.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, transportFilters));
vm5.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, transportFilters));
doDestroyAndVerifyGatewaySender("ln", null, null,
"testCreateDestroyGatewaySenderWithGatewayTransportFilters", Arrays.asList(vm3, vm4, vm5),
5, false);
}
/**
* GatewaySender with given attribute values on given member.
*/
@Test
public void testCreateDestroyGatewaySender_OnMember() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
final DistributedMember vm3Member = (DistributedMember) vm3.invoke(() -> getMember());
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__MEMBER + "=" + vm3Member.getId() + " --"
+ CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter()
.info("testCreateDestroyGatewaySender_OnMember stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(1, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyGatewaySender_OnMember failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", false, false));
vm3.invoke(() -> verifySenderAttributes("ln", 2, false, true, 1000, socketReadTimeout, true,
1000, 5000, true, false, 1000, 100, 2, OrderPolicy.THREAD, null, null));
doDestroyAndVerifyGatewaySender("ln", null, vm3Member,
"testCreateDestroyGatewaySender_OnMember", Arrays.asList(vm3), 1, false);
}
/**
* GatewaySender with given attribute values on given group
*/
@Test
public void testCreateDestroyGatewaySender_Group() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCacheWithGroups(punePort, "SenderGroup1"));
vm4.invoke(() -> createCacheWithGroups(punePort, "SenderGroup1"));
vm5.invoke(() -> createCacheWithGroups(punePort, "SenderGroup1"));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__GROUP + "=SenderGroup1" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter()
.info("testCreateDestroyGatewaySender_Group stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(3, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyGatewaySender_Group failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", true, false));
vm4.invoke(() -> verifySenderState("ln", true, false));
vm5.invoke(() -> verifySenderState("ln", true, false));
doDestroyAndVerifyGatewaySender("ln", "SenderGroup1", null,
"testCreateDestroyGatewaySender_Group", Arrays.asList(vm3, vm4, vm5), 3, false);
}
/**
* GatewaySender with given attribute values on given group. Only 2 of 3 members are part of the
* group.
*/
@Test
public void testCreateDestroyGatewaySender_Group_Scenario2() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCacheWithGroups(punePort, "SenderGroup1"));
vm4.invoke(() -> createCacheWithGroups(punePort, "SenderGroup1"));
vm5.invoke(() -> createCacheWithGroups(punePort, "SenderGroup2"));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__GROUP + "=SenderGroup1" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info(
"testCreateDestroyGatewaySender_Group_Scenario2 stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(2, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyGatewaySender_Group_Scenario2 failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", true, false));
vm4.invoke(() -> verifySenderState("ln", true, false));
doDestroyAndVerifyGatewaySender("ln", "SenderGroup1", null,
"testCreateDestroyGatewaySender_Group_Scenario2", Arrays.asList(vm3, vm4), 2, false);
}
/**
* + * Parallel GatewaySender with given attribute values +
*/
@Test
public void testCreateDestroyParallelGatewaySender() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter()
.info("testCreateDestroyParallelGatewaySender stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail("testCreateDestroyParallelGatewaySender failed as did not get CommandResult");
}
vm3.invoke(() -> verifySenderState("ln", false, false));
vm4.invoke(() -> verifySenderState("ln", false, false));
vm5.invoke(() -> verifySenderState("ln", false, false));
vm3.invoke(
() -> verifySenderAttributes("ln", 2, true, true, 1000, socketReadTimeout, true, 1000, 5000,
true, false, 1000, 100, GatewaySender.DEFAULT_DISPATCHER_THREADS, null, null, null));
vm4.invoke(
() -> verifySenderAttributes("ln", 2, true, true, 1000, socketReadTimeout, true, 1000, 5000,
true, false, 1000, 100, GatewaySender.DEFAULT_DISPATCHER_THREADS, null, null, null));
vm5.invoke(
() -> verifySenderAttributes("ln", 2, true, true, 1000, socketReadTimeout, true, 1000, 5000,
true, false, 1000, 100, GatewaySender.DEFAULT_DISPATCHER_THREADS, null, null, null));
doDestroyAndVerifyGatewaySender("ln", null, null, "testCreateDestroyParallelGatewaySender",
Arrays.asList(vm3, vm4), 5, true);
}
/**
* Parallel GatewaySender with given attribute values. Provide dispatcherThreads as 2 which is not
* valid for Parallel sender.
*/
@Test
public void testCreateParallelGatewaySender_Error() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
int socketReadTimeout = GatewaySender.MINIMUM_SOCKET_READ_TIMEOUT + 1000;
String command = CliStrings.CREATE_GATEWAYSENDER + " --" + CliStrings.CREATE_GATEWAYSENDER__ID
+ "=ln" + " --" + CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__PARALLEL + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MANUALSTART + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT + "=" + socketReadTimeout + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL + "=5000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE + "=true" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS + "=false" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY + "=1000" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD + "=100" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS + "=2" + " --"
+ CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY + "=THREAD";
IgnoredException exp =
IgnoredException.addIgnoredException(GatewaySenderException.class.getName());
try {
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter()
.info("testCreateParallelGatewaySender_Error stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender creation should have failed",
status.get(i).indexOf("ERROR:") != -1);
}
} else {
fail("testCreateParallelGatewaySender_Error failed as did not get CommandResult");
}
} finally {
exp.remove();
}
}
@Test
public void testDestroyGatewaySender_NotCreatedSender() {
Integer punePort = (Integer) vm1.invoke(() -> createFirstLocatorWithDSId(1));
Properties props = getDistributedSystemProperties();
props.setProperty(MCAST_PORT, "0");
props.setProperty(DISTRIBUTED_SYSTEM_ID, "1");
props.setProperty(LOCATORS, "localhost[" + punePort + "]");
setUpJmxManagerOnVm0ThenConnect(props);
Integer nyPort = (Integer) vm2.invoke(() -> createFirstRemoteLocator(2, punePort));
vm3.invoke(() -> createCache(punePort));
vm4.invoke(() -> createCache(punePort));
vm5.invoke(() -> createCache(punePort));
// Test Destroy Command
String command =
CliStrings.DESTROY_GATEWAYSENDER + " --" + CliStrings.DESTROY_GATEWAYSENDER__ID + "=ln";
CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info(
"testDestroyGatewaySender_NotCreatedSender stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(5, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender destroy should fail", status.get(i).indexOf("ERROR:") != -1);
}
} else {
fail("testCreateDestroyParallelGatewaySender failed as did not get CommandResult");
}
}
/**
* doDestroyAndVerifyGatewaySender helper command.
*
* @param id if of the Gateway Sender
* @param group Group for the GatewaySender
* @param member Distributed Member for memeber id.
* @param testName testName for the logging
* @param vms list of vms where to verify the destroyed gateway sender
* @param size command result.
* @param isParallel true if parallel , false otherwise.
*/
private void doDestroyAndVerifyGatewaySender(final String id, final String group,
final DistributedMember member, final String testName, final List<VM> vms, final int size,
final boolean isParallel) {
String command =
CliStrings.DESTROY_GATEWAYSENDER + " --" + CliStrings.DESTROY_GATEWAYSENDER__ID + "=" + id;
if (group != null) {
command += " --" + CliStrings.DESTROY_GATEWAYSENDER__GROUP + "=" + group;
}
if (member != null) {
command += " --" + CliStrings.CREATE_GATEWAYSENDER__MEMBER + "=" + member.getId();
}
final CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
if (cmdResult != null) {
String strCmdResult = commandResultToString(cmdResult);
getLogWriter().info(testName + " stringResult : " + strCmdResult + ">>>>");
assertEquals(Result.Status.OK, cmdResult.getStatus());
TabularResultData resultData = (TabularResultData) cmdResult.getResultData();
List<String> status = resultData.retrieveAllValues("Status");
assertEquals(size, status.size());
for (int i = 0; i < status.size(); i++) {
assertTrue("GatewaySender destroy failed with: " + status.get(i),
status.get(i).indexOf("ERROR:") == -1);
}
} else {
fail(testName + " failed as did not get CommandResult");
}
for (VM vm : vms) {
vm.invoke(() -> verifySenderDestroyed(id, isParallel));
}
}
}