示例#1
0
        public virtual bool Remove(LocalizedResource rem, DeletionService delService)
        {
            // current synchronization guaranteed by crude RLS event for cleanup
            LocalizedResource rsrc = localrsrc[rem.GetRequest()];

            if (null == rsrc)
            {
                Log.Error("Attempt to remove absent resource: " + rem.GetRequest() + " from " + GetUser
                              ());
                return(true);
            }
            if (rsrc.GetRefCount() > 0 || ResourceState.Downloading.Equals(rsrc.GetState()) ||
                rsrc != rem)
            {
                // internal error
                Log.Error("Attempt to remove resource: " + rsrc + " with non-zero refcount");
                return(false);
            }
            else
            {
                // ResourceState is LOCALIZED or INIT
                if (ResourceState.Localized.Equals(rsrc.GetState()))
                {
                    delService.Delete(GetUser(), GetPathToDelete(rsrc.GetLocalPath()));
                }
                RemoveResource(rem.GetRequest());
                Log.Info("Removed " + rsrc.GetLocalPath() + " from localized cache");
                return(true);
            }
        }
示例#2
0
        /// <summary>
        /// This module checks if the resource which was localized is already present
        /// or not
        /// </summary>
        /// <param name="rsrc"/>
        /// <returns>true/false based on resource is present or not</returns>
        public virtual bool IsResourcePresent(LocalizedResource rsrc)
        {
            bool ret = true;

            if (rsrc.GetState() == ResourceState.Localized)
            {
                FilePath file = new FilePath(rsrc.GetLocalPath().ToUri().GetRawPath().ToString());
                if (!file.Exists())
                {
                    ret = false;
                }
            }
            return(ret);
        }
        public virtual void TestNotification()
        {
            // mocked generic
            DrainDispatcher dispatcher = new DrainDispatcher();

            dispatcher.Init(new Configuration());
            try
            {
                dispatcher.Start();
                EventHandler <ContainerEvent> containerBus = Org.Mockito.Mockito.Mock <EventHandler
                                                                                       >();
                EventHandler <LocalizerEvent> localizerBus = Org.Mockito.Mockito.Mock <EventHandler
                                                                                       >();
                dispatcher.Register(typeof(ContainerEventType), containerBus);
                dispatcher.Register(typeof(LocalizerEventType), localizerBus);
                // mock resource
                LocalResource           apiRsrc    = CreateMockResource();
                ContainerId             container0 = GetMockContainer(0L);
                Credentials             creds0     = new Credentials();
                LocalResourceVisibility vis0       = LocalResourceVisibility.Private;
                LocalizerContext        ctxt0      = new LocalizerContext("yak", container0, creds0);
                LocalResourceRequest    rsrcA      = new LocalResourceRequest(apiRsrc);
                LocalizedResource       local      = new LocalizedResource(rsrcA, dispatcher);
                local.Handle(new ResourceRequestEvent(rsrcA, vis0, ctxt0));
                dispatcher.Await();
                // Register C0, verify request event
                TestLocalizedResource.LocalizerEventMatcher matchesL0Req = new TestLocalizedResource.LocalizerEventMatcher
                                                                               (container0, creds0, vis0, LocalizerEventType.RequestResourceLocalization);
                Org.Mockito.Mockito.Verify(localizerBus).Handle(Matchers.ArgThat(matchesL0Req));
                NUnit.Framework.Assert.AreEqual(ResourceState.Downloading, local.GetState());
                // Register C1, verify request event
                Credentials             creds1     = new Credentials();
                ContainerId             container1 = GetMockContainer(1L);
                LocalizerContext        ctxt1      = new LocalizerContext("yak", container1, creds1);
                LocalResourceVisibility vis1       = LocalResourceVisibility.Public;
                local.Handle(new ResourceRequestEvent(rsrcA, vis1, ctxt1));
                dispatcher.Await();
                TestLocalizedResource.LocalizerEventMatcher matchesL1Req = new TestLocalizedResource.LocalizerEventMatcher
                                                                               (container1, creds1, vis1, LocalizerEventType.RequestResourceLocalization);
                Org.Mockito.Mockito.Verify(localizerBus).Handle(Matchers.ArgThat(matchesL1Req));
                // Release C0 container localization, verify no notification
                local.Handle(new ResourceReleaseEvent(rsrcA, container0));
                dispatcher.Await();
                Org.Mockito.Mockito.Verify(containerBus, Org.Mockito.Mockito.Never()).Handle(Matchers.IsA
                                                                                             <ContainerEvent>());
                NUnit.Framework.Assert.AreEqual(ResourceState.Downloading, local.GetState());
                // Release C1 container localization, verify no notification
                local.Handle(new ResourceReleaseEvent(rsrcA, container1));
                dispatcher.Await();
                Org.Mockito.Mockito.Verify(containerBus, Org.Mockito.Mockito.Never()).Handle(Matchers.IsA
                                                                                             <ContainerEvent>());
                NUnit.Framework.Assert.AreEqual(ResourceState.Downloading, local.GetState());
                // Register C2, C3
                ContainerId             container2 = GetMockContainer(2L);
                LocalResourceVisibility vis2       = LocalResourceVisibility.Private;
                Credentials             creds2     = new Credentials();
                LocalizerContext        ctxt2      = new LocalizerContext("yak", container2, creds2);
                ContainerId             container3 = GetMockContainer(3L);
                LocalResourceVisibility vis3       = LocalResourceVisibility.Private;
                Credentials             creds3     = new Credentials();
                LocalizerContext        ctxt3      = new LocalizerContext("yak", container3, creds3);
                local.Handle(new ResourceRequestEvent(rsrcA, vis2, ctxt2));
                local.Handle(new ResourceRequestEvent(rsrcA, vis3, ctxt3));
                dispatcher.Await();
                TestLocalizedResource.LocalizerEventMatcher matchesL2Req = new TestLocalizedResource.LocalizerEventMatcher
                                                                               (container2, creds2, vis2, LocalizerEventType.RequestResourceLocalization);
                Org.Mockito.Mockito.Verify(localizerBus).Handle(Matchers.ArgThat(matchesL2Req));
                TestLocalizedResource.LocalizerEventMatcher matchesL3Req = new TestLocalizedResource.LocalizerEventMatcher
                                                                               (container3, creds3, vis3, LocalizerEventType.RequestResourceLocalization);
                Org.Mockito.Mockito.Verify(localizerBus).Handle(Matchers.ArgThat(matchesL3Req));
                // Successful localization. verify notification C2, C3
                Path locA = new Path("file:///cache/rsrcA");
                local.Handle(new ResourceLocalizedEvent(rsrcA, locA, 10));
                dispatcher.Await();
                TestLocalizedResource.ContainerEventMatcher matchesC2Localized = new TestLocalizedResource.ContainerEventMatcher
                                                                                     (container2, ContainerEventType.ResourceLocalized);
                TestLocalizedResource.ContainerEventMatcher matchesC3Localized = new TestLocalizedResource.ContainerEventMatcher
                                                                                     (container3, ContainerEventType.ResourceLocalized);
                Org.Mockito.Mockito.Verify(containerBus).Handle(Matchers.ArgThat(matchesC2Localized
                                                                                 ));
                Org.Mockito.Mockito.Verify(containerBus).Handle(Matchers.ArgThat(matchesC3Localized
                                                                                 ));
                NUnit.Framework.Assert.AreEqual(ResourceState.Localized, local.GetState());
                // Register C4, verify notification
                ContainerId             container4 = GetMockContainer(4L);
                Credentials             creds4     = new Credentials();
                LocalizerContext        ctxt4      = new LocalizerContext("yak", container4, creds4);
                LocalResourceVisibility vis4       = LocalResourceVisibility.Private;
                local.Handle(new ResourceRequestEvent(rsrcA, vis4, ctxt4));
                dispatcher.Await();
                TestLocalizedResource.ContainerEventMatcher matchesC4Localized = new TestLocalizedResource.ContainerEventMatcher
                                                                                     (container4, ContainerEventType.ResourceLocalized);
                Org.Mockito.Mockito.Verify(containerBus).Handle(Matchers.ArgThat(matchesC4Localized
                                                                                 ));
                NUnit.Framework.Assert.AreEqual(ResourceState.Localized, local.GetState());
            }
            finally
            {
                dispatcher.Stop();
            }
        }