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.TestUtils;
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;
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 {
- SimpleKubernetesClient mockClient = mock(SimpleKubernetesClient.class);
- doAnswer(inv -> {
- logger.debug("listPods for aux");
- return auxPods;
- }).when(mockClient).listPods("ricaux");
- return mockClient;
- }
-
- @Bean
- // Use the same name as regular configuration
- public SimpleKubernetesClient ciPltApi() throws IOException {
+ private SimpleKubernetesClient simpleKubernetesClient(String instanceKey) throws IOException {
+ // File in src/test/resources
+ String podFile = RICInstanceMockConfiguration.INSTANCE_KEY_1.equals(instanceKey)
+ ? "caas-ingress-ricplt-pods-1.json"
+ : "caas-ingress-ricplt-pods-2.json";
+ String pltPods = TestUtils.readDataFromPath(podFile);
SimpleKubernetesClient mockClient = mock(SimpleKubernetesClient.class);
doAnswer(inv -> {
String ns = inv.<String>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 Exception("Fake server failure");
+ throw new IllegalArgumentException("Fake server failure");
}).when(mockClient).listPods(any(String.class));
return mockClient;
}
+ @Bean
+ // 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;
+ }
+
}