clicache/integration-test/ThinClientCallbackArgN.cs (581 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.Threading; namespace Apache.Geode.Client.UnitTests { using NUnit.Framework; using Apache.Geode.DUnitFramework; using Apache.Geode.Client.Tests; using Apache.Geode.Client; using GIRegion = Apache.Geode.Client.IRegion<int, object>; using System.Collections.Generic; public class CallbackListener : CacheListenerAdapter<int, object> { int m_creates; int m_updates; int m_invalidates; int m_destroys; int m_regionInvalidate; int m_regionDestroy; int m_regionClear; object m_callbackArg; #region Getters public int Creates { get { return m_creates; } } public int Updates { get { return m_updates; } } public int Invalidates { get { return m_invalidates; } } public int Destroys { get { return m_destroys; } } public int RegionInvalidates { get { return m_regionInvalidate; } } public int RegionDestroys { get { return m_regionDestroy; } } public int RegionClear { get { return m_regionClear; } } public object CallbackArg { get { return m_callbackArg; } } #endregion public void SetCallbackArg(object callbackArg) { m_callbackArg = callbackArg; } private void check(object eventCallback, ref int updateCount) { Log.Fine("check.."); if (eventCallback != null) { string callbackArg = eventCallback as string; if (callbackArg != null) { string cs = m_callbackArg as string; if (cs != null) { if (callbackArg == cs) { Log.Fine("value matched"); updateCount++; } else Log.Fine("value matched NOT"); } } else { Log.Fine("Callbackarg is not cacheable string"); Portfolio pfCallback = eventCallback as Portfolio; if (pfCallback != null) { Portfolio pf = m_callbackArg as Portfolio; if (pf != null) { if (pf.Pkid == pfCallback.Pkid && pfCallback.ArrayNull == null && pfCallback.ArrayZeroSize != null && pfCallback.ArrayZeroSize.Length == 0) { Log.Fine("value matched"); updateCount++; } } } } } } private void checkCallbackArg(EntryEvent<int, object> entryEvent, ref int updateCount) { check(entryEvent.CallbackArgument, ref updateCount); } private void checkCallbackArg(RegionEvent<int, object> regionEvent, ref int updateCount) { check(regionEvent.CallbackArgument, ref updateCount); } #region CacheListener Members public override void AfterCreate(EntryEvent<int, object> ev) { checkCallbackArg(ev, ref m_creates); } public override void AfterUpdate(EntryEvent<int, object> ev) { checkCallbackArg(ev, ref m_updates); } public override void AfterInvalidate(EntryEvent<int, object> ev) { checkCallbackArg(ev, ref m_invalidates); } public override void AfterDestroy(EntryEvent<int, object> ev) { checkCallbackArg(ev, ref m_destroys); } public override void AfterRegionInvalidate(RegionEvent<int, object> rev) { checkCallbackArg(rev, ref m_regionInvalidate); } public override void AfterRegionDestroy(RegionEvent<int, object> rev) { checkCallbackArg(rev, ref m_regionDestroy); } public override void AfterRegionClear(RegionEvent<int, object> rev) { checkCallbackArg(rev, ref m_regionClear); } #endregion } [TestFixture] [Category("generics")] public class ThinClientCallbackArg : ThinClientRegionSteps { private TallyWriter<int, object> m_writer; private TallyListener<int, object> m_listener; private CallbackListener m_callbackListener; RegionOperation o_region; private UnitProcess m_client1, m_client2; int key0 = 12; object m_callbackarg = "Gemstone's Callback"; protected override ClientBase[] GetClients() { m_client1 = new UnitProcess(); m_client2 = new UnitProcess(); return new ClientBase[] { m_client1, m_client2 }; } public void CreateRegion(string locators, bool caching, bool listener, bool writer) { if (listener) { m_listener = new TallyListener<int, object>(); } else { m_listener = null; } GIRegion region = null; region = CacheHelper.CreateTCRegion_Pool<int, object>(RegionName, true, caching, m_listener, locators, "__TESTPOOL1_", true); if (listener) m_listener.SetCallBackArg(key0); if (writer) { m_writer = new TallyWriter<int, object>(); } else { m_writer = null; } if (writer) { AttributesMutator<int, object> at = region.AttributesMutator; at.SetCacheWriter(m_writer); m_writer.SetCallBackArg(key0); } } public void CreateRegion2(string locators, bool caching, bool listener, bool writer) { CallbackListener callbackLis = null; if (listener) { m_callbackListener = new CallbackListener(); m_callbackListener.SetCallbackArg(m_callbackarg); callbackLis = m_callbackListener; } else { m_listener = null; } GIRegion region = null; region = CacheHelper.CreateTCRegion_Pool<int, object>(RegionName, true, caching, callbackLis, locators, "__TESTPOOL1_", true); CacheHelper.DCache.TypeRegistry.RegisterType(Portfolio.CreateDeserializable, 8); CacheHelper.DCache.TypeRegistry.RegisterType(Position.CreateDeserializable, 7); } public void ValidateLocalListenerWriterData() { Thread.Sleep(2000); Assert.AreEqual(true, m_writer.IsWriterInvoked, "Writer should be invoked"); Assert.AreEqual(true, m_listener.IsListenerInvoked, "Listener should be invoked"); Assert.AreEqual(true, m_writer.IsCallBackArgCalled, "Writer CallbackArg should be invoked"); Assert.AreEqual(true, m_listener.IsCallBackArgCalled, "Listener CallbackArg should be invoked"); m_listener.ShowTallies(); m_writer.ShowTallies(); } public void ValidateEvents() { Assert.AreEqual(15, m_writer.Creates, "Should be 10 creates"); Assert.AreEqual(15, m_listener.Creates, "Should be 10 creates"); Assert.AreEqual(15, m_writer.Updates, "Should be 5 updates"); Assert.AreEqual(15, m_listener.Updates, "Should be 5 updates"); Assert.AreEqual(0, m_writer.Invalidates, "Should be 0 invalidates"); Assert.AreEqual(5, m_listener.Invalidates, "Should be 5 invalidates"); Assert.AreEqual(10, m_writer.Destroys, "Should be 10 destroys"); // 5 destroys + 5 removes Assert.AreEqual(10, m_listener.Destroys, "Should be 10 destroys"); // 5 destroys + 5 removes } public void CallOp() { o_region = new RegionOperation(RegionName); o_region.PutOp(5, key0); Thread.Sleep(1000); // let the events reach at other end. o_region.PutOp(5, key0); Thread.Sleep(1000); o_region.InvalidateOp(5, key0); Thread.Sleep(1000); o_region.DestroyOp(5, key0); Thread.Sleep(1000); // let the events reach at other end. o_region.PutOp(5, key0); Thread.Sleep(1000); o_region.RemoveOp(5, key0); Thread.Sleep(1000); } void RegisterPdxType8() { CacheHelper.DCache.TypeRegistry.RegisterPdxType(PdxTests.PdxTypes8.CreateDeserializable); } void runCallbackArgTest() { CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); Util.Log("Creating region in client1, no-ack, cache-enabled, with listener and writer"); m_client1.Call(CreateRegion, CacheHelper.Locators, true, true, true); m_client1.Call(RegisterAllKeys, new string[] { RegionName }); Util.Log("Creating region in client2 , no-ack, cache-enabled, with listener and writer"); m_client2.Call(CreateRegion, CacheHelper.Locators, true, true, true); m_client2.Call(RegisterAllKeys, new string[] { RegionName }); m_client2.Call(RegisterPdxType8); m_client1.Call(CallOp); m_client1.Call(ValidateLocalListenerWriterData); m_client1.Call(ValidateEvents); m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } private bool m_isSet = false; public void SetCallbackArg() { if (!m_isSet) { m_isSet = true; m_callbackarg = new Portfolio(1, 1); } } public void TestCreatesAndUpdates() { o_region = new RegionOperation(RegionName); o_region.Region.Add("Key-1", "Val-1", m_callbackarg); o_region.Region.Put("Key-1", "NewVal-1", m_callbackarg); Thread.Sleep(10000); } public void TestInvalidates() { o_region = new RegionOperation(RegionName); o_region.Region.GetLocalView().Add(1234, 1234, m_callbackarg); o_region.Region.GetLocalView().Add(12345, 12345, m_callbackarg); o_region.Region.GetLocalView().Add(12346, 12346, m_callbackarg); o_region.Region.GetLocalView().Put(1234, "Val-1", m_callbackarg); o_region.Region.GetLocalView().Invalidate(1234, m_callbackarg); Assert.AreEqual(o_region.Region.GetLocalView().Remove(12345, 12345, m_callbackarg), true, "Result of remove should be true, as this value exists locally."); Assert.AreEqual(o_region.Region.GetLocalView().ContainsKey(12345), false, "containsKey should be false"); Assert.AreEqual(o_region.Region.GetLocalView().Remove(12346, m_callbackarg), true, "Result of remove should be true, as this value exists locally."); Assert.AreEqual(o_region.Region.GetLocalView().ContainsKey(12346), false, "containsKey should be false"); o_region.Region.Invalidate("Key-1", m_callbackarg); o_region.Region.InvalidateRegion(m_callbackarg); } public void TestDestroy() { o_region = new RegionOperation(RegionName); o_region.Region.Remove("Key-1", m_callbackarg); //o_region.Region.DestroyRegion(m_callbackarg); } public void TestRemove() { o_region = new RegionOperation(RegionName); o_region.Region.Remove("Key-1", "NewVal-1", m_callbackarg); o_region.Region.DestroyRegion(m_callbackarg); } public void TestlocalClear() { o_region = new RegionOperation(RegionName); o_region.Region.GetLocalView().Clear(m_callbackarg); } public void TestValidate() { Thread.Sleep(10000); Assert.AreEqual(5, m_callbackListener.Creates, "Should be 5 creates"); Assert.AreEqual(3, m_callbackListener.Updates, "Should be 3 update"); Assert.AreEqual(2, m_callbackListener.Invalidates, "Should be 2 invalidate"); Assert.AreEqual(4, m_callbackListener.Destroys, "Should be 4 destroy"); Assert.AreEqual(1, m_callbackListener.RegionInvalidates, "Should be 1 region invalidates"); Assert.AreEqual(1, m_callbackListener.RegionDestroys, "Should be 1 regiondestroy"); Assert.AreEqual(1, m_callbackListener.RegionClear, "Should be 1 RegionClear"); } void runCallbackArgTest2(int callbackArgChange) { if (callbackArgChange == 1) { //change now custom type m_callbackarg = new Portfolio(1, 1); m_client1.Call(SetCallbackArg); m_client2.Call(SetCallbackArg); } m_callbackListener = new CallbackListener(); m_callbackListener.SetCallbackArg(m_callbackarg); CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription5N.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); Util.Log("Creating region in client1, no-ack, cache-enabled, with listener and writer"); m_client1.Call(CreateRegion2, CacheHelper.Locators, true, true, false); m_client1.Call(RegisterAllKeys, new string[] { RegionName }); Util.Log("Creating region in client2 , no-ack, cache-enabled, with listener and writer"); m_client2.Call(CreateRegion2, CacheHelper.Locators, true, false, false); m_client2.Call(TestCreatesAndUpdates); m_client1.Call(TestInvalidates); m_client2.Call(TestDestroy); m_client2.Call(TestCreatesAndUpdates); m_client1.Call(TestlocalClear); m_client2.Call(TestRemove); m_client1.Call(TestValidate); m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } private bool isRegistered = false; public void registerDefaultCacheableType() { if (!isRegistered) { CacheHelper.DCache.TypeRegistry.RegisterType(DefaultType.CreateDeserializable, 4); isRegistered = true; } } public void CallOp2() { o_region = new RegionOperation(RegionName); DefaultType dc = new DefaultType(true); o_region.Region.Put("key-1", dc, null); Thread.Sleep(1000); // let the events reach at other end. } public void ValidateData() { o_region = new RegionOperation(RegionName); DefaultType dc = (DefaultType)o_region.Region.Get("key-1", null); Assert.AreEqual(dc.CBool, true, "bool is not equal"); Assert.AreEqual(dc.CInt, 1000, "int is not equal"); int[] cia = dc.CIntArray; Assert.IsNotNull(cia, "Int array is null"); Assert.AreEqual(3, cia.Length, "Int array are not three"); string[] csa = dc.CStringArray; Assert.IsNotNull(csa, "String array is null"); Assert.AreEqual(2, csa.Length, "String array length is not two"); Assert.AreEqual(dc.CFileName, "geode.txt", "Cacheable filename is not equal"); /* Assert.IsNotNull(dc.CHashSet, "hashset is null"); Assert.AreEqual(2, dc.CHashSet.Count, "hashset size is not two"); * */ Assert.IsNotNull(dc.CHashMap, "hashmap is null"); Assert.AreEqual(1, dc.CHashMap.Count, "hashmap size is not one"); //Assert.IsNotNull(dc.CDate, "Date is null"); Assert.IsNotNull(dc.CVector); Assert.AreEqual(2, dc.CVector.Count, "Vector size is not two"); //Assert.IsNotNull(dc.CObject); //Assert.AreEqual("key", ((CustomSerializableObject)dc.CObject).key, "Object key is not same"); //Assert.AreEqual("value", ((CustomSerializableObject)dc.CObject).value, "Object value is not same"); } void runCallbackArgTest3() { CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription6.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); Util.Log("Creating region in client1, no-ack, cache-enabled, with listener and writer"); m_client1.Call(CreateRegion, CacheHelper.Locators, true, false, false); // m_client1.Call(RegisterAllKeys, new string[] { RegionName }); Util.Log("Creating region in client2 , no-ack, cache-enabled, with listener and writer"); m_client2.Call(CreateRegion, CacheHelper.Locators, true, false, false); m_client1.Call(registerDefaultCacheableType); m_client2.Call(registerDefaultCacheableType); m_client2.Call(RegisterAllKeys, new string[] { RegionName }); m_client1.Call(CallOp2); m_client2.Call(ValidateData); m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } public void TestRemoveAll() { o_region = new RegionOperation(RegionName); ICollection<object> keys = new LinkedList<object>(); for(int i =0; i< 10; i++) { o_region.Region["Key-"+i] = "Value-"+i; keys.Add("Key-" + i); } o_region.Region.RemoveAll(keys, m_callbackarg); } public void TestPutAll() { o_region = new RegionOperation(RegionName); Dictionary<Object, Object> entryMap = new Dictionary<Object, Object>(); for (Int32 item = 0; item < 10; item++) { int K = item; string value = item.ToString(); entryMap.Add(K, value); } o_region.Region.PutAll(entryMap, TimeSpan.FromSeconds(15), m_callbackarg); } public void TestGetAll() { o_region = new RegionOperation(RegionName); List<Object> keys = new List<Object>(); for (int item = 0; item < 10; item++) { Object K = item; keys.Add(K); } Dictionary<Object, Object> values = new Dictionary<Object, Object>(); o_region.Region.GetAll(keys.ToArray(), values, null, true, m_callbackarg); Dictionary<Object, Object>.Enumerator enumerator = values.GetEnumerator(); while (enumerator.MoveNext()) { Util.Log("Values after getAll with CallBack Key = {0} Value = {1} ", enumerator.Current.Key.ToString(), enumerator.Current.Value.ToString()); } } public void TestValidateRemoveAllCallback() { Thread.Sleep(10000); Assert.AreEqual(10, m_callbackListener.Destroys, "Should be 10 destroy"); } public void TestValidatePutAllCallback() { Thread.Sleep(10000); Assert.AreEqual(10, m_callbackListener.Creates, "Should be 10 creates"); Assert.AreEqual("Gemstone's Callback", m_callbackListener.CallbackArg, "CallBackArg for putAll should be same"); } void runPutAllCallbackArgTest() { m_callbackListener = new CallbackListener(); m_callbackListener.SetCallbackArg(m_callbackarg); CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription5N.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); Util.Log("Creating region in client1, no-ack, cache-enabled, with listener and writer"); m_client1.Call(CreateRegion2, CacheHelper.Locators, true, true, false); m_client1.Call(RegisterAllKeys, new string[] { RegionName }); Util.Log("RegisterAllKeys completed.."); Util.Log("Creating region in client2 , no-ack, cache-enabled, with listener and writer"); m_client2.Call(CreateRegion2, CacheHelper.Locators, true, false, false); Util.Log("CreateRegion2 completed.."); m_client2.Call(TestPutAll); Util.Log("TestPutAll completed.."); m_client1.Call(TestValidatePutAllCallback); Util.Log("TestValidatePutAllCallback completed.."); m_client2.Call(TestGetAll); Util.Log("TestGetAll completed.."); m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } void runRemoveAllCallbackArgTest() { m_callbackListener = new CallbackListener(); m_callbackListener.SetCallbackArg(m_callbackarg); CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription5N.xml"); CacheHelper.StartJavaLocator(1, "GFELOC"); Util.Log("Locator started"); CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1); Util.Log("Cacheserver 1 started."); Util.Log("Creating region in client1, no-ack, cache-enabled, with listener and writer"); m_client1.Call(CreateRegion2, CacheHelper.Locators, true, true, false); m_client1.Call(RegisterAllKeys, new string[] { RegionName }); Util.Log("RegisterAllKeys completed.."); Util.Log("Creating region in client2 , no-ack, cache-enabled, with listener and writer"); m_client2.Call(CreateRegion2,CacheHelper.Locators, true, false, false); Util.Log("CreateRegion2 completed.."); m_client2.Call(TestRemoveAll); Util.Log("TestRemoveAll completed.."); m_client1.Call(TestValidateRemoveAllCallback); Util.Log("TestValidateRemoveAllCallback completed.."); m_client1.Call(CacheHelper.Close); m_client2.Call(CacheHelper.Close); CacheHelper.StopJavaServer(1); Util.Log("Cacheserver 1 stopped."); CacheHelper.StopJavaLocator(1); Util.Log("Locator stopped"); CacheHelper.ClearLocators(); CacheHelper.ClearEndpoints(); } [TearDown] public override void EndTest() { base.EndTest(); } [Test] public void ThinClientCallbackArgTest() { runCallbackArgTest(); } [Test] public void ThinClientCallbackArgTest2() { for (int i = 0; i < 2; i++) { runCallbackArgTest2(i); } } [Test] public void ThinClientCallbackArgTest3() { runCallbackArgTest3(); } [Test] public void RemoveAllCallbackArgTest() { runRemoveAllCallbackArgTest(); } [Test] public void PutAllCallbackArgTest() { runPutAllCallbackArgTest(); } } }