예제 #1
0
        public void WillScavenge()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.NotRemovable, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.High, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.Normal, null);
            CacheItem item4 = new CacheItem("key4", "value4", CacheItemPriority.Low, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);
            AddCacheItem("key4", item4);

            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view    = new CachingConfigurationView(context);

            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 1;
            view.GetCacheManagerSettings().CacheManagers["test"].NumberToRemoveWhenScavenging           = 2;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger = new ScavengerTask("test", view, scavengingPolicy, this);

            scavenger.DoScavenging();

            Assert.AreEqual("key4key3", scavengedKeys);
        }
예제 #2
0
        public void WillRemoveMultipleEligibleForScavenging()
        {
            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view    = new CachingConfigurationView(context);

            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 2;
            view.GetCacheManagerSettings().CacheManagers["test"].NumberToRemoveWhenScavenging           = 3;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger        = new ScavengerTask("test", view, scavengingPolicy, this);
            CacheItem     itemToRemove     = new CacheItem("key1", "value", CacheItemPriority.High, null);
            CacheItem     itemToRemain     = new CacheItem("key2", "value", CacheItemPriority.Low, null);
            CacheItem     itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

            itemToRemove.MakeEligibleForScavenging();
            itemToRemain.MakeEligibleForScavenging();
            itemToRemoveAlso.MakeEligibleForScavenging();

            AddCacheItem("key1", itemToRemove);
            AddCacheItem("key2", itemToRemain);
            AddCacheItem("key3", itemToRemoveAlso);

            scavenger.DoScavenging();

            Assert.AreEqual("key2key3key1", scavengedKeys);
        }
        public void WillNotRemoveItemIfNotEligibleForScavenging()
        {
            ScavengerTask scavenger = new ScavengerTask(0, 1, this, instrumentationProvider);
            CacheItem itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);
            itemToRemove.MakeNotEligibleForScavenging();
            AddCacheItem("key", itemToRemove);

            scavenger.DoScavenging();

            Assert.AreEqual("", scavengedKeys);
        }
예제 #4
0
        public void WillNotRemoveItemIfNotEligibleForScavenging()
        {
            ScavengerTask scavenger    = new ScavengerTask(0, 1, this, instrumentationProvider);
            CacheItem     itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);

            itemToRemove.MakeNotEligibleForScavenging();
            AddCacheItem("key", itemToRemove);

            scavenger.DoScavenging();

            Assert.AreEqual("", scavengedKeys);
        }
예제 #5
0
		public void WillRemoveSingleItemFromCache()
		{
			CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy(0);
			ScavengerTask scavenger = new ScavengerTask(1, scavengingPolicy, this, instrumentationProvider);
			CacheItem itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);
			itemToRemove.MakeEligibleForScavenging();
			AddCacheItem("key", itemToRemove);

			scavenger.DoScavenging();

			Assert.AreEqual("key", scavengedKeys);
		}
예제 #6
0
        public void WillRemoveSingleItemFromCache()
        {
            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy(0);
            ScavengerTask scavenger    = new ScavengerTask(1, scavengingPolicy, this, instrumentationProvider);
            CacheItem     itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);

            itemToRemove.MakeEligibleForScavenging();
            AddCacheItem("key", itemToRemove);

            scavenger.DoScavenging();

            Assert.AreEqual("key", scavengedKeys);
        }
예제 #7
0
        public void WillScavengeNoItemsIfNumberOfItemsToScavengeIsZero()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.Low, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.Normal, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.High, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);

            ScavengerTask scavenger = new ScavengerTask(0, 2, this, instrumentationProvider);

            scavenger.DoScavenging();

            Assert.AreEqual("", scavengedKeys);
        }
예제 #8
0
        public void WillRemoveSingleItemFromCache()
        {
            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view    = new CachingConfigurationView(context);

            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 0;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger    = new ScavengerTask("test", view, scavengingPolicy, this);
            CacheItem     itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);

            itemToRemove.MakeEligibleForScavenging();
            AddCacheItem("key", itemToRemove);

            scavenger.DoScavenging();

            Assert.AreEqual("key", scavengedKeys);
        }
예제 #9
0
        public void WillScavenge()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.NotRemovable, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.High, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.Normal, null);
            CacheItem item4 = new CacheItem("key4", "value4", CacheItemPriority.Low, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);
            AddCacheItem("key4", item4);

            ScavengerTask scavenger = new ScavengerTask(2, 1, this, instrumentationProvider);

            scavenger.DoScavenging();

            Assert.AreEqual("key4key3", scavengedKeys);
        }
