http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAbstractTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAbstractTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAbstractTest.cs deleted file mode 100644 index e0dcdaa..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAbstractTest.cs +++ /dev/null @@ -1,1181 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - using System; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.Diagnostics.CodeAnalysis; - using System.Linq; - using System.Runtime.Serialization; - using System.Threading; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Cache.Event; - using Apache.Ignite.Core.Cache.Query; - using Apache.Ignite.Core.Cache.Query.Continuous; - using Apache.Ignite.Core.Cluster; - using Apache.Ignite.Core.Common; - using Apache.Ignite.Core.Impl; - using Apache.Ignite.Core.Portable; - using Apache.Ignite.Core.Resource; - using NUnit.Framework; - using CQU = Apache.Ignite.Core.Impl.Cache.Query.Continuous.ContinuousQueryUtils; - - /// <summary> - /// Tests for continuous query. - /// </summary> - [SuppressMessage("ReSharper", "InconsistentNaming")] - [SuppressMessage("ReSharper", "PossibleNullReferenceException")] - [SuppressMessage("ReSharper", "StaticMemberInGenericType")] - public abstract class ContinuousQueryAbstractTest - { - /** Cache name: ATOMIC, backup. */ - protected const string CACHE_ATOMIC_BACKUP = "atomic_backup"; - - /** Cache name: ATOMIC, no backup. */ - protected const string CACHE_ATOMIC_NO_BACKUP = "atomic_no_backup"; - - /** Cache name: TRANSACTIONAL, backup. */ - protected const string CACHE_TX_BACKUP = "transactional_backup"; - - /** Cache name: TRANSACTIONAL, no backup. */ - protected const string CACHE_TX_NO_BACKUP = "transactional_no_backup"; - - /** Listener events. */ - public static BlockingCollection<CallbackEvent> CB_EVTS = new BlockingCollection<CallbackEvent>(); - - /** Listener events. */ - public static BlockingCollection<FilterEvent> FILTER_EVTS = new BlockingCollection<FilterEvent>(); - - /** First node. */ - private IIgnite grid1; - - /** Second node. */ - private IIgnite grid2; - - /** Cache on the first node. */ - private ICache<int, PortableEntry> cache1; - - /** Cache on the second node. */ - private ICache<int, PortableEntry> cache2; - - /** Cache name. */ - private readonly string cacheName; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="cacheName">Cache name.</param> - protected ContinuousQueryAbstractTest(string cacheName) - { - this.cacheName = cacheName; - } - - /// <summary> - /// Set-up routine. - /// </summary> - [TestFixtureSetUp] - public void SetUp() - { - GC.Collect(); - TestUtils.JvmDebug = true; - - IgniteConfigurationEx cfg = new IgniteConfigurationEx(); - - PortableConfiguration portCfg = new PortableConfiguration(); - - ICollection<PortableTypeConfiguration> portTypeCfgs = new List<PortableTypeConfiguration>(); - - portTypeCfgs.Add(new PortableTypeConfiguration(typeof(PortableEntry))); - portTypeCfgs.Add(new PortableTypeConfiguration(typeof(PortableFilter))); - portTypeCfgs.Add(new PortableTypeConfiguration(typeof(KeepPortableFilter))); - - portCfg.TypeConfigurations = portTypeCfgs; - - cfg.PortableConfiguration = portCfg; - cfg.JvmClasspath = TestUtils.CreateTestClasspath(); - cfg.JvmOptions = TestUtils.TestJavaOptions(); - cfg.SpringConfigUrl = "config\\cache-query-continuous.xml"; - - cfg.GridName = "grid-1"; - grid1 = Ignition.Start(cfg); - cache1 = grid1.GetCache<int, PortableEntry>(cacheName); - - cfg.GridName = "grid-2"; - grid2 = Ignition.Start(cfg); - cache2 = grid2.GetCache<int, PortableEntry>(cacheName); - } - - /// <summary> - /// Tear-down routine. - /// </summary> - [TestFixtureTearDown] - public void TearDown() - { - Ignition.StopAll(true); - } - - /// <summary> - /// Before-test routine. - /// </summary> - [SetUp] - public void BeforeTest() - { - CB_EVTS = new BlockingCollection<CallbackEvent>(); - FILTER_EVTS = new BlockingCollection<FilterEvent>(); - - AbstractFilter<PortableEntry>.res = true; - AbstractFilter<PortableEntry>.err = false; - AbstractFilter<PortableEntry>.marshErr = false; - AbstractFilter<PortableEntry>.unmarshErr = false; - - cache1.Remove(PrimaryKey(cache1)); - cache1.Remove(PrimaryKey(cache2)); - - Assert.AreEqual(0, cache1.GetSize()); - Assert.AreEqual(0, cache2.GetSize()); - - Console.WriteLine("Test started: " + TestContext.CurrentContext.Test.Name); - } - - /// <summary> - /// Test arguments validation. - /// </summary> - [Test] - public void TestValidation() - { - Assert.Throws<ArgumentException>(() => { cache1.QueryContinuous(new ContinuousQuery<int, PortableEntry>(null)); }); - } - - /// <summary> - /// Test multiple closes. - /// </summary> - [Test] - public void TestMultipleClose() - { - int key1 = PrimaryKey(cache1); - int key2 = PrimaryKey(cache2); - - ContinuousQuery<int, PortableEntry> qry = - new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>()); - - IDisposable qryHnd; - - using (qryHnd = cache1.QueryContinuous(qry)) - { - // Put from local node. - cache1.GetAndPut(key1, Entry(key1)); - CheckCallbackSingle(key1, null, Entry(key1)); - - // Put from remote node. - cache2.GetAndPut(key2, Entry(key2)); - CheckCallbackSingle(key2, null, Entry(key2)); - } - - qryHnd.Dispose(); - } - - /// <summary> - /// Test regular callback operations. - /// </summary> - [Test] - public void TestCallback() - { - CheckCallback(false); - } - - /// <summary> - /// Check regular callback execution. - /// </summary> - /// <param name="loc"></param> - protected void CheckCallback(bool loc) - { - int key1 = PrimaryKey(cache1); - int key2 = PrimaryKey(cache2); - - ContinuousQuery<int, PortableEntry> qry = loc ? - new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>(), true) : - new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>()); - - using (cache1.QueryContinuous(qry)) - { - // Put from local node. - cache1.GetAndPut(key1, Entry(key1)); - CheckCallbackSingle(key1, null, Entry(key1)); - - cache1.GetAndPut(key1, Entry(key1 + 1)); - CheckCallbackSingle(key1, Entry(key1), Entry(key1 + 1)); - - cache1.Remove(key1); - CheckCallbackSingle(key1, Entry(key1 + 1), null); - - // Put from remote node. - cache2.GetAndPut(key2, Entry(key2)); - - if (loc) - CheckNoCallback(100); - else - CheckCallbackSingle(key2, null, Entry(key2)); - - cache1.GetAndPut(key2, Entry(key2 + 1)); - - if (loc) - CheckNoCallback(100); - else - CheckCallbackSingle(key2, Entry(key2), Entry(key2 + 1)); - - cache1.Remove(key2); - - if (loc) - CheckNoCallback(100); - else - CheckCallbackSingle(key2, Entry(key2 + 1), null); - } - - cache1.Put(key1, Entry(key1)); - CheckNoCallback(100); - - cache1.Put(key2, Entry(key2)); - CheckNoCallback(100); - } - - /// <summary> - /// Test Ignite injection into callback. - /// </summary> - [Test] - public void TestCallbackInjection() - { - Listener<PortableEntry> cb = new Listener<PortableEntry>(); - - Assert.IsNull(cb.ignite); - - using (cache1.QueryContinuous(new ContinuousQuery<int, PortableEntry>(cb))) - { - Assert.IsNotNull(cb.ignite); - } - } - - /// <summary> - /// Test portable filter logic. - /// </summary> - [Test] - public void TestFilterPortable() - { - CheckFilter(true, false); - } - - /// <summary> - /// Test serializable filter logic. - /// </summary> - [Test] - public void TestFilterSerializable() - { - CheckFilter(false, false); - } - - /// <summary> - /// Check filter. - /// </summary> - /// <param name="portable">Portable.</param> - /// <param name="loc">Local cache flag.</param> - protected void CheckFilter(bool portable, bool loc) - { - ICacheEntryEventListener<int, PortableEntry> lsnr = new Listener<PortableEntry>(); - ICacheEntryEventFilter<int, PortableEntry> filter = - portable ? (AbstractFilter<PortableEntry>)new PortableFilter() : new SerializableFilter(); - - ContinuousQuery<int, PortableEntry> qry = loc ? - new ContinuousQuery<int, PortableEntry>(lsnr, filter, true) : - new ContinuousQuery<int, PortableEntry>(lsnr, filter); - - using (cache1.QueryContinuous(qry)) - { - // Put from local node. - int key1 = PrimaryKey(cache1); - cache1.GetAndPut(key1, Entry(key1)); - CheckFilterSingle(key1, null, Entry(key1)); - CheckCallbackSingle(key1, null, Entry(key1)); - - // Put from remote node. - int key2 = PrimaryKey(cache2); - cache1.GetAndPut(key2, Entry(key2)); - - if (loc) - { - CheckNoFilter(key2); - CheckNoCallback(key2); - } - else - { - CheckFilterSingle(key2, null, Entry(key2)); - CheckCallbackSingle(key2, null, Entry(key2)); - } - - AbstractFilter<PortableEntry>.res = false; - - // Ignored put from local node. - cache1.GetAndPut(key1, Entry(key1 + 1)); - CheckFilterSingle(key1, Entry(key1), Entry(key1 + 1)); - CheckNoCallback(100); - - // Ignored put from remote node. - cache1.GetAndPut(key2, Entry(key2 + 1)); - - if (loc) - CheckNoFilter(100); - else - CheckFilterSingle(key2, Entry(key2), Entry(key2 + 1)); - - CheckNoCallback(100); - } - } - - /// <summary> - /// Test portable filter error during invoke. - /// </summary> - [Ignore("IGNITE-521")] - [Test] - public void TestFilterInvokeErrorPortable() - { - CheckFilterInvokeError(true); - } - - /// <summary> - /// Test serializable filter error during invoke. - /// </summary> - [Ignore("IGNITE-521")] - [Test] - public void TestFilterInvokeErrorSerializable() - { - CheckFilterInvokeError(false); - } - - /// <summary> - /// Check filter error handling logic during invoke. - /// </summary> - private void CheckFilterInvokeError(bool portable) - { - AbstractFilter<PortableEntry>.err = true; - - ICacheEntryEventListener<int, PortableEntry> lsnr = new Listener<PortableEntry>(); - ICacheEntryEventFilter<int, PortableEntry> filter = - portable ? (AbstractFilter<PortableEntry>) new PortableFilter() : new SerializableFilter(); - - ContinuousQuery<int, PortableEntry> qry = new ContinuousQuery<int, PortableEntry>(lsnr, filter); - - using (cache1.QueryContinuous(qry)) - { - // Put from local node. - try - { - cache1.GetAndPut(PrimaryKey(cache1), Entry(1)); - - Assert.Fail("Should not reach this place."); - } - catch (IgniteException) - { - // No-op. - } - catch (Exception) - { - Assert.Fail("Unexpected error."); - } - - // Put from remote node. - try - { - cache1.GetAndPut(PrimaryKey(cache2), Entry(1)); - - Assert.Fail("Should not reach this place."); - } - catch (IgniteException) - { - // No-op. - } - catch (Exception) - { - Assert.Fail("Unexpected error."); - } - } - } - - /// <summary> - /// Test portable filter marshalling error. - /// </summary> - [Test] - public void TestFilterMarshalErrorPortable() - { - CheckFilterMarshalError(true); - } - - /// <summary> - /// Test serializable filter marshalling error. - /// </summary> - [Test] - public void TestFilterMarshalErrorSerializable() - { - CheckFilterMarshalError(false); - } - - /// <summary> - /// Check filter marshal error handling. - /// </summary> - /// <param name="portable">Portable flag.</param> - private void CheckFilterMarshalError(bool portable) - { - AbstractFilter<PortableEntry>.marshErr = true; - - ICacheEntryEventListener<int, PortableEntry> lsnr = new Listener<PortableEntry>(); - ICacheEntryEventFilter<int, PortableEntry> filter = - portable ? (AbstractFilter<PortableEntry>)new PortableFilter() : new SerializableFilter(); - - ContinuousQuery<int, PortableEntry> qry = new ContinuousQuery<int, PortableEntry>(lsnr, filter); - - Assert.Throws<Exception>(() => - { - using (cache1.QueryContinuous(qry)) - { - // No-op. - } - }); - } - - /// <summary> - /// Test non-serializable filter error. - /// </summary> - [Test] - public void TestFilterNonSerializable() - { - CheckFilterNonSerializable(false); - } - - /// <summary> - /// Test non-serializable filter behavior. - /// </summary> - /// <param name="loc"></param> - protected void CheckFilterNonSerializable(bool loc) - { - AbstractFilter<PortableEntry>.unmarshErr = true; - - ICacheEntryEventListener<int, PortableEntry> lsnr = new Listener<PortableEntry>(); - ICacheEntryEventFilter<int, PortableEntry> filter = new LocalFilter(); - - ContinuousQuery<int, PortableEntry> qry = loc - ? new ContinuousQuery<int, PortableEntry>(lsnr, filter, true) - : new ContinuousQuery<int, PortableEntry>(lsnr, filter); - - if (loc) - { - using (cache1.QueryContinuous(qry)) - { - // Local put must be fine. - int key1 = PrimaryKey(cache1); - cache1.GetAndPut(key1, Entry(key1)); - CheckFilterSingle(key1, null, Entry(key1)); - } - } - else - { - Assert.Throws<SerializationException>(() => - { - using (cache1.QueryContinuous(qry)) - { - // No-op. - } - }); - } - } - - /// <summary> - /// Test portable filter unmarshalling error. - /// </summary> - [Ignore("IGNITE-521")] - [Test] - public void TestFilterUnmarshalErrorPortable() - { - CheckFilterUnmarshalError(true); - } - - /// <summary> - /// Test serializable filter unmarshalling error. - /// </summary> - [Ignore("IGNITE-521")] - [Test] - public void TestFilterUnmarshalErrorSerializable() - { - CheckFilterUnmarshalError(false); - } - - /// <summary> - /// Check filter unmarshal error handling. - /// </summary> - /// <param name="portable">Portable flag.</param> - private void CheckFilterUnmarshalError(bool portable) - { - AbstractFilter<PortableEntry>.unmarshErr = true; - - ICacheEntryEventListener<int, PortableEntry> lsnr = new Listener<PortableEntry>(); - ICacheEntryEventFilter<int, PortableEntry> filter = - portable ? (AbstractFilter<PortableEntry>)new PortableFilter() : new SerializableFilter(); - - ContinuousQuery<int, PortableEntry> qry = new ContinuousQuery<int, PortableEntry>(lsnr, filter); - - using (cache1.QueryContinuous(qry)) - { - // Local put must be fine. - int key1 = PrimaryKey(cache1); - cache1.GetAndPut(key1, Entry(key1)); - CheckFilterSingle(key1, null, Entry(key1)); - - // Remote put must fail. - try - { - cache1.GetAndPut(PrimaryKey(cache2), Entry(1)); - - Assert.Fail("Should not reach this place."); - } - catch (IgniteException) - { - // No-op. - } - catch (Exception) - { - Assert.Fail("Unexpected error."); - } - } - } - - /// <summary> - /// Test Ignite injection into filters. - /// </summary> - [Test] - public void TestFilterInjection() - { - Listener<PortableEntry> cb = new Listener<PortableEntry>(); - PortableFilter filter = new PortableFilter(); - - Assert.IsNull(filter.ignite); - - using (cache1.QueryContinuous(new ContinuousQuery<int, PortableEntry>(cb, filter))) - { - // Local injection. - Assert.IsNotNull(filter.ignite); - - // Remote injection. - cache1.GetAndPut(PrimaryKey(cache2), Entry(1)); - - FilterEvent evt; - - Assert.IsTrue(FILTER_EVTS.TryTake(out evt, 500)); - - Assert.IsNotNull(evt.ignite); - } - } - - - /// <summary> - /// Test "keep-portable" scenario. - /// </summary> - [Test] - public void TestKeepPortable() - { - var cache = cache1.WithKeepPortable<int, IPortableObject>(); - - ContinuousQuery<int, IPortableObject> qry = new ContinuousQuery<int, IPortableObject>( - new Listener<IPortableObject>(), new KeepPortableFilter()); - - using (cache.QueryContinuous(qry)) - { - // 1. Local put. - cache1.GetAndPut(PrimaryKey(cache1), Entry(1)); - - CallbackEvent cbEvt; - FilterEvent filterEvt; - - Assert.IsTrue(FILTER_EVTS.TryTake(out filterEvt, 500)); - Assert.AreEqual(PrimaryKey(cache1), filterEvt.entry.Key); - Assert.AreEqual(null, filterEvt.entry.OldValue); - Assert.AreEqual(Entry(1), (filterEvt.entry.Value as IPortableObject) - .Deserialize<PortableEntry>()); - - Assert.IsTrue(CB_EVTS.TryTake(out cbEvt, 500)); - Assert.AreEqual(1, cbEvt.entries.Count); - Assert.AreEqual(PrimaryKey(cache1), cbEvt.entries.First().Key); - Assert.AreEqual(null, cbEvt.entries.First().OldValue); - Assert.AreEqual(Entry(1), (cbEvt.entries.First().Value as IPortableObject) - .Deserialize<PortableEntry>()); - - // 2. Remote put. - cache1.GetAndPut(PrimaryKey(cache2), Entry(2)); - - Assert.IsTrue(FILTER_EVTS.TryTake(out filterEvt, 500)); - Assert.AreEqual(PrimaryKey(cache2), filterEvt.entry.Key); - Assert.AreEqual(null, filterEvt.entry.OldValue); - Assert.AreEqual(Entry(2), (filterEvt.entry.Value as IPortableObject) - .Deserialize<PortableEntry>()); - - Assert.IsTrue(CB_EVTS.TryTake(out cbEvt, 500)); - Assert.AreEqual(1, cbEvt.entries.Count); - Assert.AreEqual(PrimaryKey(cache2), cbEvt.entries.First().Key); - Assert.AreEqual(null, cbEvt.entries.First().OldValue); - Assert.AreEqual(Entry(2), - (cbEvt.entries.First().Value as IPortableObject).Deserialize<PortableEntry>()); - } - } - - /// <summary> - /// Test whether buffer size works fine. - /// </summary> - [Test] - public void TestBufferSize() - { - // Put two remote keys in advance. - List<int> rmtKeys = PrimaryKeys(cache2, 2); - - ContinuousQuery<int, PortableEntry> qry = new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>()); - - qry.BufferSize = 2; - qry.TimeInterval = TimeSpan.FromMilliseconds(1000000); - - using (cache1.QueryContinuous(qry)) - { - qry.BufferSize = 2; - - cache1.GetAndPut(rmtKeys[0], Entry(rmtKeys[0])); - - CheckNoCallback(100); - - cache1.GetAndPut(rmtKeys[1], Entry(rmtKeys[1])); - - CallbackEvent evt; - - Assert.IsTrue(CB_EVTS.TryTake(out evt, 1000)); - - Assert.AreEqual(2, evt.entries.Count); - - var entryRmt0 = evt.entries.Single(entry => { return entry.Key.Equals(rmtKeys[0]); }); - var entryRmt1 = evt.entries.Single(entry => { return entry.Key.Equals(rmtKeys[1]); }); - - Assert.AreEqual(rmtKeys[0], entryRmt0.Key); - Assert.IsNull(entryRmt0.OldValue); - Assert.AreEqual(Entry(rmtKeys[0]), entryRmt0.Value); - - Assert.AreEqual(rmtKeys[1], entryRmt1.Key); - Assert.IsNull(entryRmt1.OldValue); - Assert.AreEqual(Entry(rmtKeys[1]), entryRmt1.Value); - } - - cache1.Remove(rmtKeys[0]); - cache1.Remove(rmtKeys[1]); - } - - /// <summary> - /// Test whether timeout works fine. - /// </summary> - [Test] - public void TestTimeout() - { - int key1 = PrimaryKey(cache1); - int key2 = PrimaryKey(cache2); - - ContinuousQuery<int, PortableEntry> qry = - new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>()); - - qry.BufferSize = 2; - qry.TimeInterval = TimeSpan.FromMilliseconds(500); - - using (cache1.QueryContinuous(qry)) - { - // Put from local node. - cache1.GetAndPut(key1, Entry(key1)); - CheckCallbackSingle(key1, null, Entry(key1)); - - // Put from remote node. - cache1.GetAndPut(key2, Entry(key2)); - CheckNoCallback(100); - CheckCallbackSingle(key2, null, Entry(key2), 1000); - } - } - - /// <summary> - /// Test whether nested Ignite API call from callback works fine. - /// </summary> - [Test] - public void TestNestedCallFromCallback() - { - var cache = cache1.WithKeepPortable<int, IPortableObject>(); - - int key = PrimaryKey(cache1); - - NestedCallListener cb = new NestedCallListener(); - - using (cache.QueryContinuous(new ContinuousQuery<int, IPortableObject>(cb))) - { - cache1.GetAndPut(key, Entry(key)); - - cb.countDown.Wait(); - } - - cache.Remove(key); - } - - /// <summary> - /// Tests the initial query. - /// </summary> - [Test] - public void TestInitialQuery() - { - // Scan query, GetAll - TestInitialQuery(new ScanQuery<int, PortableEntry>(new InitialQueryScanFilter()), cur => cur.GetAll()); - - // Scan query, iterator - TestInitialQuery(new ScanQuery<int, PortableEntry>(new InitialQueryScanFilter()), cur => cur.ToList()); - - // Sql query, GetAll - TestInitialQuery(new SqlQuery(typeof(PortableEntry), "val < 33"), cur => cur.GetAll()); - - // Sql query, iterator - TestInitialQuery(new SqlQuery(typeof(PortableEntry), "val < 33"), cur => cur.ToList()); - - // Text query, GetAll - TestInitialQuery(new TextQuery(typeof(PortableEntry), "1*"), cur => cur.GetAll()); - - // Text query, iterator - TestInitialQuery(new TextQuery(typeof(PortableEntry), "1*"), cur => cur.ToList()); - - // Test exception: invalid initial query - var ex = Assert.Throws<IgniteException>( - () => TestInitialQuery(new TextQuery(typeof (PortableEntry), "*"), cur => cur.GetAll())); - - Assert.AreEqual("Cannot parse '*': '*' or '?' not allowed as first character in WildcardQuery", ex.Message); - } - - /// <summary> - /// Tests the initial query. - /// </summary> - private void TestInitialQuery(QueryBase initialQry, Func<IQueryCursor<ICacheEntry<int, PortableEntry>>, - IEnumerable<ICacheEntry<int, PortableEntry>>> getAllFunc) - { - var qry = new ContinuousQuery<int, PortableEntry>(new Listener<PortableEntry>()); - - cache1.Put(11, Entry(11)); - cache1.Put(12, Entry(12)); - cache1.Put(33, Entry(33)); - - try - { - IContinuousQueryHandle<ICacheEntry<int, PortableEntry>> contQry; - - using (contQry = cache1.QueryContinuous(qry, initialQry)) - { - // Check initial query - var initialEntries = - getAllFunc(contQry.GetInitialQueryCursor()).Distinct().OrderBy(x => x.Key).ToList(); - - Assert.Throws<InvalidOperationException>(() => contQry.GetInitialQueryCursor()); - - Assert.AreEqual(2, initialEntries.Count); - - for (int i = 0; i < initialEntries.Count; i++) - { - Assert.AreEqual(i + 11, initialEntries[i].Key); - Assert.AreEqual(i + 11, initialEntries[i].Value.val); - } - - // Check continuous query - cache1.Put(44, Entry(44)); - CheckCallbackSingle(44, null, Entry(44)); - } - - Assert.Throws<ObjectDisposedException>(() => contQry.GetInitialQueryCursor()); - - contQry.Dispose(); // multiple dispose calls are ok - } - finally - { - cache1.Clear(); - } - } - - /// <summary> - /// Check single filter event. - /// </summary> - /// <param name="expKey">Expected key.</param> - /// <param name="expOldVal">Expected old value.</param> - /// <param name="expVal">Expected value.</param> - private void CheckFilterSingle(int expKey, PortableEntry expOldVal, PortableEntry expVal) - { - CheckFilterSingle(expKey, expOldVal, expVal, 1000); - } - - /// <summary> - /// Check single filter event. - /// </summary> - /// <param name="expKey">Expected key.</param> - /// <param name="expOldVal">Expected old value.</param> - /// <param name="expVal">Expected value.</param> - /// <param name="timeout">Timeout.</param> - private void CheckFilterSingle(int expKey, PortableEntry expOldVal, PortableEntry expVal, int timeout) - { - FilterEvent evt; - - Assert.IsTrue(FILTER_EVTS.TryTake(out evt, timeout)); - - Assert.AreEqual(expKey, evt.entry.Key); - Assert.AreEqual(expOldVal, evt.entry.OldValue); - Assert.AreEqual(expVal, evt.entry.Value); - } - - /// <summary> - /// Ensure that no filter events are logged. - /// </summary> - /// <param name="timeout">Timeout.</param> - private void CheckNoFilter(int timeout) - { - FilterEvent evt; - - Assert.IsFalse(FILTER_EVTS.TryTake(out evt, timeout)); - } - - /// <summary> - /// Check single callback event. - /// </summary> - /// <param name="expKey">Expected key.</param> - /// <param name="expOldVal">Expected old value.</param> - /// <param name="expVal">Expected new value.</param> - private void CheckCallbackSingle(int expKey, PortableEntry expOldVal, PortableEntry expVal) - { - CheckCallbackSingle(expKey, expOldVal, expVal, 1000); - } - - /// <summary> - /// Check single callback event. - /// </summary> - /// <param name="expKey">Expected key.</param> - /// <param name="expOldVal">Expected old value.</param> - /// <param name="expVal">Expected new value.</param> - /// <param name="timeout">Timeout.</param> - private void CheckCallbackSingle(int expKey, PortableEntry expOldVal, PortableEntry expVal, int timeout) - { - CallbackEvent evt; - - Assert.IsTrue(CB_EVTS.TryTake(out evt, timeout)); - - Assert.AreEqual(1, evt.entries.Count); - - Assert.AreEqual(expKey, evt.entries.First().Key); - Assert.AreEqual(expOldVal, evt.entries.First().OldValue); - Assert.AreEqual(expVal, evt.entries.First().Value); - } - - /// <summary> - /// Ensure that no callback events are logged. - /// </summary> - /// <param name="timeout">Timeout.</param> - private void CheckNoCallback(int timeout) - { - CallbackEvent evt; - - Assert.IsFalse(CB_EVTS.TryTake(out evt, timeout)); - } - - /// <summary> - /// Craate entry. - /// </summary> - /// <param name="val">Value.</param> - /// <returns>Entry.</returns> - private static PortableEntry Entry(int val) - { - return new PortableEntry(val); - } - - /// <summary> - /// Get primary key for cache. - /// </summary> - /// <param name="cache">Cache.</param> - /// <returns>Primary key.</returns> - private static int PrimaryKey<T>(ICache<int, T> cache) - { - return PrimaryKeys(cache, 1)[0]; - } - - /// <summary> - /// Get primary keys for cache. - /// </summary> - /// <param name="cache">Cache.</param> - /// <param name="cnt">Amount of keys.</param> - /// <param name="startFrom">Value to start from.</param> - /// <returns></returns> - private static List<int> PrimaryKeys<T>(ICache<int, T> cache, int cnt, int startFrom = 0) - { - IClusterNode node = cache.Ignite.GetCluster().GetLocalNode(); - - ICacheAffinity aff = cache.Ignite.GetAffinity(cache.Name); - - List<int> keys = new List<int>(cnt); - - for (int i = startFrom; i < startFrom + 100000; i++) - { - if (aff.IsPrimary(node, i)) - { - keys.Add(i); - - if (keys.Count == cnt) - return keys; - } - } - - Assert.Fail("Failed to find " + cnt + " primary keys."); - - return null; - } - - /// <summary> - /// Portable entry. - /// </summary> - public class PortableEntry - { - /** Value. */ - public readonly int val; - - /** <inheritDot /> */ - public override int GetHashCode() - { - return val; - } - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="val">Value.</param> - public PortableEntry(int val) - { - this.val = val; - } - - /** <inheritDoc /> */ - public override bool Equals(object obj) - { - return obj != null && obj is PortableEntry && ((PortableEntry)obj).val == val; - } - } - - /// <summary> - /// Abstract filter. - /// </summary> - [Serializable] - public abstract class AbstractFilter<V> : ICacheEntryEventFilter<int, V> - { - /** Result. */ - public static volatile bool res = true; - - /** Throw error on invocation. */ - public static volatile bool err; - - /** Throw error during marshalling. */ - public static volatile bool marshErr; - - /** Throw error during unmarshalling. */ - public static volatile bool unmarshErr; - - /** Grid. */ - [InstanceResource] - public IIgnite ignite; - - /** <inheritDoc /> */ - public bool Evaluate(ICacheEntryEvent<int, V> evt) - { - if (err) - throw new Exception("Filter error."); - - FILTER_EVTS.Add(new FilterEvent(ignite, - CQU.CreateEvent<object, object>(evt.Key, evt.OldValue, evt.Value))); - - return res; - } - } - - /// <summary> - /// Filter which cannot be serialized. - /// </summary> - public class LocalFilter : AbstractFilter<PortableEntry> - { - // No-op. - } - - /// <summary> - /// Portable filter. - /// </summary> - public class PortableFilter : AbstractFilter<PortableEntry>, IPortableMarshalAware - { - /** <inheritDoc /> */ - public void WritePortable(IPortableWriter writer) - { - if (marshErr) - throw new Exception("Filter marshalling error."); - } - - /** <inheritDoc /> */ - public void ReadPortable(IPortableReader reader) - { - if (unmarshErr) - throw new Exception("Filter unmarshalling error."); - } - } - - /// <summary> - /// Serializable filter. - /// </summary> - [Serializable] - public class SerializableFilter : AbstractFilter<PortableEntry>, ISerializable - { - /// <summary> - /// Constructor. - /// </summary> - public SerializableFilter() - { - // No-op. - } - - /// <summary> - /// Serialization constructor. - /// </summary> - /// <param name="info">Info.</param> - /// <param name="context">Context.</param> - protected SerializableFilter(SerializationInfo info, StreamingContext context) - { - if (unmarshErr) - throw new Exception("Filter unmarshalling error."); - } - - /** <inheritDoc /> */ - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - if (marshErr) - throw new Exception("Filter marshalling error."); - } - } - - /// <summary> - /// Filter for "keep-portable" scenario. - /// </summary> - public class KeepPortableFilter : AbstractFilter<IPortableObject> - { - // No-op. - } - - /// <summary> - /// Listener. - /// </summary> - public class Listener<V> : ICacheEntryEventListener<int, V> - { - [InstanceResource] - public IIgnite ignite; - - /** <inheritDoc /> */ - public void OnEvent(IEnumerable<ICacheEntryEvent<int, V>> evts) - { - ICollection<ICacheEntryEvent<object, object>> entries0 = - new List<ICacheEntryEvent<object, object>>(); - - foreach (ICacheEntryEvent<int, V> evt in evts) - entries0.Add(CQU.CreateEvent<object, object>(evt.Key, evt.OldValue, evt.Value)); - - CB_EVTS.Add(new CallbackEvent(entries0)); - } - } - - /// <summary> - /// Listener with nested Ignite API call. - /// </summary> - public class NestedCallListener : ICacheEntryEventListener<int, IPortableObject> - { - /** Event. */ - public readonly CountdownEvent countDown = new CountdownEvent(1); - - public void OnEvent(IEnumerable<ICacheEntryEvent<int, IPortableObject>> evts) - { - foreach (ICacheEntryEvent<int, IPortableObject> evt in evts) - { - IPortableObject val = evt.Value; - - IPortableMetadata meta = val.GetMetadata(); - - Assert.AreEqual(typeof(PortableEntry).Name, meta.TypeName); - } - - countDown.Signal(); - } - } - - /// <summary> - /// Filter event. - /// </summary> - public class FilterEvent - { - /** Grid. */ - public IIgnite ignite; - - /** Entry. */ - public ICacheEntryEvent<object, object> entry; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="ignite">Grid.</param> - /// <param name="entry">Entry.</param> - public FilterEvent(IIgnite ignite, ICacheEntryEvent<object, object> entry) - { - this.ignite = ignite; - this.entry = entry; - } - } - - /// <summary> - /// Callbakc event. - /// </summary> - public class CallbackEvent - { - /** Entries. */ - public ICollection<ICacheEntryEvent<object, object>> entries; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="entries">Entries.</param> - public CallbackEvent(ICollection<ICacheEntryEvent<object, object>> entries) - { - this.entries = entries; - } - } - - /// <summary> - /// ScanQuery filter for InitialQuery test. - /// </summary> - [Serializable] - private class InitialQueryScanFilter : ICacheEntryFilter<int, PortableEntry> - { - /** <inheritdoc /> */ - public bool Invoke(ICacheEntry<int, PortableEntry> entry) - { - return entry.Key < 33; - } - } - } -} -
http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicBackupTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicBackupTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicBackupTest.cs deleted file mode 100644 index ac44f10..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicBackupTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - /// <summary> - /// Continuous query tests for ATOMIC cache with backups. - /// </summary> - public class ContinuousQueryAtomiclBackupTest : ContinuousQueryAbstractTest - { - /// <summary> - /// Constructor. - /// </summary> - public ContinuousQueryAtomiclBackupTest() : base(CACHE_ATOMIC_BACKUP) - { - // No-op. - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicNoBackupTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicNoBackupTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicNoBackupTest.cs deleted file mode 100644 index 8e1a18f..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryAtomicNoBackupTest.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - /// <summary> - /// Continuous query tests for ATOMIC cache with no backups. - /// </summary> - public class ContinuousQueryAtomiclNoBackupTest : ContinuousQueryNoBackupAbstractTest - { - /// <summary> - /// Constructor. - /// </summary> - public ContinuousQueryAtomiclNoBackupTest() - : base(CACHE_ATOMIC_NO_BACKUP) - { - // No-op. - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryNoBackupAbstractTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryNoBackupAbstractTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryNoBackupAbstractTest.cs deleted file mode 100644 index aa7d627..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryNoBackupAbstractTest.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - using NUnit.Framework; - - /// <summary> - /// Tests for ocntinuous query when there are no backups. - /// </summary> - public abstract class ContinuousQueryNoBackupAbstractTest : ContinuousQueryAbstractTest - { - /// <summary> - /// Constructor. - /// </summary> - /// <param name="cacheName">Cache name.</param> - protected ContinuousQueryNoBackupAbstractTest(string cacheName) : base(cacheName) - { - // No-op. - } - - /// <summary> - /// Test regular callback operations for local query. - /// </summary> - [Test] - public void TestCallbackLocal() - { - CheckCallback(true); - } - - /// <summary> - /// Test portable filter logic. - /// </summary> - [Test] - public void TestFilterPortableLocal() - { - CheckFilter(true, true); - } - - /// <summary> - /// Test serializable filter logic. - /// </summary> - [Test] - public void TestFilterSerializableLocal() - { - CheckFilter(false, true); - } - - /// <summary> - /// Test non-serializable filter for local query. - /// </summary> - [Test] - public void TestFilterNonSerializableLocal() - { - CheckFilterNonSerializable(true); - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalBackupTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalBackupTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalBackupTest.cs deleted file mode 100644 index 08ae88c..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalBackupTest.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - /// <summary> - /// Continuous query tests for TRANSACTIONAL cache with backups. - /// </summary> - public class ContinuousQueryTransactionalBackupTest : ContinuousQueryAbstractTest - { - /// <summary> - /// Constructor. - /// </summary> - public ContinuousQueryTransactionalBackupTest() - : base(CACHE_TX_BACKUP) - { - // No-op. - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalNoBackupTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalNoBackupTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalNoBackupTest.cs deleted file mode 100644 index 685f7b4..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTransactionalNoBackupTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Query.Continuous -{ - /// <summary> - /// Continuous query tests for TRANSACTIONAL cache with no backups. - /// </summary> - public class ContinuousQueryTransactionalNoBackupTest : ContinuousQueryNoBackupAbstractTest - { - /// <summary> - /// Constructor. - /// </summary> - public ContinuousQueryTransactionalNoBackupTest() : base(CACHE_TX_NO_BACKUP) - { - // No-op. - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs deleted file mode 100644 index a7d9adb..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheParallelLoadStoreTest.cs +++ /dev/null @@ -1,110 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Store -{ - using System; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Portable; - using NUnit.Framework; - - /// <summary> - /// Tests for GridCacheParallelLoadStoreAdapter. - /// </summary> - public class CacheParallelLoadStoreTest - { - // object store name - private const string ObjectStoreCacheName = "object_store_parallel"; - - /// <summary> - /// Set up test class. - /// </summary> - [TestFixtureSetUp] - public virtual void BeforeTests() - { - TestUtils.KillProcesses(); - TestUtils.JvmDebug = true; - - Ignition.Start(new IgniteConfiguration - { - JvmClasspath = TestUtils.CreateTestClasspath(), - JvmOptions = TestUtils.TestJavaOptions(), - SpringConfigUrl = "config\\native-client-test-cache-parallel-store.xml", - PortableConfiguration = new PortableConfiguration - { - Types = new[] {typeof (CacheTestParallelLoadStore.Record).FullName} - } - }); - } - - /// <summary> - /// Tear down test class. - /// </summary> - [TestFixtureTearDown] - public virtual void AfterTests() - { - Ignition.StopAll(true); - } - - /// <summary> - /// Test setup. - /// </summary> - [SetUp] - public void BeforeTest() - { - Console.WriteLine("Test started: " + TestContext.CurrentContext.Test.Name); - } - - /// <summary> - /// Tests the LoadCache. - /// </summary> - [Test] - public void TestLoadCache() - { - var cache = GetCache(); - - Assert.AreEqual(0, cache.GetSize()); - - const int minId = 113; - const int expectedItemCount = CacheTestParallelLoadStore.InputDataLength - minId; - - CacheTestParallelLoadStore.ResetCounters(); - - cache.LocalLoadCache(null, minId); - - Assert.AreEqual(expectedItemCount, cache.GetSize()); - - // check items presence; increment by 100 to speed up the test - for (var i = minId; i < expectedItemCount; i += 100) - { - var rec = cache.Get(i); - Assert.AreEqual(i, rec.Id); - } - - // check that items were processed in parallel - Assert.GreaterOrEqual(CacheTestParallelLoadStore.UniqueThreadCount, Environment.ProcessorCount); - } - - /// <summary> - /// Gets the cache. - /// </summary> - private static ICache<int, CacheTestParallelLoadStore.Record> GetCache() - { - return Ignition.GetIgnite().GetCache<int, CacheTestParallelLoadStore.Record>(ObjectStoreCacheName); - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs deleted file mode 100644 index 137215e..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreSessionTest.cs +++ /dev/null @@ -1,285 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Store -{ - using System; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.Linq; - using Apache.Ignite.Core.Cache.Store; - using Apache.Ignite.Core.Impl; - using Apache.Ignite.Core.Resource; - using NUnit.Framework; - - /// <summary> - /// Tests for store session. - /// </summary> - public class CacheStoreSessionTest - { - /** Grid name. */ - private const string IgniteName = "grid"; - - /** Cache 1 name. */ - private const string Cache1 = "cache1"; - - /** Cache 2 name. */ - private const string Cache2 = "cache2"; - - /** Operations. */ - private static ConcurrentBag<ICollection<Operation>> _dumps; - - /// <summary> - /// Set up routine. - /// </summary> - [TestFixtureSetUp] - public virtual void BeforeTests() - { - //TestUtils.JVM_DEBUG = true; - - TestUtils.KillProcesses(); - - TestUtils.JvmDebug = true; - - IgniteConfigurationEx cfg = new IgniteConfigurationEx - { - GridName = IgniteName, - JvmClasspath = TestUtils.CreateTestClasspath(), - JvmOptions = TestUtils.TestJavaOptions(), - SpringConfigUrl = @"config\cache\store\cache-store-session.xml" - }; - - - Ignition.Start(cfg); - } - - /// <summary> - /// Tear down routine. - /// </summary> - [TestFixtureTearDown] - public virtual void AfterTests() - { - Ignition.StopAll(true); - } - - /// <summary> - /// Test basic session API. - /// </summary> - [Test] - public void TestSession() - { - _dumps = new ConcurrentBag<ICollection<Operation>>(); - - var ignite = Ignition.GetIgnite(IgniteName); - - var cache1 = Ignition.GetIgnite(IgniteName).GetCache<int, int>(Cache1); - var cache2 = Ignition.GetIgnite(IgniteName).GetCache<int, int>(Cache2); - - // 1. Test rollback. - using (var tx = ignite.GetTransactions().TxStart()) - { - cache1.Put(1, 1); - cache2.Put(2, 2); - - tx.Rollback(); - } - - Assert.AreEqual(1, _dumps.Count); - var ops = _dumps.First(); - Assert.AreEqual(1, ops.Count); - - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.SesEnd && !op.Commit)); - - _dumps = new ConcurrentBag<ICollection<Operation>>(); - - // 2. Test puts. - using (var tx = ignite.GetTransactions().TxStart()) - { - cache1.Put(1, 1); - cache2.Put(2, 2); - - tx.Commit(); - } - - Assert.AreEqual(1, _dumps.Count); - ops = _dumps.First(); - Assert.AreEqual(3, ops.Count); - - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.Write && Cache1.Equals(op.CacheName) && 1.Equals(op.Key) && 1.Equals(op.Value))); - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.Write && Cache2.Equals(op.CacheName) && 2.Equals(op.Key) && 2.Equals(op.Value))); - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.SesEnd && op.Commit)); - - _dumps = new ConcurrentBag<ICollection<Operation>>(); - - // 3. Test removes. - using (var tx = ignite.GetTransactions().TxStart()) - { - cache1.Remove(1); - cache2.Remove(2); - - tx.Commit(); - } - - Assert.AreEqual(1, _dumps.Count); - ops = _dumps.First(); - Assert.AreEqual(3, ops.Count); - - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.Delete && Cache1.Equals(op.CacheName) && 1.Equals(op.Key))); - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.Delete && Cache2.Equals(op.CacheName) && 2.Equals(op.Key))); - Assert.AreEqual(1, ops.Count(op => op.Type == OperationType.SesEnd && op.Commit)); - } - - /// <summary> - /// Dump operations. - /// </summary> - /// <param name="dump">Dump.</param> - internal static void DumpOperations(ICollection<Operation> dump) - { - _dumps.Add(dump); - } - - /// <summary> - /// Test store implementation. - /// </summary> - public class Store : CacheStoreAdapter - { - /** Store session. */ - [StoreSessionResource] -#pragma warning disable 649 - private ICacheStoreSession _ses; -#pragma warning restore 649 - - /** <inheritdoc /> */ - public override object Load(object key) - { - throw new NotImplementedException(); - } - - /** <inheritdoc /> */ - public override void Write(object key, object val) - { - GetOperations().Add(new Operation(_ses.CacheName, OperationType.Write, (int)key, (int)val)); - } - - /** <inheritdoc /> */ - public override void Delete(object key) - { - GetOperations().Add(new Operation(_ses.CacheName, OperationType.Delete, (int)key, 0)); - } - - /** <inheritdoc /> */ - public override void SessionEnd(bool commit) - { - Operation op = new Operation(_ses.CacheName, OperationType.SesEnd) { Commit = commit }; - - ICollection<Operation> ops = GetOperations(); - - ops.Add(op); - - DumpOperations(ops); - } - - /// <summary> - /// Get collection with operations. - /// </summary> - /// <returns>Operations.</returns> - private ICollection<Operation> GetOperations() - { - object ops; - - if (!_ses.Properties.TryGetValue("ops", out ops)) - { - ops = new List<Operation>(); - - _ses.Properties["ops"] = ops; - } - - return (ICollection<Operation>) ops; - } - } - - /// <summary> - /// Logged operation. - /// </summary> - internal class Operation - { - /// <summary> - /// Constructor. - /// </summary> - /// <param name="cacheName">Cache name.</param> - /// <param name="type">Operation type.</param> - public Operation(string cacheName, OperationType type) - { - CacheName = cacheName; - Type = type; - } - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="cacheName">Cache name.</param> - /// <param name="type">Operation type.</param> - /// <param name="key">Key.</param> - /// <param name="val">Value.</param> - public Operation(string cacheName, OperationType type, int key, int val) : this(cacheName, type) - { - Key = key; - Value = val; - } - - /// <summary> - /// Cache name. - /// </summary> - public string CacheName { get; set; } - - /// <summary> - /// Operation type. - /// </summary> - public OperationType Type { get; set; } - - /// <summary> - /// Key. - /// </summary> - public int Key { get; set; } - - /// <summary> - /// Value. - /// </summary> - public int Value { get; set; } - - /// <summary> - /// Commit flag. - /// </summary> - public bool Commit { get; set; } - } - - /// <summary> - /// Operation types. - /// </summary> - internal enum OperationType - { - /** Write. */ - Write, - - /** Delete. */ - Delete, - - /** Session end. */ - SesEnd - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs deleted file mode 100644 index bfafcf4..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs +++ /dev/null @@ -1,510 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Store -{ - using System; - using System.Collections; - using System.Collections.Generic; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Impl; - using Apache.Ignite.Core.Portable; - using NUnit.Framework; - - /// <summary> - /// - /// </summary> - class Key - { - private readonly int _idx; - - public Key(int idx) - { - _idx = idx; - } - - public int Index() - { - return _idx; - } - - public override bool Equals(object obj) - { - if (obj == null || obj.GetType() != GetType()) - return false; - - Key key = (Key)obj; - - return key._idx == _idx; - } - - public override int GetHashCode() - { - return _idx; - } - } - - /// <summary> - /// - /// </summary> - class Value - { - private int _idx; - - public Value(int idx) - { - _idx = idx; - } - - public int Index() - { - return _idx; - } - } - - /// <summary> - /// Cache entry predicate. - /// </summary> - [Serializable] - public class CacheEntryFilter : ICacheEntryFilter<int, string> - { - /** <inheritdoc /> */ - public bool Invoke(ICacheEntry<int, string> entry) - { - return entry.Key >= 105; - } - } - - /// <summary> - /// - /// </summary> - public class CacheStoreTest - { - /** */ - private const string PortableStoreCacheName = "portable_store"; - - /** */ - private const string ObjectStoreCacheName = "object_store"; - - /** */ - private const string CustomStoreCacheName = "custom_store"; - - /** */ - private const string TemplateStoreCacheName = "template_store*"; - - /// <summary> - /// - /// </summary> - [TestFixtureSetUp] - public void BeforeTests() - { - //TestUtils.JVM_DEBUG = true; - - TestUtils.KillProcesses(); - - TestUtils.JvmDebug = true; - - IgniteConfigurationEx cfg = new IgniteConfigurationEx(); - - cfg.GridName = GridName(); - cfg.JvmClasspath = TestUtils.CreateTestClasspath(); - cfg.JvmOptions = TestUtils.TestJavaOptions(); - cfg.SpringConfigUrl = "config\\native-client-test-cache-store.xml"; - - PortableConfiguration portCfg = new PortableConfiguration(); - - portCfg.Types = new List<string> { typeof(Key).FullName, typeof(Value).FullName }; - - cfg.PortableConfiguration = portCfg; - - Ignition.Start(cfg); - } - - /// <summary> - /// - /// </summary> - [TestFixtureTearDown] - public virtual void AfterTests() - { - Ignition.StopAll(true); - } - - /// <summary> - /// - /// </summary> - [SetUp] - public void BeforeTest() - { - Console.WriteLine("Test started: " + TestContext.CurrentContext.Test.Name); - } - - /// <summary> - /// - /// </summary> - [TearDown] - public void AfterTest() - { - var cache = Cache(); - - cache.Clear(); - - Assert.IsTrue(cache.IsEmpty(), "Cache is not empty: " + cache.GetSize()); - - CacheTestStore.Reset(); - - Console.WriteLine("Test finished: " + TestContext.CurrentContext.Test.Name); - } - - [Test] - public void TestLoadCache() - { - var cache = Cache(); - - Assert.AreEqual(0, cache.GetSize()); - - cache.LoadCache(new CacheEntryFilter(), 100, 10); - - Assert.AreEqual(5, cache.GetSize()); - - for (int i = 105; i < 110; i++) - Assert.AreEqual("val_" + i, cache.Get(i)); - } - - [Test] - public void TestLocalLoadCache() - { - var cache = Cache(); - - Assert.AreEqual(0, cache.GetSize()); - - cache.LocalLoadCache(new CacheEntryFilter(), 100, 10); - - Assert.AreEqual(5, cache.GetSize()); - - for (int i = 105; i < 110; i++) - Assert.AreEqual("val_" + i, cache.Get(i)); - } - - [Test] - public void TestLoadCacheMetadata() - { - CacheTestStore.LoadObjects = true; - - var cache = Cache(); - - Assert.AreEqual(0, cache.GetSize()); - - cache.LocalLoadCache(null, 0, 3); - - Assert.AreEqual(3, cache.GetSize()); - - var meta = cache.WithKeepPortable<Key, IPortableObject>().Get(new Key(0)).GetMetadata(); - - Assert.NotNull(meta); - - Assert.AreEqual("Value", meta.TypeName); - } - - [Test] - public void TestLoadCacheAsync() - { - var cache = Cache().WithAsync(); - - Assert.AreEqual(0, cache.GetSize()); - - cache.LocalLoadCache(new CacheEntryFilter(), 100, 10); - - var fut = cache.GetFuture<object>(); - - fut.Get(); - - Assert.IsTrue(fut.IsDone); - - cache.GetSize(); - Assert.AreEqual(5, cache.GetFuture<int>().ToTask().Result); - - for (int i = 105; i < 110; i++) - { - cache.Get(i); - - Assert.AreEqual("val_" + i, cache.GetFuture<string>().ToTask().Result); - } - } - - [Test] - public void TestPutLoad() - { - var cache = Cache(); - - cache.Put(1, "val"); - - IDictionary map = StoreMap(); - - Assert.AreEqual(1, map.Count); - - cache.LocalEvict(new[] { 1 }); - - Assert.AreEqual(0, cache.GetSize()); - - Assert.AreEqual("val", cache.Get(1)); - - Assert.AreEqual(1, cache.GetSize()); - } - - [Test] - public void TestPutLoadPortables() - { - var cache = PortableStoreCache<int, Value>(); - - cache.Put(1, new Value(1)); - - IDictionary map = StoreMap(); - - Assert.AreEqual(1, map.Count); - - IPortableObject v = (IPortableObject)map[1]; - - Assert.AreEqual(1, v.GetField<int>("_idx")); - - cache.LocalEvict(new[] { 1 }); - - Assert.AreEqual(0, cache.GetSize()); - - Assert.AreEqual(1, cache.Get(1).Index()); - - Assert.AreEqual(1, cache.GetSize()); - } - - [Test] - public void TestPutLoadObjects() - { - var cache = ObjectStoreCache<int, Value>(); - - cache.Put(1, new Value(1)); - - IDictionary map = StoreMap(); - - Assert.AreEqual(1, map.Count); - - Value v = (Value)map[1]; - - Assert.AreEqual(1, v.Index()); - - cache.LocalEvict(new[] { 1 }); - - Assert.AreEqual(0, cache.GetSize()); - - Assert.AreEqual(1, cache.Get(1).Index()); - - Assert.AreEqual(1, cache.GetSize()); - } - - [Test] - public void TestPutLoadAll() - { - var putMap = new Dictionary<int, string>(); - - for (int i = 0; i < 10; i++) - putMap.Add(i, "val_" + i); - - var cache = Cache(); - - cache.PutAll(putMap); - - IDictionary map = StoreMap(); - - Assert.AreEqual(10, map.Count); - - for (int i = 0; i < 10; i++) - Assert.AreEqual("val_" + i, map[i]); - - cache.Clear(); - - Assert.AreEqual(0, cache.GetSize()); - - ICollection<int> keys = new List<int>(); - - for (int i = 0; i < 10; i++) - keys.Add(i); - - IDictionary<int, string> loaded = cache.GetAll(keys); - - Assert.AreEqual(10, loaded.Count); - - for (int i = 0; i < 10; i++) - Assert.AreEqual("val_" + i, loaded[i]); - - Assert.AreEqual(10, cache.GetSize()); - } - - [Test] - public void TestRemove() - { - var cache = Cache(); - - for (int i = 0; i < 10; i++) - cache.Put(i, "val_" + i); - - IDictionary map = StoreMap(); - - Assert.AreEqual(10, map.Count); - - for (int i = 0; i < 5; i++) - cache.Remove(i); - - Assert.AreEqual(5, map.Count); - - for (int i = 5; i < 10; i++) - Assert.AreEqual("val_" + i, map[i]); - } - - [Test] - public void TestRemoveAll() - { - var cache = Cache(); - - for (int i = 0; i < 10; i++) - cache.Put(i, "val_" + i); - - IDictionary map = StoreMap(); - - Assert.AreEqual(10, map.Count); - - cache.RemoveAll(new List<int> { 0, 1, 2, 3, 4 }); - - Assert.AreEqual(5, map.Count); - - for (int i = 5; i < 10; i++) - Assert.AreEqual("val_" + i, map[i]); - } - - [Test] - public void TestTx() - { - var cache = Cache(); - - using (var tx = cache.Ignite.GetTransactions().TxStart()) - { - CacheTestStore.ExpCommit = true; - - tx.AddMeta("meta", 100); - - cache.Put(1, "val"); - - tx.Commit(); - } - - IDictionary map = StoreMap(); - - Assert.AreEqual(1, map.Count); - - Assert.AreEqual("val", map[1]); - } - - [Test] - public void TestLoadCacheMultithreaded() - { - CacheTestStore.LoadMultithreaded = true; - - var cache = Cache(); - - Assert.AreEqual(0, cache.GetSize()); - - cache.LocalLoadCache(null, 0, null); - - Assert.AreEqual(1000, cache.GetSize()); - - for (int i = 0; i < 1000; i++) - Assert.AreEqual("val_" + i, cache.Get(i)); - } - - [Test] - public void TestCustomStoreProperties() - { - var cache = CustomStoreCache(); - Assert.IsNotNull(cache); - - Assert.AreEqual(42, CacheTestStore.intProperty); - Assert.AreEqual("String value", CacheTestStore.stringProperty); - } - - [Test] - public void TestDynamicStoreStart() - { - var cache = TemplateStoreCache(); - - Assert.IsNotNull(cache); - - cache.Put(1, cache.Name); - - Assert.AreEqual(cache.Name, CacheTestStore.Map[1]); - } - - /// <summary> - /// Get's grid name for this test. - /// </summary> - /// <returns>Grid name.</returns> - protected virtual string GridName() - { - return null; - } - - private IDictionary StoreMap() - { - return CacheTestStore.Map; - } - - private ICache<int, string> Cache() - { - return PortableStoreCache<int, string>(); - } - - private ICache<TK, TV> PortableStoreCache<TK, TV>() - { - return Ignition.GetIgnite(GridName()).GetCache<TK, TV>(PortableStoreCacheName); - } - - private ICache<TK, TV> ObjectStoreCache<TK, TV>() - { - return Ignition.GetIgnite(GridName()).GetCache<TK, TV>(ObjectStoreCacheName); - } - - private ICache<int, string> CustomStoreCache() - { - return Ignition.GetIgnite(GridName()).GetCache<int, string>(CustomStoreCacheName); - } - - private ICache<int, string> TemplateStoreCache() - { - var cacheName = TemplateStoreCacheName.Replace("*", Guid.NewGuid().ToString()); - - return Ignition.GetIgnite(GridName()).GetOrCreateCache<int, string>(cacheName); - } - } - - /// <summary> - /// - /// </summary> - public class NamedNodeCacheStoreTest : CacheStoreTest - { - /** <inheritDoc /> */ - protected override string GridName() - { - return "name"; - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestParallelLoadStore.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestParallelLoadStore.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestParallelLoadStore.cs deleted file mode 100644 index 770ca83..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestParallelLoadStore.cs +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Store -{ - using System.Collections; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.Linq; - using System.Threading; - using Apache.Ignite.Core.Cache.Store; - - /// <summary> - /// Test cache store with parallel load. - /// </summary> - public class CacheTestParallelLoadStore : CacheParallelLoadStoreAdapter - { - /** Length of input data sequence */ - public const int InputDataLength = 10000; - - /** list of thread ids where Parse has been executed */ - private static readonly ConcurrentDictionary<int, int> ThreadIds = new ConcurrentDictionary<int, int>(); - - /// <summary> - /// Gets the count of unique threads that entered Parse method. - /// </summary> - public static int UniqueThreadCount - { - get { return ThreadIds.Count; } - } - - /// <summary> - /// Resets the test counters. - /// </summary> - public static void ResetCounters() - { - ThreadIds.Clear(); - } - - /** <inheritdoc /> */ - protected override IEnumerable GetInputData() - { - return Enumerable.Range(0, InputDataLength).Select(x => new Record {Id = x, Name = "Test Record " + x}); - } - - /** <inheritdoc /> */ - protected override KeyValuePair<object, object>? Parse(object inputRecord, params object[] args) - { - var threadId = Thread.CurrentThread.ManagedThreadId; - ThreadIds.GetOrAdd(threadId, threadId); - - var minId = (int)args[0]; - - var rec = (Record)inputRecord; - - return rec.Id >= minId - ? new KeyValuePair<object, object>(rec.Id, rec) - : (KeyValuePair<object, object>?) null; - } - - /// <summary> - /// Test store record. - /// </summary> - public class Record - { - /// <summary> - /// Gets or sets the identifier. - /// </summary> - public int Id { get; set; } - - /// <summary> - /// Gets or sets the name. - /// </summary> - public string Name { get; set; } - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs b/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs deleted file mode 100644 index 9c381cb..0000000 --- a/modules/platform/src/test/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheTestStore.cs +++ /dev/null @@ -1,155 +0,0 @@ -/* - * 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. - */ - -namespace Apache.Ignite.Core.Tests.Cache.Store -{ - using System; - using System.Collections; - using System.Collections.Concurrent; - using System.Diagnostics; - using System.Diagnostics.CodeAnalysis; - using System.Linq; - using System.Threading; - using Apache.Ignite.Core.Cache.Store; - using Apache.Ignite.Core.Resource; - - [SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Local")] - public class CacheTestStore : ICacheStore - { - public static readonly IDictionary Map = new ConcurrentDictionary<object, object>(); - - public static bool ExpCommit; - - public static bool LoadMultithreaded; - - public static bool LoadObjects; - - [InstanceResource] - private IIgnite _grid = null; - - [StoreSessionResource] -#pragma warning disable 649 - private ICacheStoreSession _ses; -#pragma warning restore 649 - - public static int intProperty; - - public static string stringProperty; - - public static void Reset() - { - Map.Clear(); - - ExpCommit = false; - LoadMultithreaded = false; - LoadObjects = false; - } - - public void LoadCache(Action<object, object> act, params object[] args) - { - Debug.Assert(_grid != null); - - if (LoadMultithreaded) - { - int cnt = 0; - - TestUtils.RunMultiThreaded(() => { - int i; - - while ((i = Interlocked.Increment(ref cnt) - 1) < 1000) - act(i, "val_" + i); - }, 8); - } - else - { - int start = (int)args[0]; - int cnt = (int)args[1]; - - for (int i = start; i < start + cnt; i++) - { - if (LoadObjects) - act(new Key(i), new Value(i)); - else - act(i, "val_" + i); - } - } - } - - public object Load(object key) - { - Debug.Assert(_grid != null); - - return Map[key]; - } - - public IDictionary LoadAll(ICollection keys) - { - Debug.Assert(_grid != null); - - return keys.OfType<object>().ToDictionary(key => key, Load); - } - - public void Write(object key, object val) - { - Debug.Assert(_grid != null); - - Map[key] = val; - } - - public void WriteAll(IDictionary map) - { - Debug.Assert(_grid != null); - - foreach (DictionaryEntry e in map) - Map[e.Key] = e.Value; - } - - public void Delete(object key) - { - Debug.Assert(_grid != null); - - Map.Remove(key); - } - - public void DeleteAll(ICollection keys) - { - Debug.Assert(_grid != null); - - foreach (object key in keys) - Map.Remove(key); - } - - public void SessionEnd(bool commit) - { - Debug.Assert(_grid != null); - - Debug.Assert(_ses != null); - } - - public int IntProperty - { - get { return intProperty; } - set { intProperty = value; } - } - - public string StringProperty - { - get { return stringProperty; } - set { stringProperty = value; } - } - } -}
