use of io.kubernetes.client.extended.controller.reconciler.Result in project java by kubernetes-client.
the class DefaultControllerTest method testControllerWontStartBeforeReady.
@Test(timeout = 90000)
public void testControllerWontStartBeforeReady() throws InterruptedException {
Request request1 = new Request("test1");
final Semaphore latch = new Semaphore(1);
when(mockReconciler.reconcile(request1)).thenAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
latch.release();
return new Result(false);
}
});
latch.acquire();
AtomicBoolean ready = new AtomicBoolean(false);
DefaultController testController = new DefaultController("", mockReconciler, workQueue, () -> ready.get());
testController.setWorkerCount(1);
testController.setWorkerThreadPool(Executors.newScheduledThreadPool(1));
testController.setReadyCheckInternal(Duration.ofMillis(100));
controllerThead.submit(testController::run);
// emit an event when the controller hasn't been ready
workQueue.add(request1);
// As above wrt sleep
cooldown();
verify(mockReconciler, times(0)).reconcile(request1);
ready.set(true);
latch.acquire();
verify(mockReconciler, times(1)).reconcile(request1);
}
use of io.kubernetes.client.extended.controller.reconciler.Result in project java by kubernetes-client.
the class DefaultControllerBuilderTest method testBuildWatchEventNotificationShouldWork.
@Test
public void testBuildWatchEventNotificationShouldWork() throws InterruptedException {
V1PodList podList = new V1PodList().metadata(new V1ListMeta().resourceVersion("0")).items(Arrays.asList(new V1Pod().metadata(new V1ObjectMeta().name("test-pod1")).spec(new V1PodSpec().hostname("hostname1"))));
stubFor(get(urlPathEqualTo("/api/v1/pods")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(podList))));
CoreV1Api api = new CoreV1Api(client);
SharedIndexInformer<V1Pod> podInformer = informerFactory.sharedIndexInformerFor((CallGeneratorParams params) -> {
return api.listPodForAllNamespacesCall(null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
}, V1Pod.class, V1PodList.class);
List<Request> keyFuncReceivingRequests = new ArrayList<>();
Function<V1Pod, Request> podKeyFunc = (V1Pod pod) -> {
// twisting pod name key
Request request = new Request(pod.getSpec().getHostname() + "/" + pod.getMetadata().getName());
keyFuncReceivingRequests.add(request);
return request;
};
List<Request> controllerReceivingRequests = new ArrayList<>();
final Semaphore latch = new Semaphore(1);
latch.acquire();
final Controller testController = ControllerBuilder.defaultBuilder(informerFactory).withReconciler(new Reconciler() {
@Override
public Result reconcile(Request request) {
controllerReceivingRequests.add(request);
latch.release();
return new Result(false);
}
}).watch((workQueue) -> ControllerBuilder.controllerWatchBuilder(V1Pod.class, workQueue).withWorkQueueKeyFunc(podKeyFunc).build()).build();
controllerThead.submit(testController::run);
informerFactory.startAllRegisteredInformers();
// Wait for the request to be processed.
latch.acquire(1);
Request expectedRequest = new Request("hostname1/test-pod1");
assertEquals(1, keyFuncReceivingRequests.size());
assertEquals(expectedRequest, keyFuncReceivingRequests.get(0));
assertEquals(1, controllerReceivingRequests.size());
assertEquals(expectedRequest, controllerReceivingRequests.get(0));
}
Aggregations