public virtual void AddResources(LocalResourcesTracker newTracker)
 {
     foreach (LocalizedResource resource in newTracker)
     {
         currentSize += resource.GetSize();
         if (resource.GetRefCount() > 0)
         {
             // always retain resources in use
             continue;
         }
         retain[resource] = newTracker;
     }
     for (IEnumerator <KeyValuePair <LocalizedResource, LocalResourcesTracker> > i = retain
                                                                                     .GetEnumerator(); currentSize - delSize > targetSize && i.HasNext();)
     {
         KeyValuePair <LocalizedResource, LocalResourcesTracker> rsrc = i.Next();
         LocalizedResource     resource_1 = rsrc.Key;
         LocalResourcesTracker tracker    = rsrc.Value;
         if (tracker.Remove(resource_1, delService))
         {
             delSize += resource_1.GetSize();
             i.Remove();
         }
     }
 }
        public virtual void TestRsrcUnused()
        {
            DeletionService      delService = Org.Mockito.Mockito.Mock <DeletionService>();
            long                 TargetMb   = 10 << 20;
            ResourceRetentionSet rss        = new ResourceRetentionSet(delService, TargetMb);
            // 3MB files @{10, 15}
            LocalResourcesTracker pubTracker = CreateMockTracker(null, 3 * 1024 * 1024, 2, 10
                                                                 , 5);
            // 1MB files @{3, 6, 9, 12}
            LocalResourcesTracker trackerA = CreateMockTracker("A", 1 * 1024 * 1024, 4, 3, 3);
            // 4MB file @{1}
            LocalResourcesTracker trackerB = CreateMockTracker("B", 4 * 1024 * 1024, 1, 10, 5
                                                               );
            // 2MB files @{7, 9, 11}
            LocalResourcesTracker trackerC = CreateMockTracker("C", 2 * 1024 * 1024, 3, 7, 2);

            // Total cache: 20MB; verify removed at least 10MB
            rss.AddResources(pubTracker);
            rss.AddResources(trackerA);
            rss.AddResources(trackerB);
            rss.AddResources(trackerC);
            long deleted = 0L;
            ArgumentCaptor <LocalizedResource> captor = ArgumentCaptor.ForClass <LocalizedResource
                                                                                 >();

            Org.Mockito.Mockito.Verify(pubTracker, Org.Mockito.Mockito.AtMost(2)).Remove(captor
                                                                                         .Capture(), IsA <DeletionService>());
            Org.Mockito.Mockito.Verify(trackerA, Org.Mockito.Mockito.AtMost(4)).Remove(captor
                                                                                       .Capture(), IsA <DeletionService>());
            Org.Mockito.Mockito.Verify(trackerB, Org.Mockito.Mockito.AtMost(1)).Remove(captor
                                                                                       .Capture(), IsA <DeletionService>());
            Org.Mockito.Mockito.Verify(trackerC, Org.Mockito.Mockito.AtMost(3)).Remove(captor
                                                                                       .Capture(), IsA <DeletionService>());
            foreach (LocalizedResource rem in captor.GetAllValues())
            {
                deleted += rem.GetSize();
            }
            NUnit.Framework.Assert.IsTrue(deleted >= 10 * 1024 * 1024);
            NUnit.Framework.Assert.IsTrue(deleted < 15 * 1024 * 1024);
        }
        internal virtual LocalResourcesTracker CreateMockTracker(string user, long rsrcSize
                                                                 , long nRsrcs, long timestamp, long tsstep)
        {
            Configuration conf = new Configuration();
            ConcurrentMap <LocalResourceRequest, LocalizedResource> trackerResources = new ConcurrentHashMap
                                                                                       <LocalResourceRequest, LocalizedResource>();
            LocalResourcesTracker ret = Org.Mockito.Mockito.Spy(new LocalResourcesTrackerImpl
                                                                    (user, null, null, trackerResources, false, conf, new NMNullStateStoreService())
                                                                );

            for (int i = 0; i < nRsrcs; ++i)
            {
                LocalResourceRequest req = new LocalResourceRequest(new Path("file:///" + user +
                                                                             "/rsrc" + i), timestamp + i * tsstep, LocalResourceType.File, LocalResourceVisibility
                                                                    .Public, null);
                long ts = timestamp + i * tsstep;
                Path p  = new Path("file:///local/" + user + "/rsrc" + i);
                LocalizedResource rsrc = new _LocalizedResource_93(rsrcSize, p, ts, req, null);
                trackerResources[req] = rsrc;
            }
            return(ret);
        }