clicache/integration-test/DistOpsStepsN.cs (1,778 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.Collections.Generic; using System.Threading; using System.Reflection; using System.Collections; 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 abstract class DistOpsSteps : UnitTests { #region Protected utility functions used by the tests protected virtual void VerifyAll(string regionName, string key, string val, bool noKey) { VerifyAll(regionName, key, val, noKey, false, true); } protected virtual void VerifyAll(string regionName, string key, string val, bool noKey, bool isCreated, bool checkVal) { // Verify key and value exist in this region, in this process. string logStr = null; if (!isCreated) { if (noKey) { logStr = string.Format( "Verify key {0} does not exist in region {1}", key, regionName); } else if (val == null) { logStr = string.Format( "Verify value for key {0} does not exist in region {1}", key, regionName); } else { logStr = string.Format( "Verify value for key {0} is: {1} in region {2}", key, val, regionName); } Util.Log(logStr); } IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); //CacheableString cKey = new CacheableString(key); string cKey = key; //Util.Log("REGION NAME = {0} cKey = {1} ", regionName, cKey); Thread.Sleep(100); // give distribution threads a chance to run // if the region is no ack, then we may need to wait... if (!isCreated) { if (!noKey) { // need to find the key! Assert.IsTrue(region.GetLocalView().ContainsKey(cKey), "Key not found in region."); } if (val != null && checkVal) { // need to have a value! Assert.IsTrue(region.GetLocalView().ContainsValueForKey(cKey), "Value not found in region."); } } // loop up to maxLoop times, testing condition int maxLoop = 1000; int sleepMillis = 50; // milliseconds int containsKeyCnt = 0; int containsValueCnt = 0; int testValueCnt = 0; for (int i = 1; i <= maxLoop; i++) { if (isCreated) { if (!region.GetLocalView().ContainsKey(cKey)) containsKeyCnt++; else break; Assert.Less(containsKeyCnt, maxLoop, "Key has not been created in region."); } else { if (noKey) { if (region.GetLocalView().ContainsKey(cKey)) containsKeyCnt++; else break; Assert.Less(containsKeyCnt, maxLoop, "Key found in region."); } if (val == null) { if (region.GetLocalView().ContainsValueForKey(cKey)) containsValueCnt++; else break; Assert.Less(containsValueCnt, maxLoop, "Value found in region."); } else { var cVal = region.Get(cKey).ToString(); Assert.IsNotNull(cVal, "Value should not be null."); if (cVal != val) testValueCnt++; else break; Assert.Less(testValueCnt, maxLoop, "Incorrect value found. Expected: '{0}' ; Got: '{1}'", val, cVal); } } Thread.Sleep(sleepMillis); } } protected virtual void VerifyInvalid(string regionName, string key) { VerifyAll(regionName, key, null, false); } protected virtual void VerifyDestroyed(string regionName, string key) { VerifyAll(regionName, key, null, true); } protected virtual void VerifyEntry(string regionName, string key, string val) { VerifyAll(regionName, key, val, false, false, true); } protected virtual void VerifyEntry(string regionName, string key, string val, bool checkVal) { VerifyAll(regionName, key, val, false, false, checkVal); } protected virtual void VerifyCreated(string regionName, string key) { VerifyAll(regionName, key, null, false, true, false); } protected virtual object GetEntry(string regionName, string key) { var val = CacheHelper.GetVerifyRegion<string, string>(regionName).Get(key); if (val != null) { Util.Log( "GetEntry returned value: ({0}) for key: ({1}) in region: ({2})", val, key, regionName); } else { Util.Log("GetEntry return NULL value for key: ({0}) in region: ({1})", key, regionName); } return val; } protected virtual void CreateEntry(string regionName, string key, string val) { Util.Log("Creating entry -- key: {0} value: {1} in region {2}", key, val, regionName); // Create entry, verify entry is correct IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); if (region.GetLocalView().ContainsKey(key)) region[key] = val; else region.Add(key, val);/*Create replaced with new API Add() */ VerifyEntry(regionName, key, val); } protected virtual void CreateEntryWithLocatorException(string regionName, string key, string val) { bool foundException = false; try { CreateEntry(regionName, key, val); } catch (Apache.Geode.Client.NotConnectedException ex) { if (ex.InnerException is NoAvailableLocatorsException) { Util.Log("Got expected {0}: {1}", ex.GetType().Name, ex.Message); foundException = true; } } if (!foundException) { Assert.Fail("Expected NotConnectedException with inner exception NoAvailableLocatorsException"); } } protected virtual void UpdateEntry(string regionName, string key, string val, bool checkVal) { Util.Log("Updating entry -- key: {0} value: {1} in region {2}", key, val, regionName); // Update entry, verify entry is correct IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); Assert.IsTrue(region.GetLocalView().ContainsKey(key), "Key should have been found in region."); if (checkVal) { Assert.IsTrue(region.ContainsValueForKey(key), "Value should have been found in region."); } region[key] = val; VerifyEntry(regionName, key, val, checkVal); } protected virtual void DoNetsearch(string regionName, string key, string val, bool checkNoKey) { Util.Log("Netsearching for entry -- key: {0} " + "expecting value: {1} in region {2}", key, val, regionName); // Get entry created in Process A, verify entry is correct IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); if (checkNoKey) { Assert.IsFalse(region.GetLocalView().ContainsKey(key), "Key should not have been found in region."); } string checkVal = (string)region[key]; Util.Log("Got value: {0} for key {1}, expecting {2}", checkVal, key, val); VerifyEntry(regionName, key, val); } protected virtual void DoCacheLoad(string regionName, string key, string val, bool checkNoKey) { Util.Log("Cache load for entry -- key: {0} " + "expecting value: {1} in region {2}", key, val, regionName); // Get entry created in Process A, verify entry is correct IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); if (checkNoKey) { Assert.IsFalse(region.GetLocalView().ContainsKey(key), "Key should not have been found in region."); } string checkVal = null; try { checkVal = (string)region[key]; } catch (Apache.Geode.Client.KeyNotFoundException) { // expected? //checkVal = (string)region[key]; } Util.Log("Got value: {0} for key {1}, expecting {2}", checkVal, key, val); //VerifyEntry(regionName, key, val); } protected virtual void InvalidateEntry(string regionName, string key) { Util.Log("Invalidating entry -- key: {0} in region {1}", key, regionName); // Invalidate entry, verify entry is invalidated IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); Assert.IsTrue(region.GetLocalView().ContainsKey(key), "Key should have been found in region."); Assert.IsTrue(region.GetLocalView().ContainsValueForKey(key), "Value should have been found in region."); region.GetLocalView().Invalidate(key); VerifyInvalid(regionName, key); } protected virtual void DestroyEntry(string regionName, string key) { Util.Log("Destroying entry -- key: {0} in region {1}", key, regionName); // Destroy entry, verify entry is destroyed IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(regionName); Assert.IsTrue(region.GetLocalView().ContainsKey(key), "Key should have been found in region."); region.Remove(key); //Destroy() replaced by new API Remove() VerifyDestroyed(regionName, key); } #endregion #region Protected members protected string[] m_keys = { "Key-1", "Key-2", "Key-3", "Key-4", "Key-5", "Key-6" }; protected string[] m_vals = { "Value-1", "Value-2", "Value-3", "Value-4", "Value-5", "Value-6" }; protected string[] m_nvals = { "New Value-1", "New Value-2", "New Value-3", "New Value-4", "New Value-5" }; protected string[] m_regionNames; #endregion #region Various steps for DistOps public virtual void CreateRegions(string[] regionNames) { CacheHelper.CreateILRegion<object, object>(regionNames[0], true, true, null); CacheHelper.CreateILRegion<object, object>(regionNames[1], false, true, null); m_regionNames = regionNames; } public virtual void CreateTCRegions(string[] regionNames, string locators, bool clientNotification) { CacheHelper.CreateTCRegion_Pool<string, string>(regionNames[0], true, true, null, locators, "__TESTPOOL__", clientNotification); CacheHelper.CreateTCRegion_Pool<string, string>(regionNames[1], false, true, null, locators, "__TESTPOOL__", clientNotification); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool(string[] regionNames, string locators, string poolName, bool clientNotification) { CreateTCRegions_Pool(regionNames, locators, poolName, clientNotification, false); } public virtual void SetHeaplimit(int maxheaplimit, int delta) { CacheHelper.SetHeapLimit(maxheaplimit, delta); } public virtual void UnsetHeapLimit() { CacheHelper.UnsetHeapLimit(); } public virtual void CreateTCRegions_Pool(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl) { CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, true, null, locators, poolName, clientNotification, ssl, false); CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, true, null, locators, poolName, clientNotification, ssl, false); m_regionNames = regionNames; } //CreateTCRegions_Pool_PDXWithLL public virtual void CreateTCRegions_Pool_PDXWithLL(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool cachingEnable) { CacheHelper.PdxReadSerialized = true; CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, cachingEnable, null, locators, poolName, clientNotification, ssl, false); CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, cachingEnable, null, locators, poolName, clientNotification, ssl, false); //Util.Log("CreateTCRegions_Pool_PDXWithLL PdxReadSerialized = " + CacheHelper.DCache.GetPdxReadSerialized()); Assert.IsTrue(CacheHelper.DCache.GetPdxReadSerialized()); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool cachingEnable) { CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, cachingEnable, null, locators, poolName, clientNotification, ssl, false); CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, cachingEnable, null, locators, poolName, clientNotification, ssl, false); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool_PDX(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool cachingEnable) { CacheHelper.PdxIgnoreUnreadFields = true; CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, cachingEnable, null, locators, poolName, clientNotification, ssl, false); CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, cachingEnable, null, locators, poolName, clientNotification, ssl, false); Assert.IsTrue(CacheHelper.DCache.GetPdxIgnoreUnreadFields()); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool_PDX2(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool cachingEnable) { CacheHelper.PdxReadSerialized = true; CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[0], true, cachingEnable, null, locators, poolName, clientNotification, ssl, false); CacheHelper.CreateTCRegion_Pool<object, object>(regionNames[1], false, cachingEnable, null, locators, poolName, clientNotification, ssl, false); Assert.IsTrue(CacheHelper.DCache.GetPdxReadSerialized()); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool2_WithPartitionResolver(string[] regionNames, string locators, string poolName, bool clientNotification, bool pr) { CreateTCRegions_Pool2<object, object>(regionNames, locators, poolName, clientNotification, false, pr); } public virtual void CreateTCRegions_Pool2<TKey, TVal>(string[] regionNames, string locators, string poolName, bool clientNotification, bool pr) { CreateTCRegions_Pool2<TKey, TVal>(regionNames, locators, poolName, clientNotification, false, pr); } public virtual void CreateTCRegions_Pool2<TKey, TVal>(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool pr) { CacheHelper.CreateTCRegion_Pool2<TKey, TVal>(regionNames[0], true, true, null, locators, poolName, clientNotification, ssl, false, pr); CacheHelper.CreateTCRegion_Pool2<TKey, TVal>(regionNames[1], false, true, null, locators, poolName, clientNotification, ssl, false, pr); m_regionNames = regionNames; } public virtual void CreateTCRegions_Pool1(string regionNames, string locators, string poolName, bool clientNotification) { CreateTCRegions_Pool1(regionNames, locators, poolName, clientNotification, false); } public virtual void CreateTCRegions_Pool1(string regionNames, string locators, string poolName, bool clientNotification, bool ssl) { if (regionNames.Equals("R1")) { Util.Log("R1 P1 added"); CustomPartitionResolver1<object> pr = CustomPartitionResolver1<object>.Create(); CacheHelper.CreateTCRegion_Pool1<object, object>(regionNames, true, true, null, locators, poolName, clientNotification, ssl, false, pr); } else if (regionNames.Equals("R2")) { Util.Log("R2 P2 added"); CustomPartitionResolver2<object> pr = CustomPartitionResolver2<object>.Create(); CacheHelper.CreateTCRegion_Pool1<object, object>(regionNames, true, true, null, locators, poolName, clientNotification, ssl, false, pr); } else { Util.Log("R3 P3 added"); CustomPartitionResolver3<object> pr = CustomPartitionResolver3<object>.Create(); CacheHelper.CreateTCRegion_Pool1<object, object>(regionNames, true, true, null, locators, poolName, clientNotification, ssl, false, pr); } } public virtual void CreateTCRegion2(string name, bool ack, bool caching, IPartitionResolver<TradeKey, Object> resolver, string locators, bool clientNotification) { CacheHelper.CreateTCRegion2<TradeKey, Object>(name, ack, caching, resolver, (string)locators, clientNotification); } private AppDomain m_firstAppDomain; private AppDomain m_secondAppDomain; private CacheHelperWrapper m_chw_forFirstAppDomain; private CacheHelperWrapper m_chw_forSecondAppDomain; private PutGetTestsAD m_putGetTests_forFirstAppDomain; private PutGetTestsAD m_putGetTests_forSecondAppDomain; public void InitializeAppDomain() { m_firstAppDomain = AppDomain.CreateDomain("FIRST_APPDOMAIN"); m_secondAppDomain = AppDomain.CreateDomain("SECOND_APPDOMAIN"); m_chw_forFirstAppDomain = (CacheHelperWrapper)m_firstAppDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "Apache.Geode.Client.UnitTests.CacheHelperWrapper"); m_chw_forSecondAppDomain = (CacheHelperWrapper)m_secondAppDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "Apache.Geode.Client.UnitTests.CacheHelperWrapper"); m_putGetTests_forFirstAppDomain = (PutGetTestsAD)m_firstAppDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "Apache.Geode.Client.UnitTests.PutGetTestsAD"); m_putGetTests_forSecondAppDomain = (PutGetTestsAD)m_secondAppDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "Apache.Geode.Client.UnitTests.PutGetTestsAD"); } public void CloseCacheAD() { try { m_chw_forFirstAppDomain.CloseCache(); } catch (Exception e) { Util.Log(e.Message + e.StackTrace); throw e; } m_chw_forSecondAppDomain.CloseCache(); CacheHelper.CloseCache(); } //for appdomain public virtual void CreateTCRegions_Pool_AD(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, long dtTime) { CreateTCRegions_Pool_AD2(regionNames, locators, poolName, clientNotification, ssl, true, false); CacheableHelper.RegisterBuiltinsAD(dtTime); try { CacheHelperWrapper chw = new CacheHelperWrapper(); chw.CreateTCRegions_Pool_AD<object, object>(regionNames, locators, poolName, clientNotification, ssl, true, false); //Util.LogFile = filename; //CacheHelper.ConnectConfig("DSNAME", null); } catch (Exception e) { Console.WriteLine(" fot exception in main process " + e.Message); } } public virtual void CreateTCRegions_Pool_AD2(string[] regionNames, string locators, string poolName, bool clientNotification, bool ssl, bool caching, bool pdxReadSerialized) { string filename = Util.DUnitLogDir + System.IO.Path.DirectorySeparatorChar + "tmp" + ".log"; m_chw_forFirstAppDomain.SetLogFile(filename); m_chw_forSecondAppDomain.SetLogFile(filename); m_chw_forFirstAppDomain.CreateTCRegions_Pool_AD<object, object>(regionNames, locators, poolName, clientNotification, ssl, caching, pdxReadSerialized); // m_chw_forFirstAppDomain.CreateTCRegions_Pool_AD(regionNames, endpoints, locators, poolName, clientNotification, ssl); //m_regionNames = regionNames; try { // m_chw_forSecondAppDomain.CallDistrinbutedConnect(); m_chw_forSecondAppDomain.CreateTCRegions_Pool_AD<object, object>(regionNames, locators, poolName, clientNotification, ssl, caching, pdxReadSerialized); Console.WriteLine("initializing second app domain done"); } catch (Exception e) { Util.Log("initializing second app domain goty exception " + e.Message); } try { // m_chw_forSecondAppDomain.CreateTCRegions_Pool_AD(regionNames, endpoints, locators, poolName, clientNotification, ssl); CacheHelper.DCache.TypeRegistry.RegisterPdxType(PdxTests.PdxType.CreateDeserializable); CacheHelperWrapper chw = new CacheHelperWrapper(); chw.CreateTCRegions_Pool_AD<object, object>(regionNames, locators, poolName, clientNotification, ssl, caching, pdxReadSerialized); } catch (Exception) { } } public virtual void SetRegionAD(String regionName) { m_putGetTests_forFirstAppDomain.SetRegion(regionName); m_putGetTests_forSecondAppDomain.SetRegion(regionName); } public virtual void pdxPutGetTest(bool caching, bool readPdxSerialized) { m_putGetTests_forFirstAppDomain.pdxPutGet(caching, readPdxSerialized); } public virtual void pdxGetPutTest(bool caching, bool readPdxSerialized) { m_putGetTests_forSecondAppDomain.pdxGetPut(caching, readPdxSerialized); } public virtual void RegisterBuiltinsAD(long dtTime) { m_chw_forFirstAppDomain.RegisterBuiltins(dtTime); m_chw_forSecondAppDomain.RegisterBuiltins(dtTime); } public void TestAllKeyValuePairsAD(string regionName, bool runQuery, long dtTime) { ICollection<UInt32> registeredKeyTypeIds = CacheableWrapperFactory.GetRegisteredKeyTypeIds(); ICollection<UInt32> registeredValueTypeIds = CacheableWrapperFactory.GetRegisteredValueTypeIds(); m_chw_forFirstAppDomain.RegisterBuiltins(dtTime); m_chw_forSecondAppDomain.RegisterBuiltins(dtTime); foreach (UInt32 keyTypeId in registeredKeyTypeIds) { int numKeys; numKeys = m_putGetTests_forFirstAppDomain.InitKeys(keyTypeId, PutGetTests.NumKeys, PutGetTests.KeySize); numKeys = m_putGetTests_forSecondAppDomain.InitKeys(keyTypeId, PutGetTests.NumKeys, PutGetTests.KeySize); Type keyType = CacheableWrapperFactory.GetTypeForId(keyTypeId); foreach (UInt32 valueTypeId in registeredValueTypeIds) { m_putGetTests_forFirstAppDomain.InitValues(valueTypeId, numKeys, PutGetTests.ValueSize); m_putGetTests_forSecondAppDomain.InitValues(valueTypeId, numKeys, PutGetTests.ValueSize); Type valueType = CacheableWrapperFactory.GetTypeForId(valueTypeId); Util.Log("Starting gets/puts with keyType '{0}' and valueType '{1}'", keyType.Name, valueType.Name); // StartTimer(); Util.Log("Running warmup task which verifies the puts."); PutGetStepsAD(regionName, true, runQuery); Util.Log("End warmup task."); } } CloseCacheAD(); CacheHelper.Close(); } public void PutGetStepsAD(string regionName, bool verifyGets, bool runQuery) { if (verifyGets) { m_putGetTests_forFirstAppDomain.DoPuts(); m_putGetTests_forFirstAppDomain.DoKeyChecksumPuts(); m_putGetTests_forFirstAppDomain.DoValChecksumPuts(); m_putGetTests_forSecondAppDomain.DoGetsVerify(); if (runQuery) { // run a query for ThinClient regions to check for deserialization // compability on server m_putGetTests_forFirstAppDomain.DoRunQuery(); } m_putGetTests_forSecondAppDomain.DoPuts(); m_putGetTests_forSecondAppDomain.DoKeyChecksumPuts(); m_putGetTests_forSecondAppDomain.DoValChecksumPuts(); m_putGetTests_forFirstAppDomain.DoGetsVerify(); } else { m_putGetTests_forFirstAppDomain.DoPuts(); m_putGetTests_forSecondAppDomain.DoGets(); m_chw_forFirstAppDomain.InvalidateRegion(regionName); m_chw_forSecondAppDomain.InvalidateRegion(regionName); m_putGetTests_forSecondAppDomain.DoPuts(); m_putGetTests_forFirstAppDomain.DoGets(); } // this query invocation is primarily to delete the entries that cannot // be deserialized by the server if (runQuery) { m_putGetTests_forFirstAppDomain.DoRunQuery(); } } public virtual void DestroyRegions() { if (m_regionNames != null) { CacheHelper.DestroyRegion<object, object>(m_regionNames[0], false, true); CacheHelper.DestroyRegion<object, object>(m_regionNames[1], false, true); } } public virtual void RegisterAllKeysR0WithoutValues() { IRegion<object, object> region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); region0.GetSubscriptionService().RegisterAllKeys(false, false, false); } public virtual void RegisterAllKeysR1WithoutValues() { IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); region1.GetSubscriptionService().RegisterAllKeys(false, false, false); } public virtual void StepThree() { CreateEntry(m_regionNames[0], m_keys[0], m_vals[0]); CreateEntry(m_regionNames[1], m_keys[2], m_vals[2]); } public virtual void StepFour() { DoNetsearch(m_regionNames[0], m_keys[0], m_vals[0], false); DoNetsearch(m_regionNames[1], m_keys[2], m_vals[2], false); CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]); CreateEntry(m_regionNames[1], m_keys[3], m_vals[3]); } public virtual void StepFive(bool checkVal) { DoNetsearch(m_regionNames[0], m_keys[1], m_vals[1], false); DoNetsearch(m_regionNames[1], m_keys[3], m_vals[3], false); UpdateEntry(m_regionNames[0], m_keys[0], m_nvals[0], checkVal); UpdateEntry(m_regionNames[1], m_keys[2], m_nvals[2], checkVal); } public virtual void StepSix(bool checkVal) { // Some CPU intensive code to test back pressure double y = 100.01; for (int i = 100000000; i > 0; i--) { double x = i * y; y = x / i; } VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]); VerifyEntry(m_regionNames[1], m_keys[2], m_nvals[2]); UpdateEntry(m_regionNames[0], m_keys[1], m_nvals[1], checkVal); UpdateEntry(m_regionNames[1], m_keys[3], m_nvals[3], checkVal); } //public virtual void StepSeven() //{ // VerifyEntry(m_regionNames[0], m_keys[1], m_nvals[1]); // VerifyEntry(m_regionNames[1], m_keys[3], m_nvals[3]); // InvalidateEntry(m_regionNames[0], m_keys[0]); // InvalidateEntry(m_regionNames[1], m_keys[2]); //} //public virtual void StepEight() //{ // VerifyInvalid(m_regionNames[0], m_keys[0]); // VerifyInvalid(m_regionNames[1], m_keys[2]); // InvalidateEntry(m_regionNames[0], m_keys[1]); // InvalidateEntry(m_regionNames[1], m_keys[3]); //} //public virtual void StepNine() //{ // VerifyInvalid(m_regionNames[0], m_keys[1]); // VerifyInvalid(m_regionNames[1], m_keys[3]); // DestroyEntry(m_regionNames[0], m_keys[0]); // DestroyEntry(m_regionNames[1], m_keys[2]); //} public virtual void StepTen() { VerifyDestroyed(m_regionNames[0], m_keys[0]); VerifyDestroyed(m_regionNames[1], m_keys[2]); DestroyEntry(m_regionNames[0], m_keys[1]); DestroyEntry(m_regionNames[1], m_keys[3]); } public virtual void StepEleven() { VerifyDestroyed(m_regionNames[0], m_keys[1]); VerifyDestroyed(m_regionNames[1], m_keys[3]); } public virtual void RemoveStepFive() { IRegion<object, object> reg0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); IRegion<object, object> reg1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); ICollection<KeyValuePair<Object, Object>> IcollectionRegion0 = reg0; ICollection<KeyValuePair<Object, Object>> IcollectionRegion1 = reg1; // Try removing non-existent entry from regions, result should be false. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[4], m_vals[4])), "Result of Remove should be false, as this entry is not present in first region."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[4], m_vals[4])), "Result of Remove should be false, as this entry is not present in second region."); // Try removing non-existent key, but existing value from regions, result should be false. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[4], m_vals[0])), "Result of Remove should be false, as this key is not present in first region."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[4], m_vals[0])), "Result of Remove should be false, as this key is not present in second region."); // Try removing existent key, but non-existing value from regions, result should be false. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[4])), "Result of Remove should be false, as this value is not present in first region."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[4])), "Result of Remove should be false, as this value is not present in second region."); // Try removing existent key, and existing value from regions, result should be true. Assert.IsTrue(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[0])), "Result of Remove should be true, as this entry is present in first region."); Assert.IsTrue(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[2], m_vals[2])), "Result of Remove should be true, as this entry is present in second region."); Assert.IsFalse(reg0.ContainsKey(m_keys[0]), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[0]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey(m_keys[2]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[2]), "GetLocalView().ContainsKey should be false"); // Try removing already deleted entry from regions, result should be false, but no exception. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[0])), "Result of Remove should be false, as this entry is not present in first region."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[0])), "Result of Remove should be false, as this entry is not present in second region."); // Try locally destroying already deleted entry from regions, It should result into exception. Assert.IsFalse(reg0.GetLocalView().Remove(m_keys[0], null), "local Destroy on already removed key should have returned false"); Assert.IsFalse(reg1.GetLocalView().Remove(m_keys[0], null), "local Destroy on already removed key should have returned false"); Util.Log("StepFive complete."); } public virtual void RemoveStepSix() { IRegion<object, object> reg0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); IRegion<object, object> reg1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]); ICollection<KeyValuePair<Object, Object>> IcollectionRegion0 = reg0; ICollection<KeyValuePair<Object, Object>> IcollectionRegion1 = reg1; reg0[m_keys[1]] = m_nvals[1]; reg1[m_keys[3]] = m_nvals[3]; // Try removing value that is present on client as well as server, result should be true. Assert.IsTrue(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_nvals[1])), "Result of Remove should be true, as this value is present locally, & also present on server."); Assert.IsTrue(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_nvals[3])), "Result of Remove should be true, as this value is present locally, & also present on server."); Assert.IsFalse(reg0.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey(m_keys[3]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be false"); Util.Log("Step 6.1 complete."); // Try removing value that is present on client but not on server, result should be false. reg0[m_keys[1]] = m_vals[1]; reg1[m_keys[3]] = m_vals[3]; reg0.GetLocalView()[m_keys[1]] = m_nvals[1]; reg1.GetLocalView()[m_keys[3]] = m_nvals[3]; Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_nvals[1])), "Result of Remove should be false, as this value is present locally, but not present on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_nvals[3])), "Result of Remove should be false, as this value is present locally, but not present on server."); Assert.IsTrue(reg0.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg1.ContainsKey(m_keys[3]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 6.2 complete."); // Try removing value that is not present on client but present on server, result should be false. reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); reg0[m_keys[1]] = m_vals[1]; reg1[m_keys[3]] = m_vals[3]; reg0.GetLocalView()[m_keys[1]] = m_nvals[1]; reg1.GetLocalView()[m_keys[3]] = m_nvals[3]; Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsTrue(reg0.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg1.ContainsKey(m_keys[3]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 6.3 complete."); // Try removing value that is invalidated on client but exists on server, result should be false. reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); reg0[m_keys[1]] = m_vals[1]; reg1[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Invalidate(m_keys[1]); reg1.GetLocalView().Invalidate(m_keys[3]); Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_nvals[1])), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_nvals[3])), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsTrue(reg0.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg1.ContainsKey(m_keys[3]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 6.4 complete."); // Try removing null value, that is invalidated on client but exists on the server, result should be false. reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); reg0[m_keys[1]] = m_vals[1]; reg1[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Invalidate(m_keys[1]); reg1.GetLocalView().Invalidate(m_keys[3]); Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], null)), "Result of Remove should be false, as this value is not present locally, but present only on server."); Assert.IsTrue(reg0.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg1.ContainsKey(m_keys[3]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 6.5 complete."); // Try removing a entry (value) which is not present on client as well as server, result should be false. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>("NewKey1", "NewValue1")), "Result of Remove should be false, as this value is not present locally, and not present on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>("NewKey3", "NewValue3")), "Result of Remove should be false, as this value is not present locally, and not present on server."); Assert.IsFalse(reg0.ContainsKey("NewKey1"), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey("NewKey1"), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey("NewKey3"), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey("NewKey3"), "GetLocalView().ContainsKey should be false"); Util.Log("Step 6.6 complete."); // Try removing a entry with a null value, which is not present on client as well as server, result should be false. Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>("NewKey1", null)), "Result of Remove should be false, as this value is not present locally, and not present on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>("NewKey3", null)), "Result of Remove should be false, as this value is not present locally, and not present on server."); Assert.IsFalse(reg0.ContainsKey("NewKey1"), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey("NewKey1"), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey("NewKey3"), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey("NewKey3"), "GetLocalView().ContainsKey should be false"); Util.Log("Step 6.7 complete."); // Try removing a entry (value) which is not present on client but exists on the server, result should be true. reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); reg0[m_keys[1]] = m_nvals[1]; reg1[m_keys[3]] = m_nvals[3]; reg0.GetLocalView().Remove(m_keys[1]); reg1.GetLocalView().Remove(m_keys[3]); Assert.IsTrue(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_nvals[1])), "Result of Remove should be true, as this value does not exist locally, but exists on server."); Assert.IsTrue(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_nvals[3])), "Result of Remove should be true, as this value does not exist locally, but exists on server."); Assert.IsFalse(reg0.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey(m_keys[3]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be false"); Util.Log("Step6.8 complete."); reg0[m_keys[1]] = m_nvals[1]; reg1[m_keys[3]] = m_nvals[3]; reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be false, as this value does not exist locally, but exists on server."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], null)), "Result of Remove should be false, as this value does not exist locally, but exists on server."); Assert.IsFalse(reg0.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey(m_keys[3]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "GetLocalView().ContainsKey should be false"); Util.Log("Step6.8.1 complete."); // Try locally removing an entry which is locally destroyed with a NULL. reg0[m_keys[1]] = m_vals[1]; reg1[m_keys[3]] = m_vals[3]; Assert.IsTrue(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be true, as this value does not exists locally."); Assert.IsFalse(IcollectionRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsTrue(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(reg0.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg1.ContainsKey(m_keys[3]), "ContainsKey should be false"); Util.Log("Step6.8.2 complete."); //-------------------------------------GetLocalView().Remove Testcases------------------------------------------------ ICollection<KeyValuePair<Object, Object>> IcollectionLocalRegion0 = reg0.GetLocalView(); ICollection<KeyValuePair<Object, Object>> IcollectionLocalRegion1 = reg1.GetLocalView(); // Try locally removing an entry (value) which is present on the client. reg0.Remove(m_keys[1]); reg1.Remove(m_keys[3]); reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; Assert.IsTrue(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be true, as this value exists locally."); Assert.IsTrue(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be true, as this value exists locally."); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be false"); Util.Log("Step6.9 complete."); Assert.IsFalse(reg0.GetLocalView().Remove(m_keys[1], null), "local Destroy on already removed key should have returned false"); Assert.IsFalse(reg1.GetLocalView().Remove(m_keys[3], null), "local Destroy on already removed key should have returned false"); Util.Log("Step6.10 complete."); // Try locally removing an entry (value) which is not present on the client (value mismatch). reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_nvals[1])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_nvals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be true"); Util.Log("Step6.11 complete."); // Try locally removing an entry (value) which is invalidated with a value. reg0.GetLocalView().Remove(m_keys[1]); reg1.GetLocalView().Remove(m_keys[3]); reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Invalidate(m_keys[1]); reg1.GetLocalView().Invalidate(m_keys[3]); Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be true"); Util.Log("Step6.12 complete."); // Try locally removing an entry (value) which is invalidated with a NULL. reg0.GetLocalView().Remove(m_keys[1]); reg1.GetLocalView().Remove(m_keys[3]); reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Invalidate(m_keys[1]); reg1.GetLocalView().Invalidate(m_keys[3]); Assert.IsTrue(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be true, as this value does not exists locally."); Assert.IsTrue(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], null)), "Result of Remove should be true, as this value does not exists locally."); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be false"); Util.Log("Step6.13 complete."); // Try locally removing an entry (value) with a NULL. reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], null)), "Result of Remove should be false, as this value does not exists locally."); Assert.IsTrue(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be true"); Util.Log("Step6.14 complete."); // Try locally removing an entry which is locally destroyed with a value. reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Remove(m_keys[1]); reg1.GetLocalView().Remove(m_keys[3]); Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be true"); Util.Log("Step6.15 complete."); // Try locally removing an entry which is locally destroyed with a NULL. reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; reg0.GetLocalView().Remove(m_keys[1]); reg1.GetLocalView().Remove(m_keys[3]); Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], null)), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be false"); Util.Log("Step6.16 complete."); // Try locally removing an entry which is already removed. reg0.GetLocalView()[m_keys[1]] = m_vals[1]; reg1.GetLocalView()[m_keys[3]] = m_vals[3]; Assert.IsTrue(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be true, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion0.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsTrue(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(IcollectionLocalRegion1.Remove(new KeyValuePair<Object, Object>(m_keys[3], m_vals[3])), "Result of Remove should be false, as this value does not exists locally."); Assert.IsFalse(reg0.GetLocalView().ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg1.GetLocalView().ContainsKey(m_keys[3]), "ContainsKey should be false"); Util.Log("Step6.17 complete."); // Try locally removing an entry when region scope is not null. Util.Log("StepSix complete."); } public virtual void RemoveStepEight() { IRegion<object, object> reg = CacheHelper.GetVerifyRegion<object, object>("exampleRegion"); ICollection<KeyValuePair<Object, Object>> IcollectionRegion = reg; // Try removing a entry which is present on client (value) but invalidated on the server, result should be false. reg.Remove(m_keys[0]); reg.Remove(m_keys[1]); reg[m_keys[0]] = m_vals[0]; reg[m_keys[1]] = m_vals[1]; Thread.Sleep(10000); //This is for expiration on server to execute. Assert.IsFalse(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[0], m_vals[0])), "Result of Remove should be false, as this value is present locally, but not present on server."); Assert.IsFalse(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[1], m_vals[1])), "Result of Remove should be false, as this value is present locally, but not present on server."); Assert.IsTrue(reg.ContainsKey(m_keys[0]), "ContainsKey should be true"); Assert.IsTrue(reg.GetLocalView().ContainsKey(m_keys[0]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 8.1 complete."); // Try removing a entry that is not present on client, but invalidated on server with null value, result should be true. reg.Remove(m_keys[0]); reg.Remove(m_keys[1]); reg[m_keys[0]] = m_nvals[0]; reg[m_keys[1]] = m_nvals[1]; reg.GetLocalView().Remove(m_keys[0]); reg.GetLocalView().Remove(m_keys[1]); Thread.Sleep(10000); //This is for expiration on server to execute. Assert.IsTrue(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[0], null)), "Result of Remove should be true, as this value is not present locally, & not present on server."); Assert.IsTrue(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be true, as this value is not present locally, & not present on server."); Assert.IsFalse(reg.GetLocalView().ContainsKey(m_keys[0]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg.ContainsKey(m_keys[0]), "ContainsKey should be false"); Assert.IsFalse(reg.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be false"); Util.Log("Step 8.2 complete."); // Try removing a entry with a (value) on client that is invalidated on server with null , result should be false. reg.Remove(m_keys[0]); reg.Remove(m_keys[1]); reg[m_keys[0]] = m_nvals[0]; reg[m_keys[1]] = m_nvals[1]; Thread.Sleep(10000); //This is for expiration on server to execute. Assert.IsFalse(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[0], null)), "Result of Remove should be false, as this value is present locally, & not present on server."); Assert.IsFalse(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be false, as this value is present locally, & not present on server."); Assert.IsTrue(reg.ContainsKey(m_keys[0]), "ContainsKey should be true"); Assert.IsTrue(reg.GetLocalView().ContainsKey(m_keys[0]), "GetLocalView().ContainsKey should be true"); Assert.IsTrue(reg.ContainsKey(m_keys[1]), "ContainsKey should be true"); Assert.IsTrue(reg.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be true"); Util.Log("Step 8.3 complete."); // Try removing a entry with a entry that is invalidated on the client as well as on server with a null value, result should be true. reg.Remove(m_keys[0]); reg.Remove(m_keys[1]); reg[m_keys[0]] = m_nvals[0]; reg[m_keys[1]] = m_nvals[1]; reg.Invalidate(m_keys[0]); reg.Invalidate(m_keys[1]); Thread.Sleep(10000); //This is for expiration on server to execute. Assert.IsTrue(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[0], null)), "Result of Remove should be true, as this value is not present locally, & not present on server."); Assert.IsTrue(IcollectionRegion.Remove(new KeyValuePair<Object, Object>(m_keys[1], null)), "Result of Remove should be true, as this value is not present locally, & not present on server."); Assert.IsFalse(reg.ContainsKey(m_keys[0]), "ContainsKey should be false"); Assert.IsFalse(reg.GetLocalView().ContainsKey(m_keys[0]), "GetLocalView().ContainsKey should be false"); Assert.IsFalse(reg.ContainsKey(m_keys[1]), "ContainsKey should be false"); Assert.IsFalse(reg.GetLocalView().ContainsKey(m_keys[1]), "GetLocalView().ContainsKey should be false"); // Test case for Bug #639, destroy operation on key that is not present in the region reduces the region's size by 1. // Steps to reproduce: Put 2 entries in to region. Destroy an entry that is not present in the region. Check for the sizes of keys, values and region. // It is observed that regions size is less by 1 from that of keys and values sizes. reg["Key100"] = "Value100"; reg["Key200"] = "Value200"; Util.Log("Region 2 puts complete "); Util.Log("Regions size = {0} ", reg.Count); reg.Remove("key300"); Assert.IsTrue(reg.Count == 2, "region size should be equal to 2"); System.Collections.Generic.ICollection<object> keys = reg.Keys; Util.Log("Region keys = {0} ", keys.Count); Assert.IsTrue(keys.Count == reg.Count, "region size should be equal to keys size"); System.Collections.Generic.ICollection<object> values = reg.Values; Util.Log("Region values = {0} ", values.Count); Assert.IsTrue(values.Count == reg.Count, "region size should be equal to values size"); reg.Remove("Key100"); keys = reg.Keys; Util.Log("Region keys = {0} ", keys.Count); Assert.IsTrue(keys.Count == reg.Count, "region size should be equal to keys size"); values = reg.Values; Util.Log("Region values = {0} ", values.Count); Assert.IsTrue(values.Count == reg.Count, "region size should be equal to values size"); Util.Log("RemoveStepEight complete."); } public virtual void LocalOpsStepOne() { IRegion<object, object> reg0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]); IRegion<object, object> localregion = reg0.GetLocalView(); localregion.Add(1, 1); object val = localregion[1]; Assert.IsTrue(val.Equals(1), "value should be equal"); localregion.Invalidate(1); val = localregion[1]; Assert.AreEqual(val, null); localregion.Add(2, "IntKeyStringValue"); val = localregion[1]; Assert.IsTrue(val.Equals("IntKeyStringValue"), "value should be equal"); try { localregion.Add(1, 1); Assert.Fail("Expected EntryExistException here"); } catch (EntryExistsException ) { Util.Log(" Expected EntryExistsException exception thrown by localCreate"); } string key = "LongKeyStringValue"; Int64 val1 = 9843754396659L; localregion.Add(key, val1); val = localregion[key]; Assert.IsTrue(val.Equals(val1), "value should be equal"); Int64 key1= 34324242L; string val11 = "LongKeyStringValue"; localregion.Add(key1, val11); val = localregion[key1]; Assert.IsTrue(val.Equals(val11), "value should be equal"); Int64 key2 = 34324242L; Int64 val2 = 9843754396659L; localregion.Add(key2, val2); val = localregion[key2]; Assert.IsTrue(val.Equals(val2), "value should be equal"); string key3 = "LongKeyStringValue"; string val3 = "LongKeyStringValue"; localregion.Add(key3, val3); val = localregion[key3]; Assert.IsTrue(val.Equals(val3), "value should be equal"); string i = ""; try { localregion.Add(i, val1); Assert.Fail("Expected IllegalArgumentException here"); } catch (IllegalArgumentException ) { Util.Log(" Expected IllegalArgumentException exception thrown by localCreate"); } try { localregion[i] = val1; Assert.Fail("Expected IllegalArgumentException here"); } catch (IllegalArgumentException ) { Util.Log(" Expected IllegalArgumentException exception thrown by localCreate"); } try { localregion.Remove(i); Assert.Fail("Expected IllegalArgumentException here"); } catch (IllegalArgumentException ) { Util.Log(" Expected IllegalArgumentException exception thrown by localCreate"); } try { localregion.Invalidate(i); Assert.Fail("Expected IllegalArgumentException here"); } catch (IllegalArgumentException) { Util.Log(" Expected IllegalArgumentException exception thrown by localCreate"); } Util.Log("LocalOpsStepOne complete."); } public virtual void IdictionaryRegionNullKeyOperations(String RegionName) { IRegion<object, object> region = CacheHelper.GetVerifyRegion<object, object>(RegionName); IRegion<object, object> localRegion = region.GetLocalView(); RegionNullKeyOperations(region, true); RegionNullKeyOperations(localRegion, false); } public virtual void RegionNullKeyOperations(IRegion<object, object> region, bool isRemoteInstance) { // chk for IllegalArgumentException. object value = 0; object NullKey = null; try { region.TryGetValue(NullKey, out value); //null Assert.Fail("Should have got IllegalArgumentException for null key arguement."); } catch (IllegalArgumentException ex) { Util.Log("Got expected IllegalArgumentException for null key arguement. {0} ", ex); } Util.Log("RegionNullKeyOperations TryGetValue Step complete."); // Try adding using Add, an entry in region with key as null, should get IllegalArgumentException. try { region.Add(NullKey, value); // null Assert.Fail("Should have got IllegalArgumentException."); } catch (IllegalArgumentException ex) { Util.Log("Got expected IllegalArgumentException {0}", ex); } try { region.Add(new KeyValuePair<object, object>(NullKey, value));//null Assert.Fail("Should have got IllegalArgumentException."); } catch (IllegalArgumentException ex) { Util.Log("Got expected IllegalArgumentException {0}", ex); } Util.Log("RegionNullKeyOperations Add Step complete."); // Try putting using Item_Set, an entry in region with key as null, should get IllegalArgumentException. try { region[NullKey] = value; //null key Assert.Fail("Should have got IllegalArgumentException"); } catch (IllegalArgumentException) { Util.Log("Got expected IllegalArgumentException "); } Util.Log("RegionNullKeyOperations Item_Set Step complete."); // Try putting using Item_Set, an entry in region with key as null, should get IllegalArgumentException. try { Object val = region[NullKey];//null Assert.Fail("Should have got IllegalArgumentException"); } catch (IllegalArgumentException) { Util.Log("Got expected IllegalArgumentException "); } Util.Log("RegionNullKeyOperations Item_Get Step complete."); // Try contains with null key, i should throw exception. try { region.Contains(new KeyValuePair<object, object>(NullKey, value));//null key Assert.Fail("Should have got IllegalArgumentException"); } catch (IllegalArgumentException ex) { Util.Log("Got expected IllegalArgumentException {0} ", ex); } Util.Log("RegionNullKeyOperations Contains Step complete."); // Try removing entry with null key, should throw IllegalArgumentException. try { region.Remove(NullKey);//null Assert.Fail("Should have got IllegalArgumentException."); } catch (IllegalArgumentException ex) { Util.Log("Got expected IllegalArgumentException {0} ", ex); } Util.Log("RegionNullKeyOperations Remove Step complete."); try { Object val = region[1]; Assert.Fail("Should have got KeyNotFoundException"); } catch (Apache.Geode.Client.KeyNotFoundException ex) { Util.Log("Got expected KeyNotFoundException {0} ", ex); } region[1] = 1; //Invalidate an entry and then do a get on to it, should throw EntryNotFoundException. region.Invalidate(1); try { Object val = region[1]; if (!isRemoteInstance) { Assert.Fail("Should have got KeyNotFoundException"); } } catch (Apache.Geode.Client.KeyNotFoundException ex) { Util.Log("Got expected KeyNotFoundException {0} ", ex); } region.Remove(1); //Remove an entry and then do a get on to it, should throw KeyNotFoundException. try { Object val = region[1]; Assert.Fail("Should have got KeyNotFoundException"); } catch (Apache.Geode.Client.KeyNotFoundException ex) { Util.Log("Got expected KeyNotFoundException {0} ", ex); } } public virtual void IdictionaryRegionArrayOperations(String RegionName) { TypesClass type = new TypesClass(); IdictionaryGenericRegionArrayOperations<int, bool[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.BoolArrayId, false); IdictionaryGenericRegionArrayOperations<int, char[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.CharArrayId, false); // IdictionaryGenericRegionArrayOperations<int, sbyte[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.SbyteArrayId, false); //IdictionaryGenericRegionArrayOperations<int, uint[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UintArrayId, false); //IdictionaryGenericRegionArrayOperations<int, ulong[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UlongArrayId, false); //IdictionaryGenericRegionArrayOperations<int, ushort[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UshortArrayId, false); IdictionaryGenericRegionArrayOperations<int, string[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.StringArrayId, false); IdictionaryGenericRegionArrayOperations<int, byte[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.ByteArrayId, false); IdictionaryGenericRegionArrayOperations<int, double[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.DoubleArrayId, false); IdictionaryGenericRegionArrayOperations<int, float[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.FloatArrayId, false); IdictionaryGenericRegionArrayOperations<int, int[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.IntArrayId, false); IdictionaryGenericRegionArrayOperations<int, long[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.LongArrayId, false); IdictionaryGenericRegionArrayOperations<int, short[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.ShortArrayId, false); //IdictionaryGenericRegionArrayOperations<int, object[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.ObjectArrayId, false); //IdictionaryGenericRegionArrayOperations<int, decimal[]>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.DecimalArrayId, false); IdictionaryGenericRegionArrayOperations<string, bool[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.BoolArrayId, false); IdictionaryGenericRegionArrayOperations<string, char[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.CharArrayId, false); //IdictionaryGenericRegionArrayOperations<string, sbyte[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.SbyteArrayId, false); //IdictionaryGenericRegionArrayOperations<string, uint[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UintArrayId, false); //IdictionaryGenericRegionArrayOperations<string, ulong[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UlongArrayId, false); //IdictionaryGenericRegionArrayOperations<string, ushort[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UshortArrayId, false); IdictionaryGenericRegionArrayOperations<string, string[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.StringArrayId, false); IdictionaryGenericRegionArrayOperations<string, byte[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.ByteArrayId, false); IdictionaryGenericRegionArrayOperations<string, double[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.DoubleArrayId, false); IdictionaryGenericRegionArrayOperations<string, float[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.FloatArrayId, false); IdictionaryGenericRegionArrayOperations<string, int[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.IntArrayId, false); IdictionaryGenericRegionArrayOperations<string, long[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.LongArrayId, false); IdictionaryGenericRegionArrayOperations<string, short[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.ShortArrayId, false); //IdictionaryGenericRegionArrayOperations<string, object[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.ObjectArrayId, false); //IdictionaryGenericRegionArrayOperations<string, decimal[]>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.DecimalArrayId, false); } public virtual void IdictionaryGenericRegionArrayOperations<TKey, TValue>(String RegionName, TypesClass type, int KeyId, int ValueId, bool IsValByRef) { //Create region and local Region instances. IRegion<TKey, TValue> region = CacheHelper.GetVerifyRegion<TKey, TValue>(RegionName); IRegion<TKey, TValue> localRegion = region.GetLocalView(); // Test CopyTo with remote region & local region instances. Idictionary_Array_CopyTo_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_Array_CopyTo_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations array CopyTo complete."); // Test TryGetValue with remote region & local region instances. Idictionary_Array_TryGetValue_Step<TKey, TValue>(region, type, KeyId, ValueId, IsValByRef); Idictionary_Array_TryGetValue_Step<TKey, TValue>(localRegion, type, KeyId, ValueId, IsValByRef); Util.Log("IdictionaryRegionOperations array TryGetValue complete."); // Test generic & non-generic GetEnumerator with remote region & local region instances. Idictionary_Array_GetEnumerator_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_Array_GetEnumerator_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations array GetEnumerator complete."); // Test generic Add/Put/Get/Remove/Contains with remote region & local region instances. Idictionary_Array_Item_Add_Get_Set_Remove_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_Array_Item_Add_Get_Set_Remove_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations array Add/Put/Get/Remove/Contains complete."); region.Clear(); localRegion.Clear(); } public virtual void IdictionaryRegionOperations(String RegionName) { TypesClass type = new TypesClass(); //IdictionaryGenericRegionOperations<byte, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.ByteId, false); ////IdictionaryGenericRegionOperations<byte, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<byte, bool>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.BoolId, false); //IdictionaryGenericRegionOperations<byte, char>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.CharId, false); //IdictionaryGenericRegionOperations<byte, float>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.FloatId, false); //IdictionaryGenericRegionOperations<byte, double>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.DoubleId, false); //IdictionaryGenericRegionOperations<byte, int>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.IntId, false); ////IdictionaryGenericRegionOperations<byte, uint>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.UintId, false); //IdictionaryGenericRegionOperations<byte, long>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.LongId, false); ////IdictionaryGenericRegionOperations<byte, ulong>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.UlongId, false); //IdictionaryGenericRegionOperations<byte, object>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.ObjectId, true); //IdictionaryGenericRegionOperations<byte, string>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.StringId, true); //IdictionaryGenericRegionOperations<byte, short>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.ShortId, false); ////IdictionaryGenericRegionOperations<byte, ushort>(RegionName, type, (int)TypesClass.TypeIds.ByteId, (int)TypesClass.TypeIds.UshortId, false); //IdictionaryGenericRegionOperations<sbyte, byte>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.ByteId, false); IdictionaryGenericRegionOperations<sbyte, sbyte>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<sbyte, bool>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<sbyte, char>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<sbyte, float>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<sbyte, double>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<sbyte, int>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<sbyte, uint>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<sbyte, long>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<sbyte, ulong>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<sbyte, object>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<sbyte, string>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<sbyte, short>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<sbyte, ushort>(RegionName, type, (int)TypesClass.TypeIds.SbyteId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<short, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<short, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<short, bool>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<short, char>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<short, float>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<short, double>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<short, int>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<short, uint>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<short, long>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<short, ulong>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<short, object>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<short, string>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<short, short>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.ShortId, false); // IdictionaryGenericRegionOperations<short, ushort>(RegionName, type, (int)TypesClass.TypeIds.ShortId, (int)TypesClass.TypeIds.UshortId, false); //IdictionaryGenericRegionOperations<ushort, byte>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.ByteId, false); //IdictionaryGenericRegionOperations<ushort, sbyte>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<ushort, bool>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.BoolId, false); //IdictionaryGenericRegionOperations<ushort, char>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.CharId, false); //IdictionaryGenericRegionOperations<ushort, float>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.FloatId, false); //IdictionaryGenericRegionOperations<ushort, double>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.DoubleId, false); //IdictionaryGenericRegionOperations<ushort, int>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<ushort, uint>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.UintId, false); //IdictionaryGenericRegionOperations<ushort, long>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<ushort, ulong>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.UlongId, false); //IdictionaryGenericRegionOperations<ushort, object>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.ObjectId, true); //IdictionaryGenericRegionOperations<ushort, string>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.StringId, true); //IdictionaryGenericRegionOperations<ushort, short>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<ushort, ushort>(RegionName, type, (int)TypesClass.TypeIds.UshortId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<int, sbyte>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.SbyteId, false); // IdictionaryGenericRegionOperations<int, sbyte>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<int, sbyte>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<int, bool>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<int, char>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<int, float>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<int, double>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<int, int>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<int, uint>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<int, long>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<int, ulong>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<int, object>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<int, string>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<int, short>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<int, ushort>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.UshortId, false); //IdictionaryGenericRegionOperations<uint, byte>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.ByteId, false); ////IdictionaryGenericRegionOperations<uint, sbyte>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<uint, bool>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.BoolId, false); //IdictionaryGenericRegionOperations<uint, char>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.CharId, false); //IdictionaryGenericRegionOperations<uint, float>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.FloatId, false); //IdictionaryGenericRegionOperations<uint, double>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.DoubleId, false); //IdictionaryGenericRegionOperations<uint, int>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.IntId, false); ////IdictionaryGenericRegionOperations<uint, uint>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.UintId, false); //IdictionaryGenericRegionOperations<uint, long>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.LongId, false); ////IdictionaryGenericRegionOperations<uint, ulong>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.UlongId, false); //IdictionaryGenericRegionOperations<uint, object>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.ObjectId, true); //IdictionaryGenericRegionOperations<uint, string>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.StringId, true); //IdictionaryGenericRegionOperations<uint, short>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.ShortId, false); ////IdictionaryGenericRegionOperations<uint, ushort>(RegionName, type, (int)TypesClass.TypeIds.UintId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<long, sbyte>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<long, sbyte>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<long, int>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<long, uint>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<long, char>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<long, bool>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<long, float>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<long, double>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<long, long>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<long, ulong>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<long, object>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<long, string>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<long, short>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<long, ushort>(RegionName, type, (int)TypesClass.TypeIds.LongId, (int)TypesClass.TypeIds.UshortId, false); //IdictionaryGenericRegionOperations<ulong, byte>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.ByteId, false); //IdictionaryGenericRegionOperations<ulong, sbyte>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<ulong, bool>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.BoolId, false); //IdictionaryGenericRegionOperations<ulong, char>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.CharId, false); //IdictionaryGenericRegionOperations<ulong, float>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.FloatId, false); //IdictionaryGenericRegionOperations<ulong, double>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.DoubleId, false); //IdictionaryGenericRegionOperations<ulong, int>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<ulong, uint>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.UintId, false); //IdictionaryGenericRegionOperations<ulong, long>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<ulong, ulong>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.UlongId, false); //IdictionaryGenericRegionOperations<ulong, object>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.ObjectId, true); //IdictionaryGenericRegionOperations<ulong, string>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.StringId, true); //IdictionaryGenericRegionOperations<ulong, short>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<ulong, ushort>(RegionName, type, (int)TypesClass.TypeIds.UlongId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<char, sbyte>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<char, sbyte>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<char, int>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<char, uint>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<char, bool>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<char, char>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<char, float>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<char, double>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<char, long>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<char, ulong>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<char, object>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<char, string>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<char, short>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<char, ushort>(RegionName, type, (int)TypesClass.TypeIds.CharId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<float, sbyte>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<float, sbyte>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<float, int>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<float, uint>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<float, char>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<float, bool>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<float, float>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<float, double>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<float, long>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<float, ulong>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<float, object>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<float, string>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<float, short>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<float, ushort>(RegionName, type, (int)TypesClass.TypeIds.FloatId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<double, sbyte>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<double, sbyte>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<double, int>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<double, uint>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<double, char>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<double, bool>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<double, float>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<double, double>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<double, long>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<double, ulong>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<double, object>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<double, string>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<double, short>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<double, ushort>(RegionName, type, (int)TypesClass.TypeIds.DoubleId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<object, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<object, sbyte>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<object, int>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<object, uint>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<object, char>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<object, bool>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<object, float>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<object, double>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<object, long>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<object, ulong>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<object, object>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<object, string>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<object, short>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<object, ushort>(RegionName, type, (int)TypesClass.TypeIds.ObjectId, (int)TypesClass.TypeIds.UshortId, false); IdictionaryGenericRegionOperations<String, sbyte>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.SbyteId, false); //IdictionaryGenericRegionOperations<String, sbyte>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.SbyteId, false); IdictionaryGenericRegionOperations<String, int>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.IntId, false); //IdictionaryGenericRegionOperations<String, uint>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UintId, false); IdictionaryGenericRegionOperations<String, char>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.CharId, false); IdictionaryGenericRegionOperations<String, bool>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.BoolId, false); IdictionaryGenericRegionOperations<String, float>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.FloatId, false); IdictionaryGenericRegionOperations<String, double>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.DoubleId, false); IdictionaryGenericRegionOperations<String, long>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.LongId, false); //IdictionaryGenericRegionOperations<String, ulong>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UlongId, false); IdictionaryGenericRegionOperations<String, object>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.ObjectId, true); IdictionaryGenericRegionOperations<String, string>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.StringId, true); IdictionaryGenericRegionOperations<String, short>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.ShortId, false); //IdictionaryGenericRegionOperations<String, ushort>(RegionName, type, (int)TypesClass.TypeIds.StringId, (int)TypesClass.TypeIds.UshortId, false); // decimal is not supported. //IdictionaryGenericRegionOperations<int, decimal>(RegionName, type, (int)TypesClass.TypeIds.IntId, (int)TypesClass.TypeIds.DecimalId, false); } public virtual void IdictionaryGenericRegionOperations<TKey, TValue>(String RegionName, TypesClass type, int KeyId, int ValueId, bool IsValByRef) { //Create region and local Region instances. IRegion<TKey, TValue> region = CacheHelper.GetVerifyRegion<TKey, TValue>(RegionName); IRegion<TKey, TValue> localRegion = region.GetLocalView(); // Test CopyTo with remote region & local region instances. Idictionary_CopyTo_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_CopyTo_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations CopyTo complete."); // Test TryGetValue with remote region & local region instances. Idictionary_TryGetValue_Step<TKey, TValue>(region, type, KeyId, ValueId, IsValByRef); Idictionary_TryGetValue_Step<TKey, TValue>(localRegion, type, KeyId, ValueId, IsValByRef); Util.Log("IdictionaryRegionOperations TryGetValue complete."); // Test generic & non-generic GetEnumerator with remote region & local region instances. Idictionary_GetEnumerator_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_GetEnumerator_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations GetEnumerator complete."); // Test generic Add/Put/Get/Remove/Contains with remote region & local region instances. Idictionary_Item_Add_Get_Set_Remove_Step<TKey, TValue>(region, type, KeyId, ValueId); Idictionary_Item_Add_Get_Set_Remove_Step<TKey, TValue>(localRegion, type, KeyId, ValueId); Util.Log("IdictionaryRegionOperations Add/Put/Get/Remove/Contains complete."); region.Clear(); localRegion.Clear(); } public virtual void Idictionary_CopyTo_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { Util.Log("Idictionary_CopyTo_Step KeyId = {0} , valueId = {1} ", KeyId, ValueId); ICollection<KeyValuePair<TKey, TValue>> IcollectionRegion = region; // Create an destination array of size 5 KeyValuePair<TKey, TValue>[] DestinationArray = new KeyValuePair<TKey, TValue>[5]; List<KeyValuePair<TKey, TValue>> DestinationArray1 = new List<KeyValuePair<TKey, TValue>>(5); KeyValuePair<TKey, TValue>[] DestinationArray2 = null; // Try copying into DestinationArray when no entry is present in the client region, check nothing is crashing. region.CopyTo(DestinationArray, 0); Assert.AreEqual(false, DestinationArray[0].Equals(null)); Util.Log("Idictionary_CopyTo_Step 1 complete."); // Put 5 items in the region now and test again with above case. region[type.GetTypeItem<TKey>(KeyId, 0)] = type.GetTypeItem<TValue>(ValueId, 0); Util.Log("Idictionary_CopyTo_Step put1 complete."); region[type.GetTypeItem<TKey>(KeyId, 1)] = type.GetTypeItem<TValue>(ValueId, 1); region[type.GetTypeItem<TKey>(KeyId, 2)] = type.GetTypeItem<TValue>(ValueId, 2); region[type.GetTypeItem<TKey>(KeyId, 3)] = type.GetTypeItem<TValue>(ValueId, 3); region[type.GetTypeItem<TKey>(KeyId, 4)] = type.GetTypeItem<TValue>(ValueId, 4); region.CopyTo(DestinationArray, 0); // chk for ArgumentNullException by passing null array try { region.CopyTo(DestinationArray2, 0); Assert.Fail("Should have got ArgumentNullException for null destination array."); } catch (ArgumentNullException ex) { Util.Log("Got expected ArgumentNullException for null destination array {0} ", ex); } Util.Log("Idictionary_CopyTo_Step 2 complete."); // chk for ArgumentOutOfRangeException by passing -ve index/huge +ve index. try { region.CopyTo(DestinationArray, -5); Assert.Fail("Should have got ArgumentOutOfRangeException for -ve index."); } catch (ArgumentOutOfRangeException ex) { Util.Log("Got expected ArgumentOutOfRangeException for -ve index {0} ", ex); } Util.Log("Idictionary_CopyTo_Step 3 complete. count = {0} array length = {1} ", region.Count, DestinationArray.Length); // chk for ArgumentException by passing inappropriate index than length of the array. try { region.CopyTo(DestinationArray, 5); Assert.Fail("Should have got ArgumentException for inappropriate index."); } catch (ArgumentException ex) { Util.Log("Got expected ArgumentException for inappropriate index {0} ", ex); } Util.Log("Idictionary_CopyTo_Step 4 complete."); // chk for ArgumentException by passing inappropriate arguement as array. try { region.CopyTo(DestinationArray1.ToArray(), 0); Assert.Fail("Should have got ArgumentException for inappropriate arguement."); } catch (ArgumentException ex) { Util.Log("Got expected ArgumentException for inappropriate arguement {0} ", ex); } Util.Log("Idictionary_CopyTo_Step 5 complete."); } public virtual void Idictionary_Array_CopyTo_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { Util.Log("Idictionary_Array_CopyTo_Step KeyId = {0} , valueId = {1} ", KeyId, ValueId); ICollection<KeyValuePair<TKey, TValue>> IcollectionRegion = region; // Create an destination array of size 5 KeyValuePair<TKey, TValue>[] DestinationArray = new KeyValuePair<TKey, TValue>[5]; List<KeyValuePair<TKey, TValue>> DestinationArray1 = new List<KeyValuePair<TKey, TValue>>(5); KeyValuePair<TKey, TValue>[] DestinationArray2 = null; // Try copying into DestinationArray when no entry is present in the client region, check nothing is crashing. region.CopyTo(DestinationArray, 0); Assert.AreEqual(false, DestinationArray[0].Equals(null)); Util.Log("Idictionary_Array_CopyTo_Step 1 complete."); // Put 5 items in the region now and test again with above case. region[type.GetTypeItem<TKey>(KeyId, 0)] = type.GetArrayTypeItem<TValue>(ValueId, 0); region[type.GetTypeItem<TKey>(KeyId, 1)] = type.GetArrayTypeItem<TValue>(ValueId, 1); region[type.GetTypeItem<TKey>(KeyId, 2)] = type.GetArrayTypeItem<TValue>(ValueId, 2); region[type.GetTypeItem<TKey>(KeyId, 3)] = type.GetArrayTypeItem<TValue>(ValueId, 3); region[type.GetTypeItem<TKey>(KeyId, 4)] = type.GetArrayTypeItem<TValue>(ValueId, 4); region.CopyTo(DestinationArray, 0); // chk for ArgumentNullException by passing null array try { region.CopyTo(DestinationArray2, 0); Assert.Fail("Should have got ArgumentNullException for null destination array."); } catch (ArgumentNullException ex) { Util.Log("Got expected ArgumentNullException for null destination array {0} ", ex); } Util.Log("Idictionary_Array_CopyTo_Step 2 complete."); // chk for ArgumentOutOfRangeException by passing -ve index/huge +ve index. try { region.CopyTo(DestinationArray, -5); Assert.Fail("Should have got ArgumentOutOfRangeException for -ve index."); } catch (ArgumentOutOfRangeException ex) { Util.Log("Got expected ArgumentOutOfRangeException for -ve index {0} ", ex); } Util.Log("Idictionary_Array_CopyTo_Step 3 complete. count = {0} array length = {1} ", region.Count, DestinationArray.Length); // chk for ArgumentException by passing inappropriate index than length of the array. try { region.CopyTo(DestinationArray, 5); Assert.Fail("Should have got ArgumentException for inappropriate index."); } catch (ArgumentException ex) { Util.Log("Got expected ArgumentException for inappropriate index {0} ", ex); } Util.Log("Idictionary_Array_CopyTo_Step 4 complete."); // chk for ArgumentException by passing inappropriate arguement as array. try { region.CopyTo(DestinationArray1.ToArray(), 0); Assert.Fail("Should have got ArgumentException for inappropriate arguement."); } catch (ArgumentException ex) { Util.Log("Got expected ArgumentException for inappropriate arguement {0} ", ex); } Util.Log("Idictionary_Array_CopyTo_Step 5 complete."); } public virtual void Idictionary_TryGetValue_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId, bool IsValByRef) { TValue value = default(TValue); // chk for entry that is present. Assert.IsTrue(region.TryGetValue(type.GetTypeItem<TKey>(KeyId, 0), out value)); Assert.AreEqual(value, type.GetArrayTypeItem<TValue>(ValueId, 0)); Util.Log("Idictionary_TryGetValue_Step 1 complete."); // chk for entry that is not present. Assert.IsFalse(region.TryGetValue(type.GetTypeItem<TKey>(KeyId, 5), out value)); if (IsValByRef) { Assert.AreEqual(value, null); } else { Assert.AreEqual(value, default(TValue)); } Util.Log("Idictionary_TryGetValue_Step 2 complete."); } public virtual void Idictionary_Array_TryGetValue_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId, bool IsValByRef) { TValue value = default(TValue); // chk for entry that is present. Assert.IsTrue(region.TryGetValue(type.GetTypeItem<TKey>(KeyId, 0), out value)); Assert.AreEqual(value, type.GetArrayTypeItem<TValue>(ValueId, 0)); Util.Log("Idictionary_Array_TryGetValue_Step 1 complete."); // chk for entry that is not present. Assert.IsFalse(region.TryGetValue(type.GetTypeItem<TKey>(KeyId, 5), out value)); if (IsValByRef) { Util.Log("Idictionary_Array_TryGetValue_Step ref value is {0} ", value); Assert.AreEqual(value, null); } else { Util.Log("Idictionary_Array_TryGetValue_Step value is {0} ", value); Assert.AreEqual(value, default(TValue)); } Util.Log("Idictionary_Array_TryGetValue_Step 2 complete."); } public virtual void Idictionary_GetEnumerator_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { // Generic enumerator IEnumerator RegionGenericEnumerator = region.GetEnumerator(); // Non-Generic enumerator IEnumerator<KeyValuePair<TKey, TValue>> RegionEnumerator = region.GetEnumerator(); // Chk before doing generic Enumerator's MoveNext what is the value at Current and that exception is thrown. try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk before doing non-generic Enumerator's MoveNext what is the value at Current and that exception is thrown. try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_GetEnumerator_Step 1 complete."); // Chk after doing Generic Enumerator's Reset, what is the value at Current and that exception is thrown. RegionGenericEnumerator.Reset(); try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk after doing non-Generic Enumerator's Reset, what is the value at Current and that exception is thrown. RegionEnumerator.Reset(); try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_GetEnumerator_Step 2 complete."); //Chk for equality of individual elements from within the dictionary with those with Generic enumerator's current. RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); //Chk for equality of individual elements from within the dictionary with those with non Generic enumerator's current. RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); Util.Log("Idictionary_GetEnumerator_Step 3 complete."); //Modify region by adding 1 more element and see that accessing Generic enumerator does not throw exception. region.Add(type.GetTypeItem<TKey>(KeyId, 5), type.GetTypeItem<TValue>(ValueId, 5)); try { RegionGenericEnumerator.MoveNext(); Util.Log("No exception expected."); } catch (InvalidOperationException ex) { Assert.Fail("Got unexpected InvalidOperationException. {0} ", ex); } //Modify region by adding 1 more element and see that accessing non Generic enumerator does not throw exception. region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetTypeItem<TValue>(ValueId, 6)); try { RegionEnumerator.MoveNext(); Util.Log("No exception expected."); } catch (InvalidOperationException ex) { Assert.Fail("Got unexpected InvalidOperationException. {0} ", ex); } Util.Log("Idictionary_GetEnumerator_Step 4 complete."); // Since region has 5 entries chk while enumerating, count of generic enumerator's iterator. RegionGenericEnumerator.Reset(); int RegionEntryCount = 0; while (RegionGenericEnumerator.MoveNext()) { RegionEntryCount++; } Assert.IsTrue(5 == RegionEntryCount, "Region entry count does not match."); RegionEntryCount = 0; //This is done for iteration where localRegionInstance calls this method. // Since region has 5 entries chk while enumerating, count of non-generic enumerator's iterator. RegionEnumerator.Reset(); while (RegionEnumerator.MoveNext()) { RegionEntryCount++; } Assert.IsTrue(5 == RegionEntryCount, "Region entry count does not match."); RegionEntryCount = 0; Util.Log("Idictionary_GetEnumerator_Step 5 complete."); // Chk after doing Generic Enumerator's MoveNext to end what is the value at Current and that exception is thrown. RegionGenericEnumerator.MoveNext(); try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk after doing non-Generic Enumerator's MoveNext to end what is the value at Current and that exception is thrown RegionEnumerator.MoveNext(); try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_GetEnumerator_Step 6 complete."); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 5)), "Remove should be successfull as entry is present in the region."); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 6)), "Remove should be successfull as entry is present in the region."); } public virtual void Idictionary_Array_GetEnumerator_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { // Generic enumerator IEnumerator RegionGenericEnumerator = region.GetEnumerator(); // Non-Generic enumerator IEnumerator<KeyValuePair<TKey, TValue>> RegionEnumerator = region.GetEnumerator(); // Chk before doing generic Enumerator's MoveNext what is the value at Current and that exception is thrown. try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk before doing non-generic Enumerator's MoveNext what is the value at Current and that exception is thrown. try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_Array_GetEnumerator_Step 1 complete."); // Chk after doing Generic Enumerator's Reset, what is the value at Current and that exception is thrown. RegionGenericEnumerator.Reset(); try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk after doing non-Generic Enumerator's Reset, what is the value at Current and that exception is thrown. RegionEnumerator.Reset(); try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_Array_GetEnumerator_Step 2 complete."); //Chk for equality of individual elements from within the dictionary with those with Generic enumerator's current. RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); RegionGenericEnumerator.MoveNext(); //Chk for equality of individual elements from within the dictionary with those with non Generic enumerator's current. RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); RegionEnumerator.MoveNext(); Util.Log("Idictionary_Array_GetEnumerator_Step 3 complete."); //Modify region by adding 1 more element and see that accessing Generic enumerator does not throw exception. region.Add(type.GetTypeItem<TKey>(KeyId, 5), type.GetArrayTypeItem<TValue>(ValueId, 5)); try { RegionGenericEnumerator.MoveNext(); Util.Log("No exception expected."); } catch (InvalidOperationException ex) { Assert.Fail("Got unexpected InvalidOperationException. {0} ", ex); } //Modify region by adding 1 more element and see that accessing non Generic enumerator does not throw exception. region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetArrayTypeItem<TValue>(ValueId, 6)); try { RegionEnumerator.MoveNext(); Util.Log("No exception expected."); } catch (InvalidOperationException ex) { Assert.Fail("Got unexpected InvalidOperationException. {0} ", ex); } Util.Log("Idictionary_Array_GetEnumerator_Step 4 complete."); // Since region has 5 entries chk while enumerating, count of generic enumerator's iterator. RegionGenericEnumerator.Reset(); int RegionEntryCount = 0; while (RegionGenericEnumerator.MoveNext()) { RegionEntryCount++; } Assert.IsTrue(5 == RegionEntryCount, "Region entry count does not match."); RegionEntryCount = 0; //This is done for iteration where localRegionInstance calls this method. // Since region has 5 entries chk while enumerating, count of non-generic enumerator's iterator. RegionEnumerator.Reset(); while (RegionEnumerator.MoveNext()) { RegionEntryCount++; } Assert.IsTrue(5 == RegionEntryCount, "Region entry count does not match."); RegionEntryCount = 0; Util.Log("Idictionary_Array_GetEnumerator_Step 5 complete."); // Chk after doing Generic Enumerator's MoveNext to end what is the value at Current and that exception is thrown. RegionGenericEnumerator.MoveNext(); try { Object r = RegionGenericEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } // Chk after doing non-Generic Enumerator's MoveNext to end what is the value at Current and that exception is thrown RegionEnumerator.MoveNext(); try { Object r = RegionEnumerator.Current; Assert.Fail("Should have got InvalidOperationException"); } catch (InvalidOperationException ex) { Util.Log("Got expected InvalidOperationException {0} ", ex); } Util.Log("Idictionary_Array_GetEnumerator_Step 6 complete."); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 5)), "Remove should be successfull as entry is present in the region."); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 6)), "Remove should be successfull as entry is present in the region."); } public virtual void Idictionary_Array_Item_Add_Get_Set_Remove_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { // Try adding an element that is already existing, should throw EntryExistsException. try { region.Add(type.GetTypeItem<TKey>(KeyId, 0), type.GetArrayTypeItem<TValue>(ValueId, 0)); Assert.Fail("Should have got EntryExistsException."); } catch (EntryExistsException ex) { Util.Log("Got expected EntryExistsException {0}", ex); } try { region.Add(new KeyValuePair<TKey, TValue>(type.GetTypeItem<TKey>(KeyId, 0), type.GetArrayTypeItem<TValue>(ValueId, 0))); Assert.Fail("Should have got EntryExistsException."); } catch (EntryExistsException ex) { Util.Log("Got expected EntryExistsException {0}", ex); } Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 1 complete."); // Try putting using Item_Set, an entry in region that was already added by Add method, no exception expected. try { region[type.GetTypeItem<TKey>(KeyId, 0)] = type.GetArrayTypeItem<TValue>(ValueId, 0); Util.Log("No exception should come."); } catch (EntryExistsException ex) { Assert.Fail("EntryExistsException should not have come {0} ", ex); } Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 2 complete."); // Try getting using Item_Get, an entry in region that was already added by Add method, no exception expected. Assert.AreEqual(type.GetArrayTypeItem<TValue>(ValueId, 0), region[type.GetTypeItem<TKey>(KeyId, 0)]); // Chk with old api that it still gets EntryExistsException when an element has been added by new Add method. try { region.Add(type.GetTypeItem<TKey>(KeyId, 2), type.GetArrayTypeItem<TValue>(ValueId, 2), null); Assert.Fail("Should have got EntryExistsException"); } catch (EntryExistsException ex) { Util.Log("Got Expected EntryExistsException {0} ", ex); } Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 3 complete."); // Actually add new element using old Create api. region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetArrayTypeItem<TValue>(ValueId, 6), null); //8 key // Chk now with new api that it still gets EntryExistsException when an element has been added by old Create method. try { region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetArrayTypeItem<TValue>(ValueId, 6)); //8 key Assert.Fail("Should have got EntryExistsException"); } catch (EntryExistsException ex) { Util.Log("Got Expected EntryExistsException {0} ", ex); } Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 4 complete."); // Chk with old api that element that is added by new api exists. Assert.AreEqual(type.GetArrayTypeItem<TValue>(ValueId, 0), region.Get(type.GetTypeItem<TKey>(KeyId, 0))); Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 5 complete."); // Try removing entry that does not exist in the region, no exception, but returns false. Assert.IsFalse(region.Remove(type.GetTypeItem<TKey>(KeyId, 5)), "Remove should be unsuccessfull as no entry present.");//100 Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 6 complete."); // Try contains with key & value that are present. Result should be true. Assert.IsTrue(region.Contains(new KeyValuePair<TKey, TValue>(type.GetTypeItem<TKey>(KeyId, 0), type.GetArrayTypeItem<TValue>(ValueId, 0))), "Result should be true as key & value are present"); Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 7 complete."); // Try removing an entry which is actually present in the region. region[type.GetTypeItem<TKey>(KeyId, 7)] = type.GetArrayTypeItem<TValue>(ValueId, 7); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 7)), "Remove should be successfull as entry is present in the region."); //8 Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 8 complete."); Assert.IsTrue(region.Keys.Count == region.Values.Count, "Keys and Values Count should equal."); //[ToDo] : Open this once when Ticket #639 is fixed and write test for old region as well. /*Assert.IsTrue(region.Keys.Count == region.Count, "Keys and Region Entry Count should equal."); Assert.IsTrue(region.Values.Count == region.Count, "Values and Region Entry Count should equal.");*/ Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 9 complete."); try { bool r = region.IsReadOnly; } catch (NotImplementedException ex) { Util.Log("Got expected NotImplementedException {0} ", ex); } Util.Log("Idictionary_Array_Item_Add_Get_Set_Remove_Step 10 complete."); region.Remove(type.GetTypeItem<TKey>(KeyId, 6)); region.Remove(type.GetTypeItem<TKey>(KeyId, 7)); } public virtual void Idictionary_Item_Add_Get_Set_Remove_Step<TKey, TValue>(IRegion<TKey, TValue> region, TypesClass type, int KeyId, int ValueId) { // Try adding an element that is already existing, should throw EntryExistsException. try { region.Add(type.GetTypeItem<TKey>(KeyId, 0), type.GetTypeItem<TValue>(ValueId, 0)); Assert.Fail("Should have got EntryExistsException."); } catch (EntryExistsException ex) { Util.Log("Got expected EntryExistsException {0}", ex); } try { region.Add(new KeyValuePair<TKey, TValue>(type.GetTypeItem<TKey>(KeyId, 0), type.GetTypeItem<TValue>(ValueId, 0))); Assert.Fail("Should have got EntryExistsException."); } catch (EntryExistsException ex) { Util.Log("Got expected EntryExistsException {0}", ex); } Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 1 complete."); // Try putting using Item_Set, an entry in region that was already added by Add method, no exception expected. try { region[type.GetTypeItem<TKey>(KeyId, 0)] = type.GetTypeItem<TValue>(ValueId, 0); Util.Log("No exception should come."); } catch (EntryExistsException ex) { Assert.Fail("EntryExistsException should not have come {0} ", ex); } Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 2 complete."); // Try getting using Item_Get, an entry in region that was already added by Add method, no exception expected. Assert.AreEqual(type.GetTypeItem<TValue>(ValueId, 0), region[type.GetTypeItem<TKey>(KeyId, 0)]); // Chk with old api that it still gets EntryExistsException when an element has been added by new Add method. try { region.Add(type.GetTypeItem<TKey>(KeyId, 2), type.GetTypeItem<TValue>(ValueId, 2), null); Assert.Fail("Should have got EntryExistsException"); } catch (EntryExistsException ex) { Util.Log("Got Expected EntryExistsException {0} ", ex); } Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 3 complete."); // Actually add new element using old Create api. region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetTypeItem<TValue>(ValueId, 6), null); //8 key // Chk now with new api that it still gets EntryExistsException when an element has been added by old Create method. try { region.Add(type.GetTypeItem<TKey>(KeyId, 6), type.GetTypeItem<TValue>(ValueId, 6)); //8 key Assert.Fail("Should have got EntryExistsException"); } catch (EntryExistsException ex) { Util.Log("Got Expected EntryExistsException {0} ", ex); } Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 4 complete."); // Chk with old api that element that is added by new api exists. Assert.AreEqual(type.GetTypeItem<TValue>(ValueId, 0), region.Get(type.GetTypeItem<TKey>(KeyId, 0))); Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 5 complete."); // Try removing entry that does not exist in the region, no exception, but returns false. Assert.IsFalse(region.Remove(type.GetTypeItem<TKey>(KeyId, 5)), "Remove should be unsuccessfull as no entry present.");//100 Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 6 complete."); // Try contains with key & value that are present. Result should be true. Assert.IsTrue(region.Contains(new KeyValuePair<TKey, TValue>(type.GetTypeItem<TKey>(KeyId, 0), type.GetTypeItem<TValue>(ValueId, 0))), "Result should be true as key & value are present"); Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 7 complete."); // Try removing an entry which is actually present in the region. region[type.GetTypeItem<TKey>(KeyId, 7)] = type.GetTypeItem<TValue>(ValueId, 7); Assert.IsTrue(region.Remove(type.GetTypeItem<TKey>(KeyId, 7)), "Remove should be successfull as entry is present in the region."); //8 Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 8 complete."); Assert.IsTrue(region.Keys.Count == region.Values.Count, "Keys and Values Count should equal."); //[ToDo] : Open this once when Ticket #639 is fixed and write test for old region as well. /*Assert.IsTrue(region.Keys.Count == region.Count, "Keys and Region Entry Count should equal."); Assert.IsTrue(region.Values.Count == region.Count, "Values and Region Entry Count should equal.");*/ Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 9 complete."); try { bool r = region.IsReadOnly; } catch (NotImplementedException ex) { Util.Log("Got expected NotImplementedException {0} ", ex); } Util.Log("Idictionary_Item_Add_Get_Set_Remove_Step 10 complete."); region.Remove(type.GetTypeItem<TKey>(KeyId, 6)); region.Remove(type.GetTypeItem<TKey>(KeyId, 7)); } #endregion } }