// mock resource
LocalResource apiRsrc = createMockResource();
final ContainerId container0 = getMockContainer(0);
final Credentials creds0 = new Credentials();
final LocalResourceVisibility vis0 = LocalResourceVisibility.PRIVATE;
final 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
LocalizerEventMatcher matchesL0Req =
new LocalizerEventMatcher(container0, creds0, vis0,
LocalizerEventType.REQUEST_RESOURCE_LOCALIZATION);
verify(localizerBus).handle(argThat(matchesL0Req));
assertEquals(ResourceState.DOWNLOADING, local.getState());
// Register C1, verify request event
final Credentials creds1 = new Credentials();
final ContainerId container1 = getMockContainer(1);
final LocalizerContext ctxt1 =
new LocalizerContext("yak", container1, creds1);
final LocalResourceVisibility vis1 = LocalResourceVisibility.PUBLIC;
local.handle(new ResourceRequestEvent(rsrcA, vis1, ctxt1));
dispatcher.await();
LocalizerEventMatcher matchesL1Req =
new LocalizerEventMatcher(container1, creds1, vis1,
LocalizerEventType.REQUEST_RESOURCE_LOCALIZATION);
verify(localizerBus).handle(argThat(matchesL1Req));
// Release C0 container localization, verify no notification
local.handle(new ResourceReleaseEvent(rsrcA, container0));
dispatcher.await();
verify(containerBus, never()).handle(isA(ContainerEvent.class));
assertEquals(ResourceState.DOWNLOADING, local.getState());
// Release C1 container localization, verify no notification
local.handle(new ResourceReleaseEvent(rsrcA, container1));
dispatcher.await();
verify(containerBus, never()).handle(isA(ContainerEvent.class));
assertEquals(ResourceState.INIT, local.getState());
// Register C2, C3
final ContainerId container2 = getMockContainer(2);
final LocalResourceVisibility vis2 = LocalResourceVisibility.PRIVATE;
final Credentials creds2 = new Credentials();
final LocalizerContext ctxt2 =
new LocalizerContext("yak", container2, creds2);
final ContainerId container3 = getMockContainer(3);
final LocalResourceVisibility vis3 = LocalResourceVisibility.PRIVATE;
final Credentials creds3 = new Credentials();
final LocalizerContext ctxt3 =
new LocalizerContext("yak", container3, creds3);
local.handle(new ResourceRequestEvent(rsrcA, vis2, ctxt2));
local.handle(new ResourceRequestEvent(rsrcA, vis3, ctxt3));
dispatcher.await();
LocalizerEventMatcher matchesL2Req =
new LocalizerEventMatcher(container2, creds2, vis2,
LocalizerEventType.REQUEST_RESOURCE_LOCALIZATION);
verify(localizerBus).handle(argThat(matchesL2Req));
LocalizerEventMatcher matchesL3Req =
new LocalizerEventMatcher(container3, creds3, vis3,
LocalizerEventType.REQUEST_RESOURCE_LOCALIZATION);
verify(localizerBus).handle(argThat(matchesL3Req));
// Successful localization. verify notification C2, C3
Path locA = new Path("file:///cache/rsrcA");
local.handle(new ResourceLocalizedEvent(rsrcA, locA, 10));
dispatcher.await();
ContainerEventMatcher matchesC2Localized =
new ContainerEventMatcher(container2,
ContainerEventType.RESOURCE_LOCALIZED);
ContainerEventMatcher matchesC3Localized =
new ContainerEventMatcher(container3,
ContainerEventType.RESOURCE_LOCALIZED);
verify(containerBus).handle(argThat(matchesC2Localized));
verify(containerBus).handle(argThat(matchesC3Localized));
assertEquals(ResourceState.LOCALIZED, local.getState());
// Register C4, verify notification
final ContainerId container4 = getMockContainer(4);
final Credentials creds4 = new Credentials();
final LocalizerContext ctxt4 =
new LocalizerContext("yak", container4, creds4);
final LocalResourceVisibility vis4 = LocalResourceVisibility.PRIVATE;
local.handle(new ResourceRequestEvent(rsrcA, vis4, ctxt4));
dispatcher.await();
ContainerEventMatcher matchesC4Localized =
new ContainerEventMatcher(container4,
ContainerEventType.RESOURCE_LOCALIZED);