From e2cd5fa9f63ac863314973863733f7ca5db82dae Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Fri, 16 Jul 2021 13:24:02 +0300 Subject: [PATCH] fixup! fix: Add tests for the kubernetes secrets role --- .../KubernetesNamespaceFactoryTest.java | 70 ++++++++++++++++--- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java index 9a20de68bc..ecfa6a976a 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java @@ -16,6 +16,7 @@ import static java.util.Collections.singletonList; import static org.eclipse.che.api.workspace.shared.Constants.WORKSPACE_INFRASTRUCTURE_NAMESPACE_ATTRIBUTE; import static org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta.DEFAULT_ATTRIBUTE; import static org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta.PHASE_ATTRIBUTE; +import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.AbstractWorkspaceServiceAccount.SECRETS_ROLE_NAME; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory.NAMESPACE_TEMPLATE_ATTRIBUTE; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyMap; @@ -43,6 +44,7 @@ import io.fabric8.kubernetes.api.model.NamespaceList; import io.fabric8.kubernetes.api.model.ServiceAccountList; import io.fabric8.kubernetes.api.model.Status; import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBuilder; +import io.fabric8.kubernetes.api.model.rbac.PolicyRule; import io.fabric8.kubernetes.api.model.rbac.Role; import io.fabric8.kubernetes.api.model.rbac.RoleBindingList; import io.fabric8.kubernetes.api.model.rbac.RoleList; @@ -57,6 +59,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -654,17 +657,6 @@ public class KubernetesNamespaceFactoryTest { Sets.newHashSet("workspace-view", "workspace-metrics", "exec", "workspace-secrets"), roles.getItems().stream().map(r -> r.getMetadata().getName()).collect(Collectors.toSet())); RoleBindingList bindings = k8sClient.rbac().roleBindings().inNamespace("workspace123").list(); - assertEquals( - roles - .getItems() - .stream() - .map(r -> r.getRules().get(0).getVerbs()) - .collect(Collectors.toSet()), - Sets.newHashSet( - singletonList("create"), - singletonList("list"), - Arrays.asList("list", "get", "watch"), - Arrays.asList("list", "create", "delete"))); assertEquals( bindings .getItems() @@ -680,6 +672,62 @@ public class KubernetesNamespaceFactoryTest { "serviceAccount-secrets")); } + @Test + public void shouldCreateAndBindSecretsRole() throws Exception { + // given + namespaceFactory = + spy( + new KubernetesNamespaceFactory( + "serviceAccount", + "cr2, cr3", + "-che", + true, + true, + NAMESPACE_LABELS, + NAMESPACE_ANNOTATIONS, + clientFactory, + cheClientFactory, + userManager, + preferenceManager, + pool)); + KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class); + when(toReturnNamespace.getWorkspaceId()).thenReturn("workspace123"); + when(toReturnNamespace.getName()).thenReturn("workspace123"); + doReturn(toReturnNamespace).when(namespaceFactory).doCreateNamespaceAccess(any(), any()); + when(clientFactory.create(any())).thenReturn(k8sClient); + + // when + RuntimeIdentity identity = + new RuntimeIdentityImpl("workspace123", null, USER_ID, "workspace123"); + namespaceFactory.getOrCreate(identity); + + // then + Optional roleOptional = + k8sClient + .rbac() + .roles() + .inNamespace("workspace123") + .list() + .getItems() + .stream() + .filter(r -> r.getMetadata().getName().equals(SECRETS_ROLE_NAME)) + .findAny(); + assertTrue(roleOptional.isPresent()); + PolicyRule rule = roleOptional.get().getRules().get(0); + assertEquals(rule.getResources(), singletonList("secrets")); + assertEquals(rule.getApiGroups(), singletonList("")); + assertEquals(rule.getVerbs(), Arrays.asList("list", "create", "delete")); + assertTrue( + k8sClient + .rbac() + .roleBindings() + .inNamespace("workspace123") + .list() + .getItems() + .stream() + .anyMatch(rb -> rb.getMetadata().getName().equals("serviceAccount-secrets"))); + } + @Test public void shouldCreateExecAndViewRolesAndBindings() throws Exception { // given