blob: 224db457622dcacd7901a24f1010c5f9035eba7b [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.Diagnostics;
using System.Threading;
using System.Collections.Generic;
namespace Apache.Geode.Client.UnitTests
{
using NUnit.Framework;
using Apache.Geode.DUnitFramework;
using Apache.Geode.Client;
//using Region = Apache.Geode.Client.IRegion<Object, Object>;
public class RegionWrapper
{
protected IRegion<object, object> m_region;
protected bool m_noack;
public IRegion<object, object> Region
{
get
{
return m_region;
}
}
public RegionWrapper(IRegion<object, object> region)
{
if (region == null)
{
Assert.Fail("Cannot wrap null region.");
}
m_region = region;
}
public RegionWrapper(string name)
{
m_region = CacheHelper.GetRegion<object, object>(name);
if (m_region == null)
{
Assert.Fail("No region with name {0} found!", name);
}
}
public virtual void Put(int key, int value)
{
m_region["key" + key.ToString()] = value;
}
public virtual bool WaitForKey(string key)
{
return WaitForKey(key, 100, 100);
}
public virtual bool WaitForKey(string key, int maxTries, int sleepMillis)
{
int tries = 0;
bool found = false;
while ((tries < maxTries) && (!(found = m_region.ContainsKey(key))))
{
Thread.Sleep(sleepMillis);
tries++;
}
return found;
}
public virtual bool WaitForValue(ICacheableKey key)
{
return WaitForValue(key, 100, 100);
}
public virtual bool WaitForValue(ICacheableKey cKey, int maxTries, int sleepMillis)
{
int tries = 0;
bool found = false;
while ((tries++ < maxTries) && (!(found = m_region.ContainsValueForKey(cKey))))
{
Thread.Sleep(sleepMillis);
}
return found;
}
public virtual Object WaitForValueGet(ICacheableKey cKey,
int maxTries, int sleepMillis)
{
int tries = 0;
Object cVal = null;
while ((tries++ < maxTries) && ((cVal = m_region[cKey]) != null))
{
Thread.Sleep(sleepMillis);
}
return cVal;
}
public virtual int WaitForValue(Object key, int expected, bool noack)
{
int val = -1;
Object cVal = null;
if (noack)
{
for (int tries = 0; tries < 100; tries++)
{
cVal = m_region[key];
Assert.IsNotNull(cVal, "value should not be null.");
Util.Log("WaitForValue: Received value: {0}", cVal);
val = int.Parse(cVal.ToString());
if (val == expected)
{
break;
}
Thread.Sleep(100);
}
}
else
{
cVal = m_region[key];
Assert.IsNotNull(cVal, "value should not be null.");
val = int.Parse(cVal.ToString());
}
return val;
}
// by convention, we'll accept value of -1 to mean not exists, 0 to mean invalid, and otherwise we'll compare.
public virtual void Test(int key, int value)
{
Test(key, value, m_noack);
}
public virtual void Test(int key, int value, bool noack)
{
string cKey = "key" + key.ToString();
StackFrame sf = new StackFrame(1, true);
int line = sf.GetFileLineNumber();
string method = sf.GetMethod().Name;
if (value == -1)
{
Assert.IsFalse(m_region.GetLocalView().ContainsKey(cKey),
"unexpected key found at line {0} in method {1}.", line, method);
if (noack)
{ // need to wait a bit and retest...
Thread.Sleep(1000);
Assert.IsFalse(m_region.GetLocalView().ContainsKey(cKey),
"unexpected key found at line {0} in method {1}.", line, method);
}
}
else if (value == 0)
{
if (noack)
{
WaitForKey(cKey);
}
Assert.IsTrue(m_region.GetLocalView().ContainsKey(cKey),
"missing key at line {0} in method {1}.", line, method);
Assert.IsFalse(m_region.ContainsValueForKey(cKey),
"should have found invalid at line {0} in method {1}.", line, method);
}
else
{
if (noack)
{
WaitForKey(cKey);
}
Assert.IsTrue(m_region.GetLocalView().ContainsKey(cKey),
"missing key at line {0} in method {1}.", line, method);
int val = WaitForValue(cKey, value, noack);
Assert.AreEqual(value, val,
"unexpected value: \"{0}\", expected \"{1}\" from line {2} in method {3}",
val, value, line, method);
}
}
// by convention, we'll accept value of -1 to mean not exists, otherwise we'll compare.
public virtual void NetSearch(int key, int value)
{
string cKey = "key" + key.ToString();
Assert.IsFalse(m_region.ContainsKey(cKey), "shouldn't have key before NetSearch.");
int cVal = (int)m_region[cKey];
if (value == -1)
{
Assert.IsNull(cVal, "unexpected value found.");
}
else
{
Assert.IsNotNull(cVal, "missing value for key[{0}].", cKey);
Util.Log("got value='{0}' for key[{1}]", cVal, cKey);
Assert.AreEqual(value, cVal);
Assert.IsTrue(m_region.ContainsValueForKey(cKey),
"should now be in the local cache.");
}
}
public void ShowKeys()
{
ICollection<Object> keys = m_region.Keys;
int len = keys.Count;
Util.Log("Total keys in IRegion<object, object> {0} : {1}", m_region.Name, len);
CacheHelper.ShowKeys(keys);
}
public void ShowValues()
{
ICollection<Object> values = m_region.Values;
int len = values.Count;
Util.Log("Total values in IRegion<object, object> {0} : {1}", m_region.Name, len);
CacheHelper.ShowValues(values);
}
public void ShowKeysValues()
{
//Object value;
ICollection<Object> keys = m_region.Keys;
int len = keys.Count;
Util.Log("Total keys in IRegion<object, object> {0} : {1}", m_region.Name, len);
for (int i = 0; i < len; i++)
{
//TODO UNCOMMENT ONCE WE ATTACH THE LIST TO THE COLLECTION
//value = m_region[keys[i]];
//Util.Log("Key[{0}] = {1}, Value[{2}] = {3}", i, keys[i], i, value);
}
}
}
}