|
21 | 21 | package eu.openanalytics.containerproxy.test.proxy; |
22 | 22 |
|
23 | 23 | import eu.openanalytics.containerproxy.ContainerProxyApplication; |
| 24 | +import eu.openanalytics.containerproxy.ContainerProxyException; |
24 | 25 | import eu.openanalytics.containerproxy.backend.IContainerBackend; |
25 | 26 | import eu.openanalytics.containerproxy.backend.kubernetes.KubernetesBackend; |
26 | 27 | import eu.openanalytics.containerproxy.model.runtime.Proxy; |
|
56 | 57 | import org.springframework.context.annotation.Bean; |
57 | 58 | import org.springframework.context.annotation.Primary; |
58 | 59 | import org.springframework.core.env.Environment; |
59 | | -import org.springframework.session.web.http.DefaultCookieSerializer; |
60 | 60 | import org.springframework.test.context.ActiveProfiles; |
61 | 61 | import org.springframework.test.context.ContextConfiguration; |
62 | 62 |
|
63 | 63 | import javax.inject.Inject; |
64 | 64 | import java.io.ByteArrayInputStream; |
65 | 65 | import java.net.URI; |
66 | 66 | import java.util.Collections; |
| 67 | +import java.util.HashMap; |
67 | 68 | import java.util.List; |
68 | 69 | import java.util.Map; |
| 70 | +import java.util.UUID; |
69 | 71 | import java.util.stream.Collectors; |
70 | 72 |
|
71 | 73 |
|
@@ -1496,6 +1498,115 @@ public void advancedRuntimeLabels() { |
1496 | 1498 | }); |
1497 | 1499 | } |
1498 | 1500 |
|
| 1501 | + @Test |
| 1502 | + public void launchProxyWithParameters() { |
| 1503 | + setup((client, namespace, overriddenNamespace) -> { |
| 1504 | + ProxySpec spec = proxyService.getProxySpec("parameters"); |
| 1505 | + Proxy proxy = proxyService.startProxy(spec, true, null, |
| 1506 | + UUID.randomUUID().toString(), |
| 1507 | + new HashMap<String, String>() {{ |
| 1508 | + put("environment", "base_r"); |
| 1509 | + put("version", "4.0.5"); |
| 1510 | + put("memory", "2G"); |
| 1511 | + }}); |
| 1512 | + |
| 1513 | + PodList podList = client.pods().inNamespace(namespace).list(); |
| 1514 | + Assertions.assertEquals(1, podList.getItems().size()); |
| 1515 | + Pod pod = podList.getItems().get(0); |
| 1516 | + ContainerStatus container = pod.getStatus().getContainerStatuses().get(0); |
| 1517 | + |
| 1518 | + Assertions.assertEquals(true, container.getReady()); |
| 1519 | + Assertions.assertEquals("ledfan/rstudio_base_r:4_0_5", container.getImage()); |
| 1520 | + Assertions.assertEquals("2G", pod.getSpec().getContainers().get(0).getResources().getLimits().get("memory").getAmount()); |
| 1521 | + List<EnvVar> envList = pod.getSpec().getContainers().get(0).getEnv(); |
| 1522 | + Map<String, EnvVar> env = envList.stream().collect(Collectors.toMap(EnvVar::getName, e -> e)); |
| 1523 | + |
| 1524 | + Assertions.assertTrue(env.containsKey("ENVIRONMENT")); |
| 1525 | + Assertions.assertEquals("ledfan/rstudio_base_r", env.get("ENVIRONMENT").getValue()); |
| 1526 | + Assertions.assertTrue(env.containsKey("VERSION")); |
| 1527 | + Assertions.assertEquals("4_0_5", env.get("VERSION").getValue()); |
| 1528 | + Assertions.assertTrue(env.containsKey("MEMORY")); |
| 1529 | + Assertions.assertEquals("2G", env.get("MEMORY").getValue()); |
| 1530 | + Assertions.assertTrue(env.containsKey("VALUESET_NAME")); |
| 1531 | + Assertions.assertEquals("the-first-value-set", env.get("VALUESET_NAME").getValue()); |
| 1532 | + |
| 1533 | + proxyService.stopProxy(proxy, false, true); |
| 1534 | + |
| 1535 | + // Give Kube the time to clean |
| 1536 | + Thread.sleep(2000); |
| 1537 | + |
| 1538 | + // all pods should be deleted |
| 1539 | + podList = client.pods().inNamespace(namespace).list(); |
| 1540 | + Assertions.assertEquals(0, podList.getItems().size()); |
| 1541 | + |
| 1542 | + Assertions.assertEquals(0, proxyService.getProxies(null, true).size()); |
| 1543 | + }); |
| 1544 | + } |
| 1545 | + |
| 1546 | + @Test |
| 1547 | + public void launchProxyWithParametersWithNullValueSetName() { |
| 1548 | + setup((client, namespace, overriddenNamespace) -> { |
| 1549 | + ProxySpec spec = proxyService.getProxySpec("parameters-null"); |
| 1550 | + Proxy proxy = proxyService.startProxy(spec, true, null, |
| 1551 | + UUID.randomUUID().toString(), |
| 1552 | + new HashMap<String, String>() {{ |
| 1553 | + put("environment", "base_r"); |
| 1554 | + put("version", "4.0.5"); |
| 1555 | + put("memory", "2G"); |
| 1556 | + }}); |
| 1557 | + |
| 1558 | + PodList podList = client.pods().inNamespace(namespace).list(); |
| 1559 | + Assertions.assertEquals(1, podList.getItems().size()); |
| 1560 | + Pod pod = podList.getItems().get(0); |
| 1561 | + ContainerStatus container = pod.getStatus().getContainerStatuses().get(0); |
| 1562 | + |
| 1563 | + Assertions.assertEquals(true, container.getReady()); |
| 1564 | + Assertions.assertEquals("ledfan/rstudio_base_r:4_0_5", container.getImage()); |
| 1565 | + Assertions.assertEquals("2G", pod.getSpec().getContainers().get(0).getResources().getLimits().get("memory").getAmount()); |
| 1566 | + List<EnvVar> envList = pod.getSpec().getContainers().get(0).getEnv(); |
| 1567 | + Map<String, EnvVar> env = envList.stream().collect(Collectors.toMap(EnvVar::getName, e -> e)); |
| 1568 | + |
| 1569 | + Assertions.assertTrue(env.containsKey("VALUESET_NAME")); |
| 1570 | + Assertions.assertNull( env.get("VALUESET_NAME").getValue()); |
| 1571 | + |
| 1572 | + proxyService.stopProxy(proxy, false, true); |
| 1573 | + |
| 1574 | + // Give Kube the time to clean |
| 1575 | + Thread.sleep(2000); |
| 1576 | + |
| 1577 | + // all pods should be deleted |
| 1578 | + podList = client.pods().inNamespace(namespace).list(); |
| 1579 | + Assertions.assertEquals(0, podList.getItems().size()); |
| 1580 | + |
| 1581 | + Assertions.assertEquals(0, proxyService.getProxies(null, true).size()); |
| 1582 | + }); |
| 1583 | + } |
| 1584 | + |
| 1585 | + @Test |
| 1586 | + public void launchProxyWithParametersWithError() { |
| 1587 | + setup((client, namespace, overriddenNamespace) -> { |
| 1588 | + ProxySpec spec = proxyService.getProxySpec("parameters-error"); |
| 1589 | + |
| 1590 | + Assertions.assertThrows(ContainerProxyException.class, () -> { |
| 1591 | + proxyService.startProxy(spec, true, null, |
| 1592 | + UUID.randomUUID().toString(), |
| 1593 | + new HashMap<String, String>() {{ |
| 1594 | + put("environment", "base_r"); |
| 1595 | + put("version", "4.0.5"); |
| 1596 | + put("memory", "2G"); |
| 1597 | + }}); |
| 1598 | + }, "The parameter with id \"non-existing-parameter\" does not exist!"); |
| 1599 | + |
| 1600 | + Thread.sleep(2000); |
| 1601 | + |
| 1602 | + // all pods should be deleted |
| 1603 | + PodList podList = client.pods().inNamespace(namespace).list(); |
| 1604 | + Assertions.assertEquals(0, podList.getItems().size()); |
| 1605 | + |
| 1606 | + Assertions.assertEquals(0, proxyService.getProxies(null, true).size()); |
| 1607 | + }); |
| 1608 | + } |
| 1609 | + |
1499 | 1610 |
|
1500 | 1611 | public static class TestConfiguration { |
1501 | 1612 | @Bean |
|
0 commit comments