clicache/integration-test/TallyListener.cs (239 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 Apache.Geode.DUnitFramework; class TallyListener : Apache.Geode.Client.CacheListenerAdapter<Object, Object> { #region Private members private int m_creates = 0; private int m_updates = 0; private int m_invalidates = 0; private int m_destroys = 0; private int m_clears = 0; private Apache.Geode.Client.ICacheableKey m_lastKey = null; private Apache.Geode.Client.ISerializable m_lastValue = null; private Apache.Geode.Client.ISerializable m_callbackArg = null; private bool m_ignoreTimeout = false; private bool m_quiet = false; private bool isListenerInvoke = false; private bool isCallbackCalled = false; #endregion #region Public accessors public int Creates { get { return m_creates; } } public int Clears { get { return m_clears; } } public int Updates { get { return m_updates; } } public int Invalidates { get { return m_invalidates; } } public int Destroys { get { return m_destroys; } } public Apache.Geode.Client.ISerializable LastKey { get { return m_lastKey; } } public bool IsListenerInvoked { get { return isListenerInvoke; } } public bool IsCallBackArgCalled { get { return isCallbackCalled; } } public Apache.Geode.Client.ISerializable LastValue { get { return m_lastValue; } } public bool IgnoreTimeout { set { m_ignoreTimeout = value; } } public bool Quiet { set { m_quiet = value; } } public void SetCallBackArg(Apache.Geode.Client.ISerializable callbackArg) { m_callbackArg = callbackArg; } #endregion public void CheckcallbackArg(Apache.Geode.Client.EntryEvent<Object, Object> ev) { if (!isListenerInvoke) isListenerInvoke = true; if (m_callbackArg != null) { Apache.Geode.Client.ISerializable callbkArg = (Apache.Geode.Client.ISerializable)ev.CallbackArgument; if (m_callbackArg.Equals(callbkArg)) isCallbackCalled = true; } } public void ResetListenerInvokation() { isListenerInvoke = false; isCallbackCalled = false; } public int ExpectCreates(int expected) { int tries = 0; while ((m_creates < expected) && (tries < 200)) { Thread.Sleep(100); tries++; } return m_creates; } public int ExpectUpdates(int expected) { int tries = 0; while ((m_updates < expected) && (tries < 200)) { Thread.Sleep(100); tries++; } return m_updates; } public int ExpectedInvalidates(int expected) { int tries = 0; while ((m_invalidates < expected) && (tries < 200)) { Thread.Sleep(100); tries++; } return m_invalidates; } public int ExpectedDestroys(int expected) { int tries = 0; while ((m_destroys < expected) && (tries < 200)) { Thread.Sleep(100); tries++; } return m_destroys; } public void ShowTallies() { Util.Log("TallyListener state: (updates = {0}, creates = {1}, invalidates = {2}, destroys = {3})", Updates,Creates, Invalidates, Destroys); } #region Logging functions that check for m_quiet private void WriteLog(string message) { if (!m_quiet) { Util.Log(message); } } private void WriteLog(string format, params object[] args) { if (!m_quiet) { Util.Log(format, args); } } public static TallyListener Create() { return new TallyListener(); } #endregion #region ICacheListener Members public override void AfterCreate(Apache.Geode.Client.EntryEvent<Object, Object> ev) { m_creates++; m_lastKey = (Apache.Geode.Client.ICacheableKey)ev.Key; m_lastValue = (Apache.Geode.Client.ISerializable)ev.NewValue; CheckcallbackArg(ev); string keyString = m_lastKey.ToString(); WriteLog("TallyListener create - key = \"{0}\", value = \"{1}\"", keyString, m_lastValue.ToString()); if ((!m_ignoreTimeout) && (keyString.IndexOf("timeout") >= 0)) { WriteLog("TallyListener: Sleeping 10 seconds to force a timeout."); Thread.Sleep(10000); // this should give the client cause to timeout... WriteLog("TallyListener: done sleeping.."); } } public override void AfterUpdate(Apache.Geode.Client.EntryEvent<Object, Object> ev) { m_updates++; m_lastKey = (Apache.Geode.Client.ICacheableKey)ev.Key; m_lastValue = (Apache.Geode.Client.ISerializable)ev.NewValue; CheckcallbackArg(ev); string keyString = m_lastKey.ToString(); WriteLog("TallyListener update - key = \"{0}\", value = \"{1}\"", keyString, m_lastValue.ToString()); if ((!m_ignoreTimeout) && (keyString.IndexOf("timeout") >= 0)) { WriteLog("TallyListener: Sleeping 10 seconds to force a timeout."); Thread.Sleep(10000); // this should give the client cause to timeout... WriteLog("TallyListener: done sleeping.."); } } public override void AfterDestroy(Apache.Geode.Client.EntryEvent<Object, Object> ev) { m_destroys++; CheckcallbackArg(ev); } public override void AfterInvalidate(Apache.Geode.Client.EntryEvent<Object, Object> ev) { m_invalidates++; CheckcallbackArg(ev); } public override void AfterRegionDestroy(Apache.Geode.Client.RegionEvent<Object, Object> ev) { } public override void AfterRegionClear(Apache.Geode.Client.RegionEvent<Object, Object> ev) { m_clears++; } public override void AfterRegionInvalidate(Apache.Geode.Client.RegionEvent<Object, Object> ev) { } public override void AfterRegionLive(Apache.Geode.Client.RegionEvent<Object, Object> ev) { } public override void Close(Apache.Geode.Client.IRegion<Object, Object> region) { } #endregion } }