use of io.kubernetes.client.openapi.models.V1Pod in project java by kubernetes-client.
the class DefaultSharedIndexInformerWireMockTest method testNamespacedPodInformerNormalBehavior.
@Test
public void testNamespacedPodInformerNormalBehavior() throws InterruptedException {
CoreV1Api coreV1Api = new CoreV1Api(client);
String startRV = "1000";
String endRV = "1001";
V1PodList podList = new V1PodList().metadata(new V1ListMeta().resourceVersion(startRV)).items(Arrays.asList());
stubFor(get(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(podList))));
Watch.Response<V1Pod> watchResponse = new Watch.Response<>(EventType.ADDED.name(), new V1Pod().metadata(new V1ObjectMeta().namespace(namespace).name(podName).resourceVersion(endRV)));
stubFor(get(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("true")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(watchResponse))));
SharedInformerFactory factory = new SharedInformerFactory();
SharedIndexInformer<V1Pod> podInformer = factory.sharedIndexInformerFor((CallGeneratorParams params) -> {
try {
return coreV1Api.listNamespacedPodCall(namespace, null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
} catch (ApiException e) {
throw new RuntimeException(e);
}
}, V1Pod.class, V1PodList.class);
AtomicBoolean foundExistingPod = new AtomicBoolean(false);
podInformer.addEventHandler(new ResourceEventHandler<V1Pod>() {
@Override
public void onAdd(V1Pod obj) {
if (podName.equals(obj.getMetadata().getName()) && namespace.equals(obj.getMetadata().getNamespace())) {
foundExistingPod.set(true);
}
}
@Override
public void onUpdate(V1Pod oldObj, V1Pod newObj) {
}
@Override
public void onDelete(V1Pod obj, boolean deletedFinalStateUnknown) {
}
});
factory.startAllRegisteredInformers();
Thread.sleep(1000);
assertEquals(true, foundExistingPod.get());
assertEquals(endRV, podInformer.lastSyncResourceVersion());
verify(1, getRequestedFor(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")));
verify(moreThan(1), getRequestedFor(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("true")));
factory.stopAllRegisteredInformers();
}
use of io.kubernetes.client.openapi.models.V1Pod in project java by kubernetes-client.
the class DefaultSharedIndexInformerWireMockTest method testInformerReListingOnListForbidden.
@Test
public void testInformerReListingOnListForbidden() throws InterruptedException {
CoreV1Api coreV1Api = new CoreV1Api(client);
stubFor(get(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")).willReturn(aResponse().withStatus(403).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(new V1Status().apiVersion("v1").kind("Status").code(403).reason("RBAC forbidden")))));
SharedInformerFactory factory = new SharedInformerFactory();
SharedIndexInformer<V1Pod> podInformer = factory.sharedIndexInformerFor((CallGeneratorParams params) -> {
try {
return coreV1Api.listNamespacedPodCall(namespace, null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
} catch (ApiException e) {
throw new RuntimeException(e);
}
}, V1Pod.class, V1PodList.class);
factory.startAllRegisteredInformers();
// Sleep mroe than 1s so that informer can perform multiple rounds of list-watch
Thread.sleep(3000);
verify(moreThan(1), getRequestedFor(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")));
factory.stopAllRegisteredInformers();
}
use of io.kubernetes.client.openapi.models.V1Pod in project java by kubernetes-client.
the class CacheTest method data.
@Parameterized.Parameters
public static Collection data() {
V1Pod normalPod = new V1Pod();
V1ObjectMeta normalPodMeta = new V1ObjectMeta();
normalPodMeta.setName("foo");
normalPodMeta.setNamespace("default");
normalPod.setMetadata(normalPodMeta);
V1Pod missingNamespacePod = new V1Pod();
V1ObjectMeta missingNamespacePodMeta = new V1ObjectMeta();
missingNamespacePodMeta.setName("foo");
missingNamespacePodMeta.setNamespace(null);
missingNamespacePod.setMetadata(missingNamespacePodMeta);
V1Pod missingNamePod = new V1Pod();
V1ObjectMeta missingNamePodMeta = new V1ObjectMeta();
missingNamePodMeta.setName(null);
missingNamePodMeta.setNamespace("default");
missingNamePod.setMetadata(missingNamePodMeta);
return Arrays.asList(new Object[][] { { normalPod, "io.kubernetes.client.openapi.models.V1Pod" }, { missingNamespacePod, "io.kubernetes.client.openapi.models.V1Pod" }, { missingNamePod, "io.kubernetes.client.openapi.models.V1Pod" }, { null, "null" } });
}
use of io.kubernetes.client.openapi.models.V1Pod in project java by kubernetes-client.
the class CacheTest method testMultiIndexFuncCacheStore.
@Test
public void testMultiIndexFuncCacheStore() {
String testIndexFuncName = "test-idx-func";
Cache<V1Pod> podCache = new Cache<>();
podCache.addIndexFunc(testIndexFuncName, (V1Pod pod) -> {
return Arrays.asList(pod.getSpec().getNodeName());
});
V1Pod testPod = new V1Pod().metadata(new V1ObjectMeta().namespace("ns").name("n")).spec(new V1PodSpec().nodeName("node1"));
podCache.add(testPod);
List<V1Pod> namespaceIndexedPods = podCache.byIndex(Caches.NAMESPACE_INDEX, "ns");
assertEquals(1, namespaceIndexedPods.size());
List<V1Pod> nodeNameIndexedPods = podCache.byIndex(testIndexFuncName, "node1");
assertEquals(1, nodeNameIndexedPods.size());
}
use of io.kubernetes.client.openapi.models.V1Pod in project java by kubernetes-client.
the class YamlTest method testDateTimeRoundTrip.
@Test
public void testDateTimeRoundTrip() {
// This test verifies that its fixed.
try {
String data = Resources.toString(CREATED_TIMESTAMP_FILE, UTF_8);
V1Pod pod = Yaml.loadAs(data, V1Pod.class);
String output = Yaml.dump(pod);
V1Pod pod2 = Yaml.loadAs(output, V1Pod.class);
assertEquals(pod, pod2);
} catch (Exception ex) {
assertNull("Unexpected exception: " + ex.toString(), ex);
}
}
Aggregations