| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| using System; |
| using System.Threading; |
| using System.Collections.Generic; |
| #pragma warning disable 618 |
| |
| namespace Apache.Geode.Client.UnitTests |
| { |
| using NUnit.Framework; |
| using Apache.Geode.DUnitFramework; |
| using Apache.Geode.Client; |
| |
| [TestFixture] |
| [Category("group2")] |
| [Category("unicast_only")] |
| [Category("generics")] |
| public class ExpirationTests : UnitTests |
| { |
| #region Private members |
| |
| private IRegion<object, object> m_region = null; |
| private string m_key = "KeyA - 1"; |
| private string m_value = "Value - AAAAAAA"; |
| private string m_regionName = "R"; |
| |
| #endregion |
| |
| protected override ClientBase[] GetClients() |
| { |
| return null; |
| } |
| |
| [TestFixtureSetUp] |
| public override void InitTests() |
| { |
| base.InitTests(); |
| Properties<string, string> config = new Properties<string, string>(); |
| CacheHelper.InitConfig(config); |
| } |
| |
| [TestFixtureTearDown] |
| public override void EndTests() |
| { |
| try |
| { |
| CacheHelper.Close(); |
| } |
| finally |
| { |
| base.EndTests(); |
| } |
| } |
| |
| [TearDown] |
| public override void EndTest() |
| { |
| base.EndTest(); |
| } |
| |
| #region Private functions |
| |
| private int GetNumOfEntries() |
| { |
| try |
| { |
| ICollection<object> keys = m_region.GetLocalView().Keys; |
| |
| if (keys != null) |
| { |
| return keys.Count; |
| } |
| } |
| catch (RegionDestroyedException) |
| { |
| } |
| return 0; |
| } |
| |
| private void DoNPuts(int n) |
| { |
| for (int index = 0; index < n; index++) |
| { |
| m_region[string.Format("KeyA - {0}", index + 1)] = m_value; |
| } |
| } |
| |
| private void Do1Put() |
| { |
| m_region[m_key] = m_value; |
| } |
| |
| private void SetupRegion(uint entryTTL, uint entryIdleTimeout, |
| uint regionTTL, uint regionIdleTimeout) |
| { |
| const ExpirationAction action = ExpirationAction.Destroy; |
| |
| RegionFactory rf = CacheHelper.DCache.CreateRegionFactory(RegionShortcut.LOCAL); |
| |
| rf.SetEntryTimeToLive(action, TimeSpan.FromSeconds(entryTTL)); |
| rf.SetEntryIdleTimeout(action, TimeSpan.FromSeconds(entryIdleTimeout)); |
| rf.SetRegionTimeToLive(action, TimeSpan.FromSeconds(regionTTL)); |
| rf.SetRegionIdleTimeout(action, TimeSpan.FromSeconds(regionIdleTimeout)); |
| |
| CacheHelper.Init(); |
| IRegion<object, object> region = CacheHelper.GetRegion<object, object>(m_regionName); |
| if ((region != null) && !region.IsDestroyed) |
| { |
| region.GetLocalView().DestroyRegion(); |
| Assert.IsTrue(region.IsDestroyed, "IRegion<object, object> {0} was not destroyed.", m_regionName); |
| } |
| m_region = rf.Create<object, object>(m_regionName); |
| Assert.IsNotNull(m_region, "IRegion<object, object> was not created."); |
| |
| } |
| private void PutKeyTouch(int sleepSecs) |
| { |
| Do1Put(); |
| Thread.Sleep(sleepSecs * 1000); |
| object val = m_region[m_key]; |
| } |
| |
| private void PutNKeysNoExpire(int numKeys, int sleepSecs) |
| { |
| int n; |
| |
| DoNPuts(numKeys); |
| Thread.Sleep(sleepSecs * 1000); |
| if (numKeys > 0) |
| { |
| n = GetNumOfEntries(); |
| Assert.AreEqual(numKeys, n, "Expected " + numKeys + " entries"); |
| } |
| } |
| |
| private void PutNKeysExpire(int numKeys, int sleepSecs) |
| { |
| int n; |
| |
| DoNPuts(numKeys); |
| Thread.Sleep(sleepSecs * 1000); |
| n = GetNumOfEntries(); |
| Assert.AreEqual(0, n, "Expected 0 entry"); |
| } |
| |
| private void CheckRegion(bool expectedDead, int sleepSecs) |
| { |
| if (sleepSecs > 0) |
| { |
| Thread.Sleep(sleepSecs * 1000); |
| } |
| if (expectedDead) |
| { |
| Assert.IsTrue(m_region.IsDestroyed, "Expected {0} to be dead", |
| m_regionName); |
| } |
| else |
| { |
| Assert.IsFalse(m_region.IsDestroyed, "Expected {0} to be alive", |
| m_regionName); |
| } |
| } |
| |
| #endregion |
| |
| /* |
| [Test] |
| public void KeyDestroy() |
| { |
| m_regionName = "RT1"; |
| SetupRegion(0, 0, 0, 0); |
| PutKeyTouch(5); |
| ISerializable val = m_region.Get(m_key); |
| m_region.Destroy(m_key); |
| val = m_region.Get(m_key); |
| CheckRegion(false, 0); |
| |
| m_regionName = "RT2"; |
| SetupRegion(0, 0, 0, 0); |
| PutNKeysNoExpire(5, 1); |
| m_region.DestroyRegion(); |
| CheckRegion(true, 0); |
| |
| m_regionName = "RT3"; |
| SetupRegion(0, 0, 0, 0); |
| PutKeyTouch(5); |
| val = m_region.Get(m_key); |
| CheckRegion(false, 0); |
| m_region.DestroyRegion(); |
| try |
| { |
| val = m_region.Get(m_key); |
| Util.Log("The key fetched has value: {0}", val); |
| Assert.Fail("The region should have been destroyed."); |
| } |
| catch (RegionDestroyedException) |
| { |
| } |
| CheckRegion(true, 0); |
| } |
| * */ |
| |
| [Test] |
| public void KeyExpiration() |
| { |
| m_regionName = "R1"; |
| SetupRegion(0, 0, 0, 0); |
| PutNKeysNoExpire(100, 10); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R2"; |
| SetupRegion(20, 2, 0, 0); |
| PutNKeysNoExpire(1, 5); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R3"; |
| SetupRegion(5, 0, 0, 0); |
| PutNKeysExpire(1, 10); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R4"; |
| SetupRegion(0, 5, 0, 0); |
| PutKeyTouch(2); |
| Thread.Sleep(3000); |
| Assert.AreEqual(1, GetNumOfEntries(), "Expected 1 entry"); |
| Thread.Sleep(5000); |
| Assert.AreEqual(0, GetNumOfEntries(), "Expected 0 entry"); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R5"; |
| SetupRegion(10, 0, 0, 0); |
| PutKeyTouch(5); |
| PutNKeysNoExpire(0, 6); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R6"; |
| SetupRegion(5, 0, 0, 0); |
| PutNKeysExpire(1, 6); |
| CheckRegion(false, 0); |
| |
| m_regionName = "R7"; |
| SetupRegion(0, 5, 0, 0); |
| PutKeyTouch(2); |
| m_region.GetLocalView().Remove(m_key); |
| CheckRegion(false, 5); |
| |
| m_regionName = "R8"; |
| SetupRegion(6, 3, 0, 0); |
| PutNKeysNoExpire(1, 4); |
| Thread.Sleep(4000); |
| Assert.AreEqual(0, GetNumOfEntries(), "ttl is over so it should be 0"); |
| CheckRegion(false, 5); |
| } |
| |
| [Test] |
| public void RegionExpiration() |
| { |
| m_regionName = "RR1"; |
| SetupRegion(0, 0, 20, 2); |
| CheckRegion(false, 5); |
| |
| m_regionName = "RR2"; |
| SetupRegion(0, 0, 5, 0); |
| PutNKeysNoExpire(1, 2); |
| DoNPuts(1); |
| CheckRegion(true, 7); |
| |
| m_regionName = "RR3"; |
| SetupRegion(0, 0, 0, 5); |
| PutNKeysNoExpire(1, 2); |
| DoNPuts(1); |
| CheckRegion(true, 10); |
| |
| m_regionName = "RR4"; |
| SetupRegion(0, 0, 0, 8); |
| PutKeyTouch(5); |
| Thread.Sleep(5000); |
| Assert.AreEqual(1, GetNumOfEntries(), "Expected 1 entry"); |
| CheckRegion(false, 0); |
| |
| m_regionName = "RR5"; |
| SetupRegion(0, 0, 10, 0); |
| Do1Put(); |
| CheckRegion(true, 12); |
| |
| m_regionName = "RR6"; |
| SetupRegion(0, 0, 6, 3); |
| Thread.Sleep(4000); |
| Do1Put(); |
| CheckRegion(false, 4); |
| CheckRegion(true, 4); |
| } |
| |
| [Test] |
| public void RegionAndKeyExpiration() |
| { |
| /* |
| m_regionName = "RK1"; |
| SetupRegion(5, 0, 0, 0); |
| PutNKeysNoExpire(1, 2); |
| m_region.DestroyRegion(); |
| CheckRegion(true, 0); |
| |
| m_regionName = "RK2"; |
| SetupRegion(0, 5, 0, 0); |
| PutNKeysNoExpire(1, 1); |
| m_region.DestroyRegion(); |
| CheckRegion(true, 6); |
| * */ |
| |
| m_regionName = "RK3"; |
| SetupRegion(6, 0, 0, 12); |
| PutNKeysExpire(1, 10); |
| CheckRegion(true, 11); |
| |
| m_regionName = "RK4"; |
| SetupRegion(0, 4, 0, 7); |
| PutNKeysNoExpire(1, 3); |
| object val = m_region[m_key]; |
| CheckRegion(false, 5); |
| CheckRegion(true, 5); |
| } |
| } |
| } |