예제 #10
0
        public void WillStopRemovingAtLimitForScavenging()
        {
            ScavengerTask scavenger        = new ScavengerTask(2, 2, this, instrumentationProvider);
            CacheItem     itemToRemove     = new CacheItem("key1", "value", CacheItemPriority.High, null);
            CacheItem     itemToRemain     = new CacheItem("key2", "value", CacheItemPriority.Low, null);
            CacheItem     itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

            itemToRemove.MakeEligibleForScavenging();
            itemToRemain.MakeEligibleForScavenging();
            itemToRemoveAlso.MakeEligibleForScavenging();

            AddCacheItem("key1", itemToRemove);
            AddCacheItem("key2", itemToRemain);
            AddCacheItem("key3", itemToRemoveAlso);

            scavenger.DoScavenging();

            Assert.AreEqual("key2key3", scavengedKeys);
        }
예제 #11
0
        public void WillRemoveMultipleEligibleForScavenging()
        {
            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy(2);
            ScavengerTask scavenger        = new ScavengerTask(3, scavengingPolicy, this, instrumentationProvider);
            CacheItem     itemToRemove     = new CacheItem("key1", "value", CacheItemPriority.High, null);
            CacheItem     itemToRemain     = new CacheItem("key2", "value", CacheItemPriority.Low, null);
            CacheItem     itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

            itemToRemove.MakeEligibleForScavenging();
            itemToRemain.MakeEligibleForScavenging();
            itemToRemoveAlso.MakeEligibleForScavenging();

            AddCacheItem("key1", itemToRemove);
            AddCacheItem("key2", itemToRemain);
            AddCacheItem("key3", itemToRemoveAlso);

            scavenger.DoScavenging();

            Assert.AreEqual("key2key3key1", scavengedKeys);
        }
        public void RemovalFailureDuringCacheScavengingDoesFireEvents()
        {
            ICacheOperations cacheOperations = new FailingOnRemovalCacheOperations();
            CacheItem        item            = new CacheItem(key1, new object(), CacheItemPriority.Low, null);

            cacheOperations.CurrentCacheState.Add(key1, item);
            cacheOperations.CurrentCacheState.Add("differentKey", item);

            ScavengerTask scavenging = new ScavengerTask(1, new CacheCapacityScavengingPolicy(1), cacheOperations, instrumentationProvider);

            scavenging.DoScavenging();

            // two events for each of the items failing to be scavenged, and one for the announcement
            // that scavenging is finished with 0 items scavenged.
            Assert.AreEqual(3, instrumentationListener.eventArgs.Count);

            IList <CacheScavengedEventArgs> scavenges = FilterEventArgs <CacheScavengedEventArgs>(instrumentationListener.eventArgs);
            IList <CacheFailureEventArgs>   failures  = FilterEventArgs <CacheFailureEventArgs>(instrumentationListener.eventArgs);

            Assert.AreEqual(1, scavenges.Count);
            Assert.AreEqual(2, failures.Count);
        }
        public void CacheScavengeDoesFireEvents()
        {
            ICacheOperations cacheOperations = new MockCacheOperations();
            CacheItem        item1           = new CacheItem(key1, new object(), CacheItemPriority.Low, null);

            cacheOperations.CurrentCacheState.Add(key1, item1);
            CacheItem item2 = new CacheItem(key2, new object(), CacheItemPriority.Low, null);

            cacheOperations.CurrentCacheState.Add(key2, item2);
            CacheItem item3 = new CacheItem(key3, new object(), CacheItemPriority.NotRemovable, null);

            cacheOperations.CurrentCacheState.Add(key3, item3);

            ScavengerTask scavenging = new ScavengerTask(2, new CacheCapacityScavengingPolicy(2), cacheOperations, instrumentationProvider);

            scavenging.DoScavenging();
            Assert.AreEqual(1, instrumentationListener.eventArgs.Count);
            IList <CacheScavengedEventArgs> scavenges = FilterEventArgs <CacheScavengedEventArgs>(instrumentationListener.eventArgs);

            Assert.AreEqual(1, scavenges.Count);
            Assert.AreEqual(2L, scavenges[0].ItemsScavenged);
        }
