| /* |
| * 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. |
| */ |
| |
| using System; |
| using System.Collections.Generic; |
| using System.Threading; |
| |
| namespace Apache.Geode.Client.UnitTests |
| { |
| using NUnit.Framework; |
| using Apache.Geode.DUnitFramework; |
| using Apache.Geode.Client.Tests; |
| using Apache.Geode.Client; |
| |
| using Region = Apache.Geode.Client.IRegion<Object, Object>; |
| |
| [Ignore("broken")] |
| [TestFixture] |
| [Category("group4")] |
| [Category("unicast_only")] |
| [Category("generics")] |
| public class ThinClientHARegionTests : ThinClientRegionSteps |
| { |
| #region Private members |
| |
| private UnitProcess m_client1, m_client2, m_client3; |
| private string[] m_regexes = { "Key.*1", "Key.*2", "Key.*3", "Key.*4" }; |
| |
| private static string QueryRegionName = "Portfolios"; |
| |
| #endregion |
| |
| protected override string ExtraPropertiesFile |
| { |
| get |
| { |
| return "geode.properties.mixed"; |
| } |
| } |
| |
| protected override ClientBase[] GetClients() |
| { |
| m_client1 = new UnitProcess(); |
| m_client2 = new UnitProcess(); |
| m_client3 = new UnitProcess(); |
| return new ClientBase[] { m_client1, m_client2, m_client3 }; |
| } |
| |
| [TearDown] |
| public override void EndTest() |
| { |
| try |
| { |
| m_client1.Call(CacheHelper.Close); |
| m_client2.Call(CacheHelper.Close); |
| m_client3.Call(CacheHelper.Close); |
| CacheHelper.ClearEndpoints(); |
| } |
| finally |
| { |
| CacheHelper.StopJavaServers(); |
| } |
| base.EndTest(); |
| } |
| |
| #region Various steps for HA tests |
| |
| public void InitClient_Pool(string locators, int redundancyLevel) |
| { |
| CacheHelper.CreatePool<object, object>("__TESTPOOL1_", locators, null, redundancyLevel, true); |
| } |
| |
| public void InitClientForEventId_Pool(string locators, bool notification, |
| int redundancyLevel, TimeSpan ackInterval, TimeSpan dupCheckLife) |
| { |
| CacheHelper.Init(); |
| CacheHelper.CreatePool<object, object>("__TESTPOOL1_", locators, null, |
| redundancyLevel, notification, ackInterval, dupCheckLife); |
| } |
| |
| public void InitClientXml(string cacheXml) |
| { |
| CacheHelper.InitConfig(cacheXml); |
| } |
| |
| public void InitClientXml(string cacheXml, int serverport1, int serverport2) |
| { |
| CacheHelper.HOST_PORT_1 = serverport1; |
| CacheHelper.HOST_PORT_2 = serverport2; |
| CacheHelper.InitConfig(cacheXml); |
| } |
| |
| public void CreateEntriesForEventId(int sleep) |
| { |
| IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| |
| for (int value = 1; value <= 100; value++) |
| { |
| region1[m_keys[0]] = value; |
| Thread.Sleep(sleep); |
| region1[m_keys[1]] = value; |
| Thread.Sleep(sleep); |
| region1[m_keys[2]] = value; |
| Thread.Sleep(sleep); |
| region1[m_keys[3]] = value; |
| Thread.Sleep(sleep); |
| region2[m_keys[0]] = value; |
| Thread.Sleep(sleep); |
| region2[m_keys[1]] = value; |
| Thread.Sleep(sleep); |
| region2[m_keys[2]] = value; |
| Thread.Sleep(sleep); |
| region2[m_keys[3]] = value; |
| Thread.Sleep(sleep); |
| } |
| } |
| |
| public void CheckClientForEventId() |
| { |
| IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| |
| DupListener<object, object> checker1 = region1.Attributes.CacheListener as DupListener<object, object>; |
| DupListener<object, object> checker2 = region2.Attributes.CacheListener as DupListener<object, object>; |
| |
| Util.Log("Validating checker1 cachelistener"); |
| checker1.validate(); |
| Util.Log("Validating checker2 cachelistener"); |
| checker2.validate(); |
| } |
| |
| public void InitDupListeners() |
| { |
| IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| |
| region1.AttributesMutator.SetCacheListener(DupListener<object, object>.Create()); |
| region2.AttributesMutator.SetCacheListener(DupListener<object, object>.Create()); |
| |
| Thread.Sleep(5000); |
| |
| region1.GetSubscriptionService().RegisterAllKeys(); |
| region2.GetSubscriptionService().RegisterAllKeys(); |
| } |
| |
| public void CreateHATCRegions(string[] regionNames, bool useList, |
| string locators, bool clientNotification, bool create) |
| { |
| if (create) |
| { |
| CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, true, |
| null, locators, "__TESTPOOL1_", clientNotification); |
| CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, true, |
| null, locators, "__TESTPOOL1_", clientNotification); |
| } |
| m_regionNames = regionNames; |
| } |
| |
| /* |
| public void CreateCPPRegion(string regionName) |
| { |
| CacheHelper.CreateTCRegion(regionName, true, true, |
| null, "none", false); |
| } |
| * */ |
| |
| public void CreateMixedEntry(string regionName, string key, string val) |
| { |
| CreateEntry(regionName, key, val); |
| } |
| |
| public void DoNetsearchMixed(string regionName, string key, string val, bool checkNoKey) |
| { |
| DoNetsearch(regionName, key, val, checkNoKey); |
| } |
| |
| public void UpdateEntryMixed(string regionName, string key, string val, bool checkVal) |
| { |
| UpdateEntry(regionName, key, val, checkVal); |
| } |
| |
| public void LocalDestroyEntry(string regionName, string key) |
| { |
| Util.Log("Locally Destroying entry -- key: {0} in region {1}", |
| key, regionName); |
| |
| // Destroy entry, verify entry is destroyed |
| Region region = CacheHelper.GetVerifyRegion<object, object>(regionName); |
| Assert.IsTrue(region.ContainsKey(key), "Key should have been found in region."); |
| region.GetLocalView().Remove(key); |
| VerifyDestroyed(regionName, key); |
| } |
| |
| public void Create2Vals(bool even) |
| { |
| if (even) |
| { |
| CreateEntry(m_regionNames[0], m_keys[0], m_vals[0]); |
| CreateEntry(m_regionNames[1], m_keys[2], m_vals[2]); |
| } |
| else |
| { |
| CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]); |
| CreateEntry(m_regionNames[1], m_keys[3], m_vals[3]); |
| } |
| } |
| |
| public void CreateVals() |
| { |
| Create2Vals(true); |
| Create2Vals(false); |
| } |
| |
| public void VerifyValCreations(bool even) |
| { |
| if (even) |
| { |
| VerifyCreated(m_regionNames[0], m_keys[0]); |
| VerifyCreated(m_regionNames[1], m_keys[2]); |
| } |
| else |
| { |
| VerifyCreated(m_regionNames[0], m_keys[1]); |
| VerifyCreated(m_regionNames[1], m_keys[3]); |
| } |
| } |
| |
| public void VerifyTallies() |
| { |
| IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| |
| TallyLoader<object, object> loader1 = (TallyLoader<object, object>)region1.Attributes.CacheLoader; |
| TallyListener<object, object> listener1 = (TallyListener<object, object>) region1.Attributes.CacheListener; |
| TallyWriter<object, object> writer1 = (TallyWriter<object, object>)region1.Attributes.CacheWriter; |
| TallyResolver<object, object> resolver1 = (TallyResolver<object, object>) region1.Attributes.PartitionResolver; |
| |
| TallyLoader<object, object> loader2 = (TallyLoader<object, object>)region2.Attributes.CacheLoader; |
| TallyListener<object, object> listener2 = (TallyListener<object, object>)region2.Attributes.CacheListener; |
| TallyWriter<object, object> writer2 = (TallyWriter<object, object>)region2.Attributes.CacheWriter; |
| TallyResolver<object, object> resolver2 = (TallyResolver<object, object>)region2.Attributes.PartitionResolver; |
| |
| loader1.ShowTallies(); |
| writer1.ShowTallies(); |
| listener1.ShowTallies(); |
| resolver1.ShowTallies(); |
| |
| loader2.ShowTallies(); |
| writer2.ShowTallies(); |
| listener2.ShowTallies(); |
| resolver2.ShowTallies(); |
| |
| // We don't assert for partition resolver because client metadata service may |
| // not have fetched PR single hop info to trigger the resolver. |
| |
| Assert.AreEqual(1, loader1.ExpectLoads(1)); |
| //Assert.AreEqual(1, resolver1.ExpectLoads(1)); |
| Assert.AreEqual(1, writer1.ExpectCreates(1)); |
| Assert.AreEqual(0, writer1.ExpectUpdates(0)); |
| Assert.AreEqual(2, listener1.ExpectCreates(2)); |
| Assert.AreEqual(1, listener1.ExpectUpdates(1)); |
| |
| Assert.AreEqual(1, loader2.ExpectLoads(1)); |
| //Assert.AreEqual(1, resolver2.ExpectLoads(1)); |
| Assert.AreEqual(1, writer2.ExpectCreates(1)); |
| Assert.AreEqual(0, writer2.ExpectUpdates(0)); |
| Assert.AreEqual(2, listener2.ExpectCreates(2)); |
| Assert.AreEqual(1, listener2.ExpectUpdates(1)); |
| } |
| |
| public void UpdateVals() |
| { |
| UpdateEntry(m_regionNames[0], m_keys[0], m_vals[0], true); |
| UpdateEntry(m_regionNames[0], m_keys[1], m_vals[1], true); |
| UpdateEntry(m_regionNames[1], m_keys[2], m_vals[2], true); |
| UpdateEntry(m_regionNames[1], m_keys[3], m_vals[3], true); |
| } |
| |
| public void Update2NVals(bool even, bool checkVal) |
| { |
| if (even) |
| { |
| UpdateEntry(m_regionNames[0], m_keys[0], m_nvals[0], checkVal); |
| UpdateEntry(m_regionNames[1], m_keys[2], m_nvals[2], checkVal); |
| } |
| else |
| { |
| UpdateEntry(m_regionNames[0], m_keys[1], m_nvals[1], checkVal); |
| UpdateEntry(m_regionNames[1], m_keys[3], m_nvals[3], checkVal); |
| } |
| } |
| |
| public void UpdateNVals(bool checkVal) |
| { |
| Update2NVals(true, checkVal); |
| Update2NVals(false, checkVal); |
| } |
| |
| public void Verify2Vals(bool even) |
| { |
| if (even) |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_vals[0]); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2]); |
| } |
| else |
| { |
| VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1]); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3]); |
| } |
| } |
| |
| public void VerifyVals() |
| { |
| Verify2Vals(true); |
| Verify2Vals(false); |
| } |
| |
| public void Verify2NVals(bool even) |
| { |
| if (even) |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_nvals[2]); |
| } |
| else |
| { |
| VerifyEntry(m_regionNames[0], m_keys[1], m_nvals[1]); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_nvals[3]); |
| } |
| } |
| |
| public void DoNetsearch2Vals(bool even) |
| { |
| if (even) |
| { |
| DoNetsearch(m_regionNames[0], m_keys[0], m_vals[0], true); |
| DoNetsearch(m_regionNames[1], m_keys[2], m_vals[2], true); |
| } |
| else |
| { |
| DoNetsearch(m_regionNames[0], m_keys[1], m_vals[1], true); |
| DoNetsearch(m_regionNames[1], m_keys[3], m_vals[3], true); |
| } |
| } |
| |
| public void DoCacheLoad2Vals(bool even) |
| { |
| if (even) |
| { |
| DoCacheLoad(m_regionNames[0], m_keys[0], m_vals[0], true); |
| DoCacheLoad(m_regionNames[1], m_keys[2], m_vals[2], true); |
| } |
| else |
| { |
| DoCacheLoad(m_regionNames[0], m_keys[1], m_vals[1], true); |
| DoCacheLoad(m_regionNames[1], m_keys[3], m_vals[3], true); |
| } |
| } |
| |
| public void DoNetsearchVals() |
| { |
| DoNetsearch2Vals(true); |
| DoNetsearch2Vals(false); |
| } |
| |
| public void VerifyNVals() |
| { |
| Verify2NVals(true); |
| Verify2NVals(false); |
| } |
| |
| public void VerifyNValsVals() |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0], true); |
| VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1], true); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_nvals[2], true); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3], true); |
| } |
| |
| public void VerifyNValVals() |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0], true); |
| VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1], true); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2], true); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_vals[3], true); |
| } |
| |
| public void VerifyValsNVals() |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_vals[0], true); |
| VerifyEntry(m_regionNames[0], m_keys[1], m_nvals[1], true); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2], true); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_nvals[3], true); |
| } |
| |
| public void VerifyMixedNVals() |
| { |
| VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0], true); |
| VerifyEntry(m_regionNames[0], m_keys[1], m_vals[1], true); |
| VerifyEntry(m_regionNames[1], m_keys[2], m_vals[2], true); |
| VerifyEntry(m_regionNames[1], m_keys[3], m_nvals[3], true); |
| } |
| |
| public void RegisterKeysException(string key0, string key1) |
| { |
| Region region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| Region region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| if (key0 != null) |
| { |
| region0.GetSubscriptionService().RegisterKeys(new string[] {key0 }); |
| } |
| if (key1 != null) |
| { |
| region1.GetSubscriptionService().RegisterKeys(new string[] {key1 }); |
| } |
| } |
| |
| public void RegisterRegexesException(string regex0, string regex1) |
| { |
| if (regex0 != null) |
| { |
| Region region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); |
| region0.GetSubscriptionService().RegisterRegex(regex0); |
| } |
| if (regex1 != null) |
| { |
| Region region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); |
| region1.GetSubscriptionService().RegisterRegex(regex1); |
| } |
| } |
| |
| public void DistOpsCommonSteps(bool clientNotification) |
| { |
| DistOpsCommonSteps(clientNotification, true); |
| } |
| |
| public void DistOpsCommonSteps(bool clientNotification, bool createRegions) |
| { |
| m_client1.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, clientNotification, createRegions); |
| m_client1.Call(Create2Vals, true); |
| Util.Log("StepOne complete."); |
| |
| m_client2.Call(CreateHATCRegions, RegionNames, false, |
| CacheHelper.Locators, !clientNotification, createRegions); |
| m_client2.Call(Create2Vals, false); |
| Util.Log("StepTwo complete."); |
| |
| m_client1.Call(DoNetsearch2Vals, false); |
| m_client1.Call(RegisterKeys, m_keys[1], m_keys[3]); |
| Util.Log("StepThree complete."); |
| |
| m_client2.Call(CheckServerKeys); |
| m_client2.Call(DoNetsearch2Vals, true); |
| m_client2.Call(RegisterKeys, m_keys[0], m_keys[2]); |
| Util.Log("StepFour complete."); |
| |
| m_client1.Call(Update2NVals, true, true); |
| Util.Log("StepFive complete."); |
| |
| m_client2.Call(Verify2NVals, true); |
| m_client2.Call(Update2NVals, false, true); |
| Util.Log("StepSix complete."); |
| |
| m_client1.Call(Verify2NVals, false); |
| Util.Log("StepSeven complete."); |
| } |
| |
| public void FailoverCommonSteps(int redundancyLevel, bool useRegexes) |
| { |
| CacheHelper.SetupJavaServers(true, |
| "cacheserver_notify_subscription.xml", |
| "cacheserver_notify_subscription2.xml", |
| "cacheserver_notify_subscription3.xml"); |
| |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| Util.Log("Locator started"); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| m_client1.Call(InitClient_Pool, CacheHelper.Locators, redundancyLevel); |
| m_client1.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, useRegexes, true); |
| Util.Log("StepOne complete."); |
| |
| m_client2.Call(InitClient_Pool, CacheHelper.Locators, redundancyLevel); |
| m_client2.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, !useRegexes, true); |
| Util.Log("StepTwo complete."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| if (redundancyLevel > 1) |
| { |
| if (useRegexes) |
| { |
| m_client2.Call(RegisterRegexesException, m_regexes[0], m_regexes[2]); |
| } |
| else |
| { |
| m_client2.Call(RegisterKeysException, m_keys[0], m_keys[2]); |
| } |
| } |
| else |
| { |
| if (useRegexes) |
| { |
| m_client2.Call(RegisterRegexes, m_regexes[0], m_regexes[2]); |
| } |
| else |
| { |
| m_client2.Call(RegisterKeys, m_keys[0], m_keys[2]); |
| } |
| } |
| Util.Log("RegisterKeys done."); |
| |
| m_client1.Call(CreateVals); |
| Util.Log("StepThree complete."); |
| |
| m_client2.Call(VerifyValCreations, true); |
| m_client2.Call(Verify2Vals, true); |
| m_client2.Call(DoNetsearch2Vals, false); |
| Util.Log("StepFour complete."); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| //For Failover to complete. |
| Thread.Sleep(5000); |
| |
| m_client1.Call(CheckServerKeys); |
| m_client1.Call(UpdateNVals, true); |
| Thread.Sleep(1000); |
| Util.Log("StepFive complete."); |
| |
| m_client2.Call(VerifyNValsVals); |
| Util.Log("StepSix complete."); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| //For Failover to complete. |
| Thread.Sleep(5000); |
| |
| CacheHelper.StartJavaServerWithLocators(3, "GFECS3", 1); |
| Util.Log("Cacheserver 3 started."); |
| |
| m_client1.Call(UpdateVals); |
| Thread.Sleep(1000); |
| Util.Log("StepSeven complete."); |
| |
| m_client2.Call(VerifyVals); |
| if (useRegexes) |
| { |
| m_client2.Call(UnregisterRegexes, (string)null, m_regexes[2]); |
| } |
| else |
| { |
| m_client2.Call(UnregisterKeys, (string)null, m_keys[2]); |
| } |
| Util.Log("StepEight complete."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| CacheHelper.StopJavaServer(3); |
| Util.Log("Cacheserver 3 stopped."); |
| |
| m_client1.Call(UpdateNVals, true); |
| Thread.Sleep(1000); |
| Util.Log("StepNine complete."); |
| |
| m_client2.Call(VerifyNValVals); |
| Util.Log("StepTen complete."); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| //For Failover to complete. |
| Thread.Sleep(5000); |
| |
| m_client1.Call(UpdateVals); |
| Thread.Sleep(1000); |
| Util.Log("StepEleven complete."); |
| |
| m_client2.Call(VerifyVals); |
| Util.Log("StepTwelve complete."); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| CacheHelper.StopJavaLocator(1); |
| Util.Log("Locator stopped"); |
| |
| CacheHelper.ClearEndpoints(); |
| CacheHelper.ClearLocators(); |
| } |
| |
| public void KillServer() |
| { |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| } |
| |
| public delegate void KillServerDelegate(); |
| |
| public void StepOneFailover() |
| { |
| // This is here so that Client1 registers information of the cacheserver |
| // that has been already started |
| CacheHelper.SetupJavaServers(true, |
| "cacheserver_remoteoqlN.xml", |
| "cacheserver_remoteoql2N.xml"); |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| Util.Log("Locator started"); |
| //CacheHelper.StartJavaServer(1, "GFECS1"); |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| try |
| { |
| CacheHelper.DCache.TypeRegistry.RegisterType(Portfolio.CreateDeserializable, 8); |
| CacheHelper.DCache.TypeRegistry.RegisterType(Position.CreateDeserializable, 7); |
| } |
| catch (IllegalStateException) |
| { |
| // ignored since we run multiple iterations for pool and non pool configs |
| } |
| |
| InitClient_Pool(CacheHelper.Locators, 1); |
| CacheHelper.CreateTCRegion_Pool<object, object>(QueryRegionName, true, true, |
| null, null, "__TESTPOOL1_", true); |
| |
| Region region = CacheHelper.GetVerifyRegion<object, object>(QueryRegionName); |
| Portfolio port1 = new Portfolio(1, 100); |
| Portfolio port2 = new Portfolio(2, 200); |
| Portfolio port3 = new Portfolio(3, 300); |
| Portfolio port4 = new Portfolio(4, 400); |
| |
| region["1"] = port1; |
| region["2"] = port2; |
| region["3"] = port3; |
| region["4"] = port4; |
| } |
| |
| public void StepTwoFailover() |
| { |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| IAsyncResult killRes = null; |
| KillServerDelegate ksd = new KillServerDelegate(KillServer); |
| |
| var qs = CacheHelper.DCache.GetPoolManager().Find("__TESTPOOL1_").GetQueryService(); |
| |
| for (int i = 0; i < 10000; i++) |
| { |
| Query<object> qry = qs.NewQuery<object>("select distinct * from /" + QueryRegionName); |
| |
| ISelectResults<object> results = qry.Execute(); |
| |
| if (i == 10) |
| { |
| Util.Log("Starting the kill server thread."); |
| killRes = ksd.BeginInvoke(null, null); |
| } |
| |
| var resultSize = results.Size; |
| |
| if (i % 100 == 0) |
| { |
| Util.Log("Iteration upto {0} done, result size is {1}", i, resultSize); |
| } |
| |
| Assert.AreEqual(4, resultSize, "Result size is not 4!"); |
| } |
| |
| killRes.AsyncWaitHandle.WaitOne(); |
| ksd.EndInvoke(killRes); |
| } |
| |
| #endregion |
| |
| void runDistOps() |
| { |
| CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription.xml", |
| "cacheserver_notify_subscription2.xml"); |
| |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| m_client1.Call(InitClient_Pool, CacheHelper.Locators, 1); |
| m_client2.Call(InitClient_Pool, CacheHelper.Locators, 1); |
| m_client1.Call(CreateNonExistentRegion, CacheHelper.Locators); |
| |
| DistOpsCommonSteps(true); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| CacheHelper.StopJavaLocator(1); |
| Util.Log("Locator 1 stopped."); |
| } |
| |
| void runDistOpsXml() |
| { |
| |
| CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription.xml", |
| "cacheserver_notify_subscription2.xml"); |
| |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| m_client1.Call(InitClientXml, "client_pool.xml", CacheHelper.HOST_PORT_1, CacheHelper.HOST_PORT_2); |
| m_client2.Call(InitClientXml, "client_pool.xml", CacheHelper.HOST_PORT_1, CacheHelper.HOST_PORT_2); |
| |
| DistOpsCommonSteps(false); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| CacheHelper.StopJavaLocator(1); |
| } |
| |
| void runGenericsXmlPlugins() |
| { |
| Util.Log("runGenericsXmlPlugins: pool with endpoints in client XML."); |
| |
| CacheHelper.SetupJavaServers(false, "cacheserver1_partitioned.xml", |
| "cacheserver2_partitioned.xml"); |
| |
| CacheHelper.StartJavaServer(1, "GFECS1"); |
| Util.Log("Cacheserver 1 started."); |
| |
| CacheHelper.StartJavaServer(2, "GFECS2"); |
| Util.Log("Cacheserver 2 started."); |
| |
| m_client1.Call(InitClientXml, "client_pool.xml", CacheHelper.HOST_PORT_1, CacheHelper.HOST_PORT_2); |
| m_client2.Call(InitClientXml, "client_generics_plugins.xml", CacheHelper.HOST_PORT_1, CacheHelper.HOST_PORT_2); |
| |
| m_client1.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, false, false); |
| m_client2.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, false, false); |
| Util.Log("StepOne complete."); |
| |
| m_client2.Call(RegisterKeys, m_keys[0], m_keys[2]); |
| |
| m_client1.Call(Create2Vals, true); |
| |
| m_client2.Call(DoCacheLoad2Vals, false); |
| |
| m_client1.Call(Update2NVals, true, true); |
| |
| m_client2.Call(Create2Vals, false); |
| |
| m_client2.Call(VerifyTallies); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| } |
| |
| void runQueryFailover() |
| { |
| try |
| { |
| m_client1.Call(StepOneFailover); |
| Util.Log("StepOneFailover complete."); |
| |
| m_client1.Call(StepTwoFailover); |
| Util.Log("StepTwoFailover complete."); |
| |
| m_client1.Call(Close); |
| Util.Log("Client closed"); |
| } |
| finally |
| { |
| m_client1.Call(CacheHelper.StopJavaServers); |
| m_client1.Call(CacheHelper.StopJavaLocator, 1); |
| Util.Log("Locator stopped"); |
| } |
| } |
| |
| void runPeriodicAck() |
| { |
| CacheHelper.SetupJavaServers(true, |
| "cacheserver_notify_subscription.xml", |
| "cacheserver_notify_subscription2.xml"); |
| |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| Util.Log("Locator started"); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| m_client1.Call(InitClientForEventId_Pool, CacheHelper.Locators, false, 1, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30)); |
| |
| m_client1.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, false, true); |
| Util.Log("StepOne complete."); |
| |
| m_client2.Call(InitClientForEventId_Pool, CacheHelper.Locators, true, 1, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30)); |
| m_client2.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, true, true); |
| m_client2.Call(InitDupListeners); |
| Util.Log("StepTwo complete."); |
| |
| m_client1.Call(CreateEntriesForEventId, 50); |
| Util.Log("CreateEntries complete."); |
| |
| Thread.Sleep(30000); |
| |
| m_client2.Call(CheckClientForEventId); |
| Util.Log("CheckClient complete."); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| CacheHelper.StopJavaLocator(1); |
| Util.Log("Locator stopped"); |
| } |
| |
| void runEventIDMap() |
| { |
| CacheHelper.SetupJavaServers(true, |
| "cacheserver_notify_subscription.xml", |
| "cacheserver_notify_subscription2.xml"); |
| |
| CacheHelper.StartJavaLocator(1, "GFELOC"); |
| Util.Log("Locator started"); |
| |
| CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); |
| Util.Log("Cacheserver 1 started."); |
| |
| m_client1.Call(InitClientForEventId_Pool, CacheHelper.Locators, false, 1, TimeSpan.FromSeconds(3600), TimeSpan.FromSeconds(3600)); |
| m_client1.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, false, true); |
| Util.Log("StepOne complete."); |
| |
| m_client2.Call(InitClientForEventId_Pool, CacheHelper.Locators, true, 1, TimeSpan.FromSeconds(3600), TimeSpan.FromSeconds(3600)); |
| m_client2.Call(CreateHATCRegions, RegionNames, false, |
| (string)null, true, true); |
| m_client2.Call(InitDupListeners); |
| Util.Log("StepTwo complete."); |
| |
| CacheHelper.StartJavaServerWithLocators(2, "GFECS2", 1); |
| Util.Log("Cacheserver 2 started."); |
| |
| m_client1.Call(CreateEntriesForEventId, 10); |
| Util.Log("CreateEntries complete."); |
| |
| CacheHelper.StopJavaServer(1); |
| Util.Log("Cacheserver 1 stopped."); |
| |
| Thread.Sleep(30000); |
| |
| m_client2.Call(CheckClientForEventId); |
| Util.Log("CheckClient complete."); |
| |
| m_client1.Call(Close); |
| m_client2.Call(Close); |
| |
| CacheHelper.StopJavaServer(2); |
| Util.Log("Cacheserver 2 stopped."); |
| |
| CacheHelper.StopJavaLocator(1); |
| Util.Log("Locator stopped"); |
| } |
| |
| [Test] |
| public void DistOps() |
| { |
| runDistOps(); |
| } |
| |
| [Test] |
| public void DistOpsXml() |
| { |
| runDistOpsXml(); |
| } |
| |
| [Test] |
| public void GenericsXmlPlugins() |
| { |
| runGenericsXmlPlugins(); |
| } |
| |
| [Test] |
| public void FailoverR1() |
| { |
| FailoverCommonSteps(1, false); |
| } |
| |
| [Test] |
| public void FailoverR3() |
| { |
| FailoverCommonSteps(3, false); |
| } |
| |
| [Test] |
| public void FailoverRegexR1() |
| { |
| FailoverCommonSteps(1, true); |
| } |
| |
| [Test] |
| public void FailoverRegexR3() |
| { |
| FailoverCommonSteps(3, true); |
| } |
| |
| [Test] |
| public void QueryFailover() |
| { |
| runQueryFailover(); |
| } |
| |
| [Test] |
| public void PeriodicAck() |
| { |
| runPeriodicAck(); |
| } |
| |
| [Test] |
| public void EventIDMap() |
| { |
| runEventIDMap(); |
| } |
| |
| } |
| } |