| /* |
| * 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 TallyWriter : Apache.Geode.Client.CacheWriterAdapter<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 Apache.Geode.Client.ISerializable m_callbackArg = null; |
| private int m_clears = 0; |
| private Apache.Geode.Client.ISerializable m_lastKey = null; |
| private Apache.Geode.Client.ISerializable m_lastValue = null; |
| private bool isWriterFailed = false; |
| private bool isWriterInvoke = 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 Apache.Geode.Client.ISerializable CallbackArgument |
| { |
| get |
| { |
| return m_callbackArg; |
| } |
| } |
| |
| |
| public Apache.Geode.Client.ISerializable LastValue |
| { |
| get |
| { |
| return m_lastValue; |
| } |
| } |
| |
| public void SetWriterFailed( ) |
| { |
| isWriterFailed = true; |
| } |
| |
| public void SetCallBackArg( Apache.Geode.Client.ISerializable callbackArg ) |
| { |
| m_callbackArg = callbackArg; |
| } |
| |
| public void ResetWriterInvokation() |
| { |
| isWriterInvoke = false; |
| isCallbackCalled = false; |
| } |
| |
| public bool IsWriterInvoked |
| { |
| get |
| { |
| return isWriterInvoke; |
| } |
| } |
| public bool IsCallBackArgCalled |
| { |
| get |
| { |
| return isCallbackCalled; |
| } |
| } |
| #endregion |
| |
| 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 void ShowTallies() |
| { |
| Util.Log("TallyWriter state: (updates = {0}, creates = {1}, invalidates = {2}, destroys = {3})", |
| Updates, Creates, Invalidates, Destroys); |
| } |
| |
| public void CheckcallbackArg(Apache.Geode.Client.EntryEvent<Object, Object> ev) |
| { |
| |
| if(!isWriterInvoke) |
| isWriterInvoke = true; |
| if (m_callbackArg != null) |
| { |
| Apache.Geode.Client.ISerializable callbkArg = (Apache.Geode.Client.ISerializable)ev.CallbackArgument; |
| if (m_callbackArg.Equals(callbkArg)) |
| isCallbackCalled = true; |
| } |
| } |
| |
| public static TallyWriter Create() |
| { |
| return new TallyWriter(); |
| } |
| |
| #region ICacheWriter Members |
| |
| public override bool BeforeCreate(Apache.Geode.Client.EntryEvent<Object, Object> ev) |
| { |
| m_creates++; |
| Util.Log("TallyWriter::BeforeCreate"); |
| CheckcallbackArg(ev); |
| return !isWriterFailed; |
| } |
| |
| public override bool BeforeDestroy(Apache.Geode.Client.EntryEvent<Object, Object> ev) |
| { |
| m_destroys++; |
| Util.Log("TallyWriter::BeforeDestroy"); |
| CheckcallbackArg(ev); |
| return !isWriterFailed; |
| } |
| |
| public override bool BeforeRegionClear(Apache.Geode.Client.RegionEvent<Object, Object> ev) |
| { |
| m_clears++; |
| Util.Log("TallyWriter::BeforeRegionClear"); |
| return true; |
| } |
| |
| public override bool BeforeUpdate(Apache.Geode.Client.EntryEvent<Object, Object> ev) |
| { |
| m_updates++; |
| Util.Log("TallyWriter::BeforeUpdate"); |
| CheckcallbackArg(ev); |
| return !isWriterFailed; |
| } |
| #endregion |
| } |
| } |