blob: 312177837de6b9cea6c55455e45701cb73c452a4 [file] [log] [blame]
/*
* 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.
*/
namespace Apache.Geode.Client.UnitTests
{
using NUnit.Framework;
using DUnitFramework;
using Client;
[TestFixture]
[Category("group4")]
[Category("unicast_only")]
[Category("generics")]
public class RegionFailoverTests : ThinClientRegionSteps
{
#region Private members
private UnitProcess _mClient1, _mClient2;
#endregion
protected override ClientBase[] GetClients()
{
_mClient1 = new UnitProcess();
_mClient2 = new UnitProcess();
return new ClientBase[] { _mClient1, _mClient2 };
}
[TestFixtureTearDown]
public override void EndTests()
{
CacheHelper.StopJavaServers();
base.EndTests();
}
[TearDown]
public override void EndTest()
{
try
{
_mClient1.Call(DestroyRegions);
_mClient2.Call(DestroyRegions);
CacheHelper.ClearEndpoints();
CacheHelper.ClearLocators();
}
finally
{
CacheHelper.StopJavaServers();
CacheHelper.StopJavaLocators();
}
base.EndTest();
}
private void RegexInterestAllStep2() //client 2 //pxr2
{
Util.Log("RegexInterestAllStep2 Enters.");
var region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
var region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
//CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]);
//CreateEntry(m_regionNames[1], m_keys[1], m_vals[1]);
region0.GetSubscriptionService().RegisterAllKeys(false, true);
region1.GetSubscriptionService().RegisterAllKeys(false, true);
if (region0.Count != 1 || region1.Count != 1)
{
Assert.Fail("Expected one entry in region");
}
Util.Log("RegexInterestAllStep2 complete.");
}
private void RegexInterestAllStep3(string locators)
{
var region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
var region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
region0.GetSubscriptionService().UnregisterAllKeys();
region1.GetSubscriptionService().UnregisterAllKeys();
region0.GetLocalView().DestroyRegion();
region1.GetLocalView().DestroyRegion();
CreateTCRegions_Pool(RegionNames, locators, "__TESTPOOL1_", true);
region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
CreateEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
region0.GetSubscriptionService().RegisterRegex(".*", false, true);
region1.GetSubscriptionService().RegisterRegex(".*", false, true);
if (region0.Count != 1)
{
Assert.Fail("Expected one entry in region");
}
if (region1.Count != 1)
{
Assert.Fail("Expected one entry in region");
}
VerifyCreated(m_regionNames[0], m_keys[0]);
VerifyCreated(m_regionNames[1], m_keys[2]);
VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2]);
Util.Log("RegexInterestAllStep3 complete.");
}
private void RegexInterestAllStep4()
{
var region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
region0.GetSubscriptionService().RegisterAllKeys(false, false);
if (region0.Count != 1)
{
Assert.Fail("Expected one entry in region");
}
if (!region0.ContainsKey(m_keys[0]))
{
Assert.Fail("Expected region to contain the key");
}
if (region0.ContainsValueForKey(m_keys[0]))
{
Assert.Fail("Expected region to not contain the value");
}
var region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
region1.GetSubscriptionService().RegisterRegex(".*", false, false);
if (region1.Count != 1)
{
Assert.Fail("Expected one entry in region");
}
if (!region1.ContainsKey(m_keys[2]))
{
Assert.Fail("Expected region to contain the key");
}
if (region1.ContainsValueForKey(m_keys[2]))
{
Assert.Fail("Expected region to not contain the value");
}
CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]);
UpdateEntry(m_regionNames[0], m_keys[0], m_vals[0], false);
CreateEntry(m_regionNames[1], m_keys[3], m_vals[3]);
}
private void RegexInterestAllStep5()
{
var region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
var region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
if (region1.Count != 2 || region0.Count != 2)
{
Assert.Fail("Expected two entry in region");
}
VerifyCreated(m_regionNames[0], m_keys[0]);
VerifyCreated(m_regionNames[1], m_keys[2]);
VerifyEntry(m_regionNames[0], m_keys[0], m_vals[0]);
VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1]);
VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2]);
VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3]);
}
private void RegexInterestAllStep6()
{
UpdateEntry(m_regionNames[0], m_keys[0], m_nvals[0], false);
UpdateEntry(m_regionNames[1], m_keys[2], m_nvals[2], false);
}
private void RegexInterestAllStep7() //client 2
{
VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1], false);
VerifyEntry(m_regionNames[1], m_keys[2], m_nvals[2]);
VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3], false);
}
private void RegexInterestAllStep8()
{
var region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
var region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
region0.GetSubscriptionService().UnregisterAllKeys();
region1.GetSubscriptionService().UnregisterAllKeys();
}
private void RegexInterestAllStep9()
{
UpdateEntry(m_regionNames[0], m_keys[0], m_vals[0], false);
VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1], false);
UpdateEntry(m_regionNames[1], m_keys[2], m_vals[2], false);
VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3], false);
}
private void RegexInterestAllStep10()
{
VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1]);
VerifyEntry(m_regionNames[1], m_keys[2], m_nvals[2]);
VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3]);
}
private void RunFailover()
{
CacheHelper.SetupJavaServers(true, "cacheserver.xml", "cacheserver2.xml");
CacheHelper.StartJavaLocator(1, "GFELOC");
Util.Log("Locator 1 started.");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
_mClient1.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", false);
Util.Log("StepOne (pool locators) complete.");
_mClient2.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", false);
Util.Log("StepTwo (pool locators) complete.");
_mClient1.Call(StepThree);
Util.Log("StepThree complete.");
_mClient2.Call(StepFour);
Util.Log("StepFour complete.");
CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1);
Util.Log("Cacheserver 2 started.");
CacheHelper.StopJavaServer(1);
Util.Log("Cacheserver 1 stopped.");
_mClient1.Call(StepFiveFailover);
Util.Log("StepFive complete.");
_mClient2.Call(StepSix, false);
Util.Log("StepSix complete.");
_mClient1.Call(Close);
Util.Log("Client 1 closed");
_mClient2.Call(Close);
Util.Log("Client 2 closed");
CacheHelper.StopJavaServer(2);
Util.Log("Cacheserver 2 stopped.");
CacheHelper.StopJavaLocator(1);
Util.Log("Locator 1 stopped.");
CacheHelper.ClearEndpoints();
CacheHelper.ClearLocators();
}
private void RunFailover2()
{
// This test is for client failover with client notification.
CacheHelper.SetupJavaServers(true, "cacheserver.xml", "cacheserver2.xml");
CacheHelper.StartJavaLocator(1, "GFELOC");
Util.Log("Locator 1 started.");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
_mClient1.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", true);
Util.Log("StepOne (pool locators) complete.");
_mClient2.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", true);
Util.Log("StepTwo (pool locators) complete.");
_mClient1.Call(RegisterAllKeysR0WithoutValues);
_mClient1.Call(RegisterAllKeysR1WithoutValues);
_mClient2.Call(RegisterAllKeysR0WithoutValues);
_mClient2.Call(RegisterAllKeysR1WithoutValues);
_mClient1.Call(StepThree);
Util.Log("StepThree complete.");
_mClient2.Call(StepFour);
Util.Log("StepFour complete.");
CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1);
Util.Log("Cacheserver 2 started.");
CacheHelper.StopJavaServer(1);
Util.Log("Cacheserver 1 stopped.");
_mClient1.Call(CheckServerKeys);
_mClient1.Call(StepFive, false);
Util.Log("StepFive complete.");
_mClient2.Call(StepSixNotify, false);
Util.Log("StepSix complete.");
_mClient1.Call(StepSevenNotify, false);
Util.Log("StepSeven complete.");
_mClient2.Call(StepEightNotify, false);
Util.Log("StepEight complete.");
_mClient1.Call(StepNineNotify, false);
Util.Log("StepNine complete.");
_mClient2.Call(StepTen);
Util.Log("StepTen complete.");
_mClient1.Call(StepEleven);
Util.Log("StepEleven complete.");
_mClient1.Call(Close);
Util.Log("Client 1 closed");
_mClient2.Call(Close);
Util.Log("Client 2 closed");
CacheHelper.StopJavaServer(2);
Util.Log("Cacheserver 2 stopped.");
CacheHelper.StopJavaLocator(1);
Util.Log("Locator 1 stopped.");
CacheHelper.ClearEndpoints();
CacheHelper.ClearLocators();
}
private void RunFailover3()
{
CacheHelper.SetupJavaServers(true,
"cacheserver.xml", "cacheserver2.xml", "cacheserver3.xml");
CacheHelper.StartJavaLocator(1, "GFELOC");
Util.Log("Locator 1 started.");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
_mClient1.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", false);
Util.Log("StepOne (pool locators) complete.");
_mClient2.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", false);
Util.Log("StepTwo (pool locators) complete.");
_mClient1.Call(StepThree);
Util.Log("StepThree complete.");
_mClient2.Call(StepFour);
Util.Log("StepFour complete.");
CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1);
Util.Log("Cacheserver 2 started.");
CacheHelper.StartJavaServerWithLocators(3, "GFECS3", 1);
Util.Log("Cacheserver 3 started.");
CacheHelper.StopJavaServer(1);
Util.Log("Cacheserver 1 stopped.");
_mClient1.Call(StepFive, false);
Util.Log("StepFive complete.");
_mClient2.Call(StepSix, false);
Util.Log("StepSix complete.");
_mClient1.Call(Close);
Util.Log("Client 1 closed");
_mClient2.Call(Close);
Util.Log("Client 2 closed");
CacheHelper.StopJavaServer(2);
Util.Log("Cacheserver 2 stopped.");
CacheHelper.StopJavaServer(3);
Util.Log("Cacheserver 3 stopped.");
CacheHelper.StopJavaLocator(1);
Util.Log("Locator 1 stopped.");
CacheHelper.ClearEndpoints();
CacheHelper.ClearLocators();
}
private void RunFailoverInterestAll()
{
RunFailoverInterestAll(false);
}
private void RunFailoverInterestAll(bool ssl)
{
CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription.xml",
"cacheserver_notify_subscription2.xml");
CacheHelper.StartJavaLocator(1, "GFELOC", null, ssl);
Util.Log("Locator 1 started.");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1, ssl);
Util.Log("Cacheserver 1 started.");
_mClient1.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", true, ssl);
_mClient1.Call(StepThree);
Util.Log("StepThree complete.");
_mClient2.Call(CreateTCRegions_Pool, RegionNames,
CacheHelper.Locators, "__TESTPOOL1_", true, ssl);
Util.Log("CreateTCRegions complete.");
_mClient2.Call(RegexInterestAllStep2);
Util.Log("RegexInterestAllStep2 complete.");
_mClient2.Call(RegexInterestAllStep3, CacheHelper.Locators);
Util.Log("RegexInterestAllStep3 complete.");
_mClient1.Call(RegexInterestAllStep4);
Util.Log("RegexInterestAllStep4 complete.");
_mClient2.Call(RegexInterestAllStep5);
Util.Log("RegexInterestAllStep5 complete.");
CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1, ssl);
CacheHelper.StopJavaServer(1); //failover happens
Util.Log("Cacheserver 2 started and failover forced");
_mClient1.Call(RegexInterestAllStep6);
Util.Log("RegexInterestAllStep6 complete.");
System.Threading.Thread.Sleep(5000); // sleep to let updates arrive
_mClient2.Call(RegexInterestAllStep7);
Util.Log("RegexInterestAllStep7 complete.");
_mClient2.Call(RegexInterestAllStep8);
Util.Log("RegexInterestAllStep8 complete.");
_mClient1.Call(RegexInterestAllStep9);
Util.Log("RegexInterestAllStep9 complete.");
_mClient2.Call(RegexInterestAllStep10);
Util.Log("RegexInterestAllStep10 complete.");
_mClient1.Call(Close);
Util.Log("Client 1 closed");
_mClient2.Call(Close);
Util.Log("Client 2 closed");
CacheHelper.StopJavaServer(2);
Util.Log("Cacheserver 2 stopped.");
CacheHelper.StopJavaLocator(1, true, ssl);
Util.Log("Locator 1 stopped.");
CacheHelper.ClearEndpoints();
CacheHelper.ClearLocators();
}
#region Tests
[Test]
public void Failover()
{
RunFailover();
}
[Test]
public void Failover2()
{
RunFailover2();
}
[Test]
public void Failover3()
{
RunFailover3();
}
[Test]
public void FailOverInterestAll()
{
RunFailoverInterestAll();
}
#endregion
}
}