blob: 5da474cf7ffad4576151135588ee2635ec861176 [file] [log] [blame]
/*
* 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
}
}