예제 #14
0
        public void WillRemoveSingleItemFromCache()
        {
            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view = new CachingConfigurationView(context);
            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 0;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger = new ScavengerTask("test", view, scavengingPolicy, this);
            CacheItem itemToRemove = new CacheItem("key", "value", CacheItemPriority.Low, null);
            itemToRemove.MakeEligibleForScavenging();
            AddCacheItem("key", itemToRemove);

            scavenger.DoScavenging();

            Assert.AreEqual("key", scavengedKeys);
        }
        public void WillScavenge()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.NotRemovable, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.High, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.Normal, null);
            CacheItem item4 = new CacheItem("key4", "value4", CacheItemPriority.Low, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);
            AddCacheItem("key4", item4);

            ScavengerTask scavenger = new ScavengerTask(2, 1, this, instrumentationProvider);
            scavenger.DoScavenging();

            Assert.AreEqual("key4key3", scavengedKeys);
        }
        public void WillScavengeNoItemsIfNumberOfItemsToScavengeIsZero()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.Low, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.Normal, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.High, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);

            ScavengerTask scavenger = new ScavengerTask(0, 2, this, instrumentationProvider);
            scavenger.DoScavenging();

            Assert.AreEqual("", scavengedKeys);
        }
        public void WillStopRemovingAtLimitForScavenging()
        {
            ScavengerTask scavenger = new ScavengerTask(2, 2, this, instrumentationProvider);
            CacheItem itemToRemove = new CacheItem("key1", "value", CacheItemPriority.High, null);
            CacheItem itemToRemain = new CacheItem("key2", "value", CacheItemPriority.Low, null);
            CacheItem itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

            itemToRemove.MakeEligibleForScavenging();
            itemToRemain.MakeEligibleForScavenging();
            itemToRemoveAlso.MakeEligibleForScavenging();

            AddCacheItem("key1", itemToRemove);
            AddCacheItem("key2", itemToRemain);
            AddCacheItem("key3", itemToRemoveAlso);

            scavenger.DoScavenging();

            Assert.AreEqual("key2key3", scavengedKeys);
        }
예제 #18
0
		public void WillRemoveMultipleEligibleForScavenging()
		{
			CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy(2);
			ScavengerTask scavenger = new ScavengerTask(3, scavengingPolicy, this, instrumentationProvider);
			CacheItem itemToRemove = new CacheItem("key1", "value", CacheItemPriority.High, null);
			CacheItem itemToRemain = new CacheItem("key2", "value", CacheItemPriority.Low, null);
			CacheItem itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

			itemToRemove.MakeEligibleForScavenging();
			itemToRemain.MakeEligibleForScavenging();
			itemToRemoveAlso.MakeEligibleForScavenging();

			AddCacheItem("key1", itemToRemove);
			AddCacheItem("key2", itemToRemain);
			AddCacheItem("key3", itemToRemoveAlso);

			scavenger.DoScavenging();

			Assert.AreEqual("key2key3key1", scavengedKeys);
		}
예제 #19
0
        public void WillScavenge()
        {
            CacheItem item1 = new CacheItem("key1", "value1", CacheItemPriority.NotRemovable, null);
            CacheItem item2 = new CacheItem("key2", "value2", CacheItemPriority.High, null);
            CacheItem item3 = new CacheItem("key3", "value3", CacheItemPriority.Normal, null);
            CacheItem item4 = new CacheItem("key4", "value4", CacheItemPriority.Low, null);

            AddCacheItem("key1", item1);
            AddCacheItem("key2", item2);
            AddCacheItem("key3", item3);
            AddCacheItem("key4", item4);

            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view = new CachingConfigurationView(context);
            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 1;
            view.GetCacheManagerSettings().CacheManagers["test"].NumberToRemoveWhenScavenging = 2;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger = new ScavengerTask("test", view, scavengingPolicy, this);
            scavenger.DoScavenging();

            Assert.AreEqual("key4key3", scavengedKeys);
        }
예제 #20
0
        public void WillNotDieIfNotEnoughItemsToScavenge()
        {
            TestConfigurationContext context = new TestConfigurationContext();
            CachingConfigurationView view = new CachingConfigurationView(context);
            view.GetCacheManagerSettings().CacheManagers["test"].MaximumElementsInCacheBeforeScavenging = 2;
            view.GetCacheManagerSettings().CacheManagers["test"].NumberToRemoveWhenScavenging = 4;

            CacheCapacityScavengingPolicy scavengingPolicy = new CacheCapacityScavengingPolicy("test", view);
            ScavengerTask scavenger = new ScavengerTask("test", view, scavengingPolicy, this);
            CacheItem itemToRemove = new CacheItem("key1", "value", CacheItemPriority.High, null);
            CacheItem itemToRemain = new CacheItem("key2", "value", CacheItemPriority.Low, null);
            CacheItem itemToRemoveAlso = new CacheItem("key3", "value", CacheItemPriority.Normal, null);

            itemToRemove.MakeEligibleForScavenging();
            itemToRemain.MakeEligibleForScavenging();
            itemToRemoveAlso.MakeEligibleForScavenging();

            AddCacheItem("key1", itemToRemove);
            AddCacheItem("key2", itemToRemain);
            AddCacheItem("key3", itemToRemoveAlso);

            scavenger.DoScavenging();

            Assert.AreEqual("key2key3key1", scavengedKeys);
        }