clicache/integration-test/ThinClientConflationTestsN.cs (265 lines of code) (raw):

/* * 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; #region Listener class ConflationListner<TKey, TValue> : ICacheListener<TKey, TValue> { #region Private members private int m_events = 0; private TValue m_value = default(TValue); #endregion public static ConflationListner<TKey, TValue> Create() { Util.Log(" ConflationListner Created"); return new ConflationListner<TKey, TValue>(); } private void check(EntryEvent<TKey, TValue> ev) { m_events++; TKey key = ev.Key; TValue value = ev.NewValue; m_value = value; Util.Log("Region:{0}:: Key:{1}, Value:{2}", ev.Region.Name, key, value); } public void validate(bool conflation) { if (conflation) { string msg1 = string.Format("Conflation On: Expected 2 events but got {0}", m_events); Assert.AreEqual(2, m_events, msg1); } else { string msg2 = string.Format("Conflation Off: Expected 5 events but got {0}", m_events); Assert.AreEqual(5, m_events, msg2); } string msg3 = string.Format("Expected Value =5, Actual = {0}", m_value); Assert.AreEqual(5, m_value, msg3); } #region ICacheListener Members public virtual void AfterCreate(EntryEvent<TKey, TValue> ev) { check(ev); } public virtual void AfterUpdate(EntryEvent<TKey, TValue> ev) { check(ev); } public virtual void AfterDestroy(EntryEvent<TKey, TValue> ev) { } public virtual void AfterInvalidate(EntryEvent<TKey, TValue> ev) { } public virtual void AfterRegionDestroy(RegionEvent<TKey, TValue> ev) { } public virtual void AfterRegionInvalidate(RegionEvent<TKey, TValue> ev) { } public virtual void AfterRegionClear(RegionEvent<TKey, TValue> ev) { } public virtual void AfterRegionLive(RegionEvent<TKey, TValue> ev) { Util.Log("DurableListener: Received AfterRegionLive event of region: {0}", ev.Region.Name); } public virtual void Close(IRegion<TKey, TValue> region) { } public virtual void AfterRegionDisconnected(IRegion<TKey, TValue> region) { } #endregion } #endregion [TestFixture] [Category("group1")] [Category("unicast_only")] [Category("generics")] public class ThinClientConflationTests : ThinClientRegionSteps { #region Private members private UnitProcess m_client1, m_client2, m_feeder; private string[] keys = { "Key-1", "Key-2", "Key-3", "Key-4", "Key-5" }; private static string[] DurableClientIds = { "DurableClientId1", "DurableClientId2" }; static string[] Regions = { "ConflatedRegion", "NonConflatedRegion" }; private static ConflationListner<object, object> m_listener1C1, m_listener2C1, m_listener1C2, m_listener2C2; #endregion protected override ClientBase[] GetClients() { m_client1 = new UnitProcess(); m_client2 = new UnitProcess(); m_feeder = new UnitProcess(); return new ClientBase[] { m_client1, m_client2, m_feeder }; } [TearDown] public override void EndTest() { try { m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); m_feeder.Call(CacheHelper.Close); CacheHelper.ClearEndpoints(); } finally { CacheHelper.StopJavaServers(); } base.EndTest(); } #region Common Functions public void InitFeeder(string locators, int redundancyLevel) { CacheHelper.CreatePool<object, object>("__TESTPOOL1_", locators, (string)null, redundancyLevel, false); CacheHelper.CreateTCRegion_Pool<object, object>(Regions[0], false, false, null, CacheHelper.Locators, "__TESTPOOL1_", false); CacheHelper.CreateTCRegion_Pool<object, object>(Regions[1], false, false, null, CacheHelper.Locators, "__TESTPOOL1_", false); } public void InitDurableClient(int client, string locators, string conflation) { // Create DurableListener for first time and use same afterward. ConflationListner<object, object> checker1 = null; ConflationListner<object, object> checker2 = null; string durableId = ThinClientConflationTests.DurableClientIds[client - 1]; if (client == 1) { ThinClientConflationTests.m_listener1C1 = ConflationListner<object, object>.Create(); ThinClientConflationTests.m_listener2C1 = ConflationListner<object, object>.Create(); checker1 = ThinClientConflationTests.m_listener1C1; checker2 = ThinClientConflationTests.m_listener2C1; } else // client == 2 { ThinClientConflationTests.m_listener1C2 = ConflationListner<object, object>.Create(); ThinClientConflationTests.m_listener2C2 = ConflationListner<object, object>.Create(); checker1 = ThinClientConflationTests.m_listener1C2; checker2 = ThinClientConflationTests.m_listener2C2; } CacheHelper.InitConfigForConflation_Pool(locators, durableId, conflation); CacheHelper.CreateTCRegion_Pool<object, object>(Regions[0], false, true, checker1, CacheHelper.Locators, "__TESTPOOL1_", true); CacheHelper.CreateTCRegion_Pool<object, object>(Regions[1], false, true, checker2, CacheHelper.Locators, "__TESTPOOL1_", true); //CacheHelper.DCache.ReadyForEvents(); IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(Regions[0]); region1.GetSubscriptionService().RegisterAllKeys(true); IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(Regions[1]); region2.GetSubscriptionService().RegisterAllKeys(true); } public void ReadyForEvents() { CacheHelper.DCache.ReadyForEvents(); } public void FeederUpdate(int keyIdx) { IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(Regions[0]); region1[keys[keyIdx]] = 1; region1[keys[keyIdx]] = 2; region1[keys[keyIdx]] = 3; region1[keys[keyIdx]] = 4; region1[keys[keyIdx]] = 5; IRegion<object, object> region2 = CacheHelper.GetVerifyRegion<object, object>(Regions[1]); region2[keys[keyIdx]] = 1; region2[keys[keyIdx]] = 2; region2[keys[keyIdx]] = 3; region2[keys[keyIdx]] = 4; region2[keys[keyIdx]] = 5; } public void ClientDown() { CacheHelper.Close(); } public void KillServer() { CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); } public delegate void KillServerDelegate(); #endregion public void Validate(int client, int region, bool conflate) { ConflationListner<object, object> checker = null; if (client == 1) { if (region == 1) checker = ThinClientConflationTests.m_listener1C1; else checker = ThinClientConflationTests.m_listener2C1; } else // client == 2 { if (region == 1) checker = ThinClientConflationTests.m_listener1C2; else checker = ThinClientConflationTests.m_listener2C2; } if (checker != null) { checker.validate(conflate); } else { Assert.Fail("Checker is NULL!"); } } void runConflationBasic() { CacheHelper.SetupJavaServers(true, "cacheserver_conflation.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); m_feeder.Call(InitFeeder, CacheHelper.Locators, 0); Util.Log("Feeder initialized."); //Test "true" and "false" settings m_client1.Call(InitDurableClient, 1, CacheHelper.Locators, "true"); m_client2.Call(InitDurableClient, 2, CacheHelper.Locators, "false"); Util.Log("Clients initialized for first time."); m_feeder.Call(FeederUpdate, 0); Util.Log("Feeder performed first update."); Util.Log("Client1 sending readyForEvents()."); m_client1.Call(ReadyForEvents); Thread.Sleep(5000); Util.Log("Validating Client 1 Region 1."); m_client1.Call(Validate, 1, 1, true); Util.Log("Validating Client 1 Region 2."); m_client1.Call(Validate, 1, 2, true); Util.Log("Client2 sending readyForEvents()."); m_client2.Call(ReadyForEvents); Thread.Sleep(5000); Util.Log("Validating Client 2 Region 1."); m_client2.Call(Validate, 2, 1, false); Util.Log("Validating Client 2 Region 1."); m_client2.Call(Validate, 2, 2, false); //Close Clients. m_client1.Call(ClientDown); m_client2.Call(ClientDown); Util.Log("First step complete, tested true/false options."); //Test "server" and not set settings m_client1.Call(InitDurableClient, 1, CacheHelper.Locators, "server"); m_client2.Call(InitDurableClient, 2, CacheHelper.Locators, ""); Util.Log("Clients initialized second times."); m_feeder.Call(FeederUpdate, 1); Util.Log("Feeder performed second update."); Util.Log("Client1 sending readyForEvents()."); m_client1.Call(ReadyForEvents); Thread.Sleep(5000); Util.Log("Validating Client 1 Region 1."); m_client1.Call(Validate, 1, 1, true); Util.Log("Validating Client 1 Region 2."); m_client1.Call(Validate, 1, 2, false); Util.Log("Client2 sending readyForEvents()."); m_client2.Call(ReadyForEvents); Thread.Sleep(5000); Util.Log("Validating Client 2 Region 1."); m_client2.Call(Validate, 2, 1, true); Util.Log("Validating Client 2 Region 2."); m_client2.Call(Validate, 2, 2, false); //Close Clients. m_client1.Call(ClientDown); m_client2.Call(ClientDown); m_feeder.Call(ClientDown); Util.Log("Feeder and Clients closed."); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } [Test] public void ConflationBasic() { runConflationBasic(); } } }