Search in sources :

Example 11 with Action

use of io.fabric8.kubernetes.client.Watcher.Action in project kubernetes-client by fabric8io.

the class WatchIT method testWatchFailureHandling.

@Test
public void testWatchFailureHandling() throws InterruptedException {
    String currentNamespace = session.getNamespace();
    String name = "sample-configmap-watch";
    Resource<ConfigMap> configMapClient = client.configMaps().inNamespace(currentNamespace).withName(name);
    configMapClient.create(new ConfigMapBuilder().withNewMetadata().withName(name).endMetadata().build());
    final CountDownLatch eventLatch = new CountDownLatch(1);
    final CountDownLatch modifyLatch = new CountDownLatch(1);
    final AtomicBoolean inMethod = new AtomicBoolean();
    final CountDownLatch closeLatch = new CountDownLatch(1);
    final AtomicBoolean concurrent = new AtomicBoolean();
    Watch watch = configMapClient.watch(new Watcher<ConfigMap>() {

        @Override
        public void eventReceived(Action action, ConfigMap pod) {
            eventLatch.countDown();
            if (action.equals(Action.MODIFIED)) {
                if (inMethod.getAndSet(true)) {
                    concurrent.set(true);
                    modifyLatch.countDown();
                }
                try {
                    // introduce a delay to cause the ping to terminate the connection
                    // if this doesn't work reliably, then an alternative would be to
                    // restart the apiserver
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                    throw new AssertionError(e);
                }
                modifyLatch.countDown();
                inMethod.set(false);
            }
        }

        @Override
        public void onClose(WatcherException cause) {
        }

        @Override
        public void onClose() {
            closeLatch.countDown();
            logger.info("watch closed...");
        }
    });
    configMapClient.patch(PatchContext.of(PatchType.STRATEGIC_MERGE), new ConfigMapBuilder().withNewMetadata().addToLabels("foo", "bar").endMetadata().build());
    configMapClient.patch(PatchContext.of(PatchType.STRATEGIC_MERGE), new ConfigMapBuilder().withNewMetadata().addToLabels("foo", "bar1").endMetadata().build());
    assertTrue(eventLatch.await(10, TimeUnit.SECONDS));
    assertTrue(modifyLatch.await(15, TimeUnit.SECONDS));
    assertFalse(concurrent.get());
    watch.close();
    assertTrue(closeLatch.await(30, TimeUnit.SECONDS));
}
Also used : ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) CountDownLatch(java.util.concurrent.CountDownLatch) WatcherException(io.fabric8.kubernetes.client.WatcherException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ConfigMapBuilder(io.fabric8.kubernetes.api.model.ConfigMapBuilder) Watch(io.fabric8.kubernetes.client.Watch) Test(org.junit.Test)

Example 12 with Action

use of io.fabric8.kubernetes.client.Watcher.Action in project kubernetes-client by fabric8io.

the class CustomResourceTest method testWatchWithListOptions.

@Test
@DisplayName("Should be able to test watch with ListOptions provided")
void testWatchWithListOptions() throws IOException, InterruptedException {
    // Given
    server.expect().withPath("/apis/test.fabric8.io/v1alpha1/namespaces/ns1/hellos?resourceVersion=1003&timeoutSeconds=30&allowWatchBookmarks=true&watch=true").andUpgradeToWebSocket().open().waitFor(WATCH_EVENT_PERIOD).andEmit("{\"type\":\"ADDED\", \"object\":{\"kind\": \"Hello\", \"metadata\": {\"resourceVersion\": 1003}}}").done().always();
    CountDownLatch anyEventReceived = new CountDownLatch(1);
    // When
    Watch watch = client.genericKubernetesResources(customResourceDefinitionContext).inNamespace("ns1").watch(new ListOptionsBuilder().withTimeoutSeconds(30L).withResourceVersion("1003").withAllowWatchBookmarks(true).build(), new Watcher<GenericKubernetesResource>() {

        @Override
        public void eventReceived(Action action, GenericKubernetesResource resource) {
            anyEventReceived.countDown();
        }

        @Override
        public void onClose(WatcherException cause) {
        }
    });
    // Then
    assertTrue(anyEventReceived.await(1, TimeUnit.SECONDS));
    watch.close();
}
Also used : Watch(io.fabric8.kubernetes.client.Watch) ListOptionsBuilder(io.fabric8.kubernetes.api.model.ListOptionsBuilder) CountDownLatch(java.util.concurrent.CountDownLatch) GenericKubernetesResource(io.fabric8.kubernetes.api.model.GenericKubernetesResource) WatcherException(io.fabric8.kubernetes.client.WatcherException) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 13 with Action

use of io.fabric8.kubernetes.client.Watcher.Action in project kubernetes-client by fabric8io.

the class CustomResourceTest method testWatchWithLabels.

@Test
@DisplayName("Should be able to watch with labelSelectors")
void testWatchWithLabels() throws IOException, InterruptedException {
    // Given
    server.expect().withPath("/apis/test.fabric8.io/v1alpha1/namespaces/ns1/hellos?labelSelector=" + Utils.toUrlEncoded("foo=bar") + "&allowWatchBookmarks=true&watch=true").andUpgradeToWebSocket().open().waitFor(WATCH_EVENT_PERIOD).andEmit("{\"type\":\"ADDED\", \"object\":{\"kind\": \"Hello\", \"metadata\": {\"resourceVersion\": 1}}}").done().always();
    CountDownLatch anyEventReceived = new CountDownLatch(1);
    // When
    Watch watch = client.genericKubernetesResources(customResourceDefinitionContext).inNamespace("ns1").withLabel("foo", "bar").watch(new Watcher<GenericKubernetesResource>() {

        @Override
        public void eventReceived(Action action, GenericKubernetesResource resource) {
            anyEventReceived.countDown();
        }

        @Override
        public void onClose(WatcherException cause) {
        }
    });
    // Then
    assertTrue(anyEventReceived.await(1, TimeUnit.SECONDS));
    watch.close();
}
Also used : Watch(io.fabric8.kubernetes.client.Watch) CountDownLatch(java.util.concurrent.CountDownLatch) GenericKubernetesResource(io.fabric8.kubernetes.api.model.GenericKubernetesResource) WatcherException(io.fabric8.kubernetes.client.WatcherException) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 14 with Action

use of io.fabric8.kubernetes.client.Watcher.Action in project kubernetes-client by fabric8io.

the class CustomResourceTest method testWatchAllResourceInNamespace.

@Test
@DisplayName("Should be able to watch some resource in a namespace")
void testWatchAllResourceInNamespace() throws IOException, InterruptedException {
    // Given
    server.expect().withPath("/apis/test.fabric8.io/v1alpha1/namespaces/ns1/hellos?allowWatchBookmarks=true&watch=true").andUpgradeToWebSocket().open().waitFor(WATCH_EVENT_PERIOD).andEmit("{\"type\":\"ADDED\", \"object\":{\"kind\": \"Hello\", \"metadata\": {\"resourceVersion\": 1}}}").done().always();
    CountDownLatch anyEventReceived = new CountDownLatch(1);
    // When
    Watch watch = client.genericKubernetesResources(customResourceDefinitionContext).inNamespace("ns1").watch(new Watcher<GenericKubernetesResource>() {

        @Override
        public void eventReceived(Action action, GenericKubernetesResource resource) {
            anyEventReceived.countDown();
        }

        @Override
        public void onClose(WatcherException cause) {
        }
    });
    // Then
    assertTrue(anyEventReceived.await(1, TimeUnit.SECONDS));
    watch.close();
}
Also used : Watch(io.fabric8.kubernetes.client.Watch) CountDownLatch(java.util.concurrent.CountDownLatch) GenericKubernetesResource(io.fabric8.kubernetes.api.model.GenericKubernetesResource) WatcherException(io.fabric8.kubernetes.client.WatcherException) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 15 with Action

use of io.fabric8.kubernetes.client.Watcher.Action in project kubernetes-client by fabric8io.

the class PodTest method testWatch.

@Test
void testWatch() throws InterruptedException {
    // Given
    // We start with a list
    Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withResourceVersion("1").endMetadata().build();
    server.expect().withPath("/api/v1/namespaces/test/pods").andReturn(200, new PodListBuilder().withNewMetadata().withResourceVersion("1").endMetadata().addToItems(pod1).build()).once();
    server.expect().withPath("/api/v1/namespaces/test/pods?fieldSelector=metadata.name%3Dpod1&allowWatchBookmarks=true&watch=true").andUpgradeToWebSocket().open().waitFor(50).andEmit(new WatchEvent(pod1, "DELETED")).done().always();
    final CountDownLatch deleteLatch = new CountDownLatch(1);
    final Watcher<Pod> watcher = new Watcher<Pod>() {

        @Override
        public void eventReceived(Action action, Pod resource) {
            if (action != Action.DELETED) {
                fail();
            }
            deleteLatch.countDown();
        }

        @Override
        public void onClose(WatcherException cause) {
        }
    };
    // When
    final Watch watch = client.pods().withName("pod1").watch(watcher);
    // Then
    assertTrue(deleteLatch.await(30, TimeUnit.SECONDS));
    watch.close();
}
Also used : PodListBuilder(io.fabric8.kubernetes.api.model.PodListBuilder) Pod(io.fabric8.kubernetes.api.model.Pod) PodBuilder(io.fabric8.kubernetes.api.model.PodBuilder) ExecWatch(io.fabric8.kubernetes.client.dsl.ExecWatch) Watch(io.fabric8.kubernetes.client.Watch) Watcher(io.fabric8.kubernetes.client.Watcher) WatchEvent(io.fabric8.kubernetes.api.model.WatchEvent) CountDownLatch(java.util.concurrent.CountDownLatch) WatcherException(io.fabric8.kubernetes.client.WatcherException) Test(org.junit.jupiter.api.Test)

Aggregations

WatcherException (io.fabric8.kubernetes.client.WatcherException)63 Watch (io.fabric8.kubernetes.client.Watch)48 KubernetesClientException (io.fabric8.kubernetes.client.KubernetesClientException)42 Watcher (io.fabric8.kubernetes.client.Watcher)35 Pod (io.fabric8.kubernetes.api.model.Pod)34 CountDownLatch (java.util.concurrent.CountDownLatch)27 KubernetesClient (io.fabric8.kubernetes.client.KubernetesClient)23 Test (org.junit.jupiter.api.Test)22 Map (java.util.Map)15 List (java.util.List)14 ArrayList (java.util.ArrayList)13 DisplayName (org.junit.jupiter.api.DisplayName)12 ConfigMap (io.fabric8.kubernetes.api.model.ConfigMap)11 Future (io.vertx.core.Future)11 ReconciliationLogger (io.strimzi.operator.common.ReconciliationLogger)10 GenericKubernetesResource (io.fabric8.kubernetes.api.model.GenericKubernetesResource)9 WatchEvent (io.fabric8.kubernetes.api.model.WatchEvent)9 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)9 Service (io.fabric8.kubernetes.api.model.Service)8 Annotations (io.strimzi.operator.common.Annotations)8