X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-backend%2Fsrc%2Ftest%2Fjava%2Forg%2Foransc%2Fric%2Fportal%2Fdashboard%2Fconfig%2FCaasIngressMockConfiguration.java;h=b9cbaf9092b33fb0ffa6e1f3ddb0a05eb6ea3be7;hb=a4c4e6ac19b6b36038bf2ec5bca54f1ead616bfc;hp=c7535229d3a8937e8a1cd0ff27bc1ef9232feb77;hpb=55472d9367cf229b2b87a625a8aa1dfb822cbaad;p=portal%2Fric-dashboard.git diff --git a/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/CaasIngressMockConfiguration.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/CaasIngressMockConfiguration.java index c7535229..b9cbaf90 100644 --- a/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/CaasIngressMockConfiguration.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/CaasIngressMockConfiguration.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * O-RAN-SC * %% - * Copyright (C) 2019 AT&T Intellectual Property and Nokia + * Copyright (C) 2019 AT&T Intellectual Property * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,17 +19,18 @@ */ package org.oransc.ric.portal.dashboard.config; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.lang.invoke.MethodHandles; import org.oransc.ric.portal.dashboard.k8sapi.SimpleKubernetesClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -39,64 +40,53 @@ import org.springframework.context.annotation.Profile; * Creates mock implementations of Kubernetes clients that answer requests with * sample data read from the filesystem. */ -@Profile("test") @Configuration -public class CaasIngressMockConfiguration { +@Profile("test") +public class CaasIngressMockConfiguration extends AbstractMockConfiguration { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); // Simulate remote method delay for UI testing - @Value("${mock.config.delay:0}") private int delayMs; - private final String auxPods; - private final String pltPods; - - public CaasIngressMockConfiguration() throws IOException { - logger.info("Configuring mock CAAS-Ingres clients"); - // Files in src/test/resources - auxPods = readDataFromPath("caas-ingress-ricaux-pods.json"); - pltPods = readDataFromPath("caas-ingress-ricplt-pods.json"); - } - - private String readDataFromPath(String path) throws IOException { - InputStream is = MethodHandles.lookup().lookupClass().getClassLoader().getResourceAsStream(path); - if (is == null) { - String msg = "Failed to find resource on classpath: " + path; - logger.error(msg); - throw new RuntimeException(msg); - } - InputStreamReader reader = new InputStreamReader(is, "UTF-8"); - StringBuilder sb = new StringBuilder(); - char[] buf = new char[8192]; - int i; - while ((i = reader.read(buf)) > 0) - sb.append(buf, 0, i); - reader.close(); - is.close(); - return sb.toString(); + @Autowired + public CaasIngressMockConfiguration(@Value("${mock.config.delay:0}") int delayMs) { + logger.debug("ctor: configured with delay {}", delayMs); + this.delayMs = delayMs; } - @Bean - // Use the same name as regular configuration - public SimpleKubernetesClient ciAuxApi() throws IOException { + private SimpleKubernetesClient simpleKubernetesClient(String instanceKey) throws IOException { + // File in src/test/resources + String pltPods; + if (RICInstanceMockConfiguration.INSTANCE_KEY_1.equals(instanceKey)) + pltPods = readDataFromPath("caas-ingress-ricplt-pods-1.json"); + else + pltPods = readDataFromPath("caas-ingress-ricplt-pods-2.json"); SimpleKubernetesClient mockClient = mock(SimpleKubernetesClient.class); doAnswer(inv -> { - logger.debug("listPods for aux"); - return auxPods; - }).when(mockClient).listPods("ricaux"); + String ns = inv.getArgument(0); + logger.debug("listPods for namespace {}", ns); + if (delayMs > 0) { + logger.debug("listPods sleeping {}", delayMs); + Thread.sleep(delayMs); + } + if ("ricplt".equals(ns)) + return pltPods; + else + throw new IllegalArgumentException("Fake server failure"); + }).when(mockClient).listPods(any(String.class)); return mockClient; } @Bean - // Use the same name as regular configuration - public SimpleKubernetesClient ciPltApi() throws IOException { - SimpleKubernetesClient mockClient = mock(SimpleKubernetesClient.class); - doAnswer(inv -> { - logger.debug("listPods for plt"); - return pltPods; - }).when(mockClient).listPods("ricplt"); - return mockClient; + // The bean (method) name must be globally unique + public SimpleKubernetesClientBuilder simpleKubernetesClientBuilder() throws IOException { + final SimpleKubernetesClientBuilder mockBuilder = mock(SimpleKubernetesClientBuilder.class); + for (final String key : RICInstanceMockConfiguration.INSTANCE_KEYS) { + SimpleKubernetesClient client = simpleKubernetesClient(key); + when(mockBuilder.getSimpleKubernetesClient(key)).thenReturn(client); + } + return mockBuilder; } }