예제 #1
0
            // dispatcher not typed
            public override void Transition(LocalizedResource rsrc, ResourceEvent @event)
            {
                ResourceRequestEvent req       = (ResourceRequestEvent)@event;
                LocalizerContext     ctxt      = req.GetContext();
                ContainerId          container = ctxt.GetContainerId();

                [email protected](container);
                rsrc.dispatcher.GetEventHandler().Handle(new LocalizerResourceRequestEvent(rsrc,
                                                                                           req.GetVisibility(), ctxt, req.GetLocalResourceRequest().GetPattern()));
            }
예제 #2
0
        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();
            }
        }