Skip to content

Commit f89668b

Browse files
committed
test: Refactores Auth specific Integration Tests
1 parent ce918be commit f89668b

File tree

4 files changed

+36
-53
lines changed

4 files changed

+36
-53
lines changed

tests/src/test/java/com/marcnuri/yakc/AuthIT.java

+31-48
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
import com.marcnuri.yakc.model.io.k8s.api.core.v1.Secret;
2525
import com.marcnuri.yakc.model.io.k8s.api.core.v1.ServiceAccount;
2626
import org.junit.jupiter.api.BeforeAll;
27-
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
28-
import org.junit.jupiter.api.Order;
2927
import org.junit.jupiter.api.Test;
30-
import org.junit.jupiter.api.TestMethodOrder;
3128
import org.junit.jupiter.api.extension.ExtendWith;
3229

3330
import java.io.IOException;
@@ -38,68 +35,54 @@
3835
/**
3936
* Created by Marc Nuri on 2020-05-02.
4037
*/
41-
@TestMethodOrder(OrderAnnotation.class)
4238
@ExtendWith(KubernetesClientExtension.class)
4339
class AuthIT {
4440

4541
private static final String NAMESPACE = "default";
4642

47-
private static String secretName;
48-
private static String caData;
49-
private static String token;
43+
private static String nodeName;
5044

5145
@BeforeAll
52-
static void setUp() {
53-
secretName = null;
54-
caData = null;
55-
token = null;
56-
}
57-
58-
@Test
59-
@Order(1)
60-
void retrieveServiceAccount() throws IOException {
61-
// When
62-
final ServiceAccount sa = KC.create(CoreV1Api.class).listNamespacedServiceAccount(NAMESPACE)
63-
.stream().findFirst().orElse(null);
64-
// Then
65-
assertThat(sa).isNotNull();
66-
secretName = sa.getSecrets().stream().findFirst().map(ObjectReference::getName).orElse(null);
67-
}
68-
69-
@Test
70-
@Order(2)
71-
void retrieveSecretForServiceAccount() throws IOException {
72-
// When
73-
final Secret secret = KC.create(CoreV1Api.class).listNamespacedSecret(NAMESPACE)
74-
.stream()
75-
.filter(s -> s.getType().equals("kubernetes.io/service-account-token"))
76-
.filter(s -> s.getMetadata().getName().equals(secretName))
77-
.findAny().orElse(null);
78-
// Then
79-
assertThat(secret).isNotNull();
80-
assertThat(secret.getData()).containsKeys("ca.crt", "token");
81-
caData = secret.getData().get("ca.crt");
82-
token = secret.getData().get("token");
46+
static void setUp() throws IOException {
47+
nodeName = KC.create(CoreV1Api.class).listNode().stream().findFirst()
48+
.orElseThrow(() -> new IllegalStateException("Node not accessible with default client"))
49+
.getMetadata().getName();
8350
}
8451

8552
@Test
86-
@Order(3)
8753
void performTokenAuthInNewClient() throws IOException {
8854
// Given
55+
final Secret secret = retrieveSecretForServiceAccount(retrieveServiceAccountSecret());
8956
final Configuration configuration = Configuration.builder()
9057
.server(KC.getConfiguration().getServer())
91-
.certificateAuthorityData(caData)
92-
.token(token)
58+
.certificateAuthorityData(secret.getData().get("ca.crt"))
59+
.token(secret.getData().get("token"))
9360
.build();
94-
final KubernetesClient tokenClient = new KubernetesClient(configuration);
95-
final String accessibleTokenName = KC.create(CoreV1Api.class).listNode().stream().findFirst()
96-
.orElseThrow(() -> new IllegalStateException("Node not accessible with default client"))
97-
.getMetadata().getName();
9861
// When
99-
final Node node = tokenClient.create(CoreV1Api.class).listNode().stream().findFirst()
62+
final Node node = new KubernetesClient(configuration).create(CoreV1Api.class)
63+
.listNode().stream().findFirst()
10064
.orElse(null);
10165
// Then
102-
assertThat(node).isNotNull();
103-
assertThat(node.getMetadata().getName()).isEqualTo(accessibleTokenName);
66+
assertThat(node)
67+
.isNotNull()
68+
.hasFieldOrPropertyWithValue("metadata.name", nodeName);
69+
}
70+
71+
private String retrieveServiceAccountSecret() throws IOException {
72+
return KC.create(CoreV1Api.class).listNamespacedServiceAccount(NAMESPACE)
73+
.stream().findFirst()
74+
.map(ServiceAccount::getSecrets)
75+
.flatMap(secrets -> secrets.stream().findFirst().map(ObjectReference::getName))
76+
.orElseThrow(() -> new AssertionError("No Service Account found"));
10477
}
78+
79+
private Secret retrieveSecretForServiceAccount(String secretName) throws IOException {
80+
return KC.create(CoreV1Api.class).listNamespacedSecret(NAMESPACE)
81+
.stream()
82+
.filter(s -> s.getType().equals("kubernetes.io/service-account-token"))
83+
.filter(s -> s.getMetadata().getName().equals(secretName))
84+
.findAny()
85+
.orElseThrow(() -> new AssertionError(String.format("Secret %s doesn't exist", secretName)));
86+
}
87+
10588
}

tests/src/test/java/com/marcnuri/yakc/NetworkPolicyIT.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@
2929
import org.junit.jupiter.api.AfterEach;
3030
import org.junit.jupiter.api.BeforeEach;
3131
import org.junit.jupiter.api.DisplayName;
32-
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
3332
import org.junit.jupiter.api.Test;
34-
import org.junit.jupiter.api.TestMethodOrder;
3533
import org.junit.jupiter.api.extension.ExtendWith;
3634

3735
import java.io.IOException;
@@ -43,7 +41,6 @@
4341
/**
4442
* Created by Marc Nuri on 2020-05-02.
4543
*/
46-
@TestMethodOrder(OrderAnnotation.class)
4744
@ExtendWith(KubernetesClientExtension.class)
4845
class NetworkPolicyIT {
4946

@@ -82,7 +79,7 @@ void createNamespacedNetworkPolicy() {
8279
void listNamespacedNetworkPolicy() throws IOException {
8380
// When
8481
final boolean result = KC.create(NetworkingV1Api.class).listNamespacedNetworkPolicy(NAMESPACE)
85-
.stream().anyMatch(pod -> pod.getMetadata().getName().equals(networkPolicyName));
82+
.stream().anyMatch(np -> np.getMetadata().getName().equals(networkPolicyName));
8683
// Then
8784
assertThat(result).as("Created NetworkPolicy was not found").isTrue();
8885
}

tests/src/test/java/com/marcnuri/yakc/PodIT.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.marcnuri.yakc.model.io.k8s.api.core.v1.Container;
2929
import com.marcnuri.yakc.model.io.k8s.api.core.v1.Pod;
3030
import com.marcnuri.yakc.model.io.k8s.api.core.v1.PodSpec;
31+
import com.marcnuri.yakc.model.io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions;
3132
import com.marcnuri.yakc.model.io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta;
3233
import io.reactivex.disposables.Disposable;
3334
import org.assertj.core.api.InstanceOfAssertFactories;
@@ -273,7 +274,8 @@ private Pod createPodForTest() throws IOException {
273274

274275
private void deletePodForTest() throws IOException {
275276
try {
276-
KC.create(CoreV1Api.class).deleteNamespacedPod(podName, NAMESPACE).get();
277+
KC.create(CoreV1Api.class)
278+
.deleteNamespacedPod(podName, NAMESPACE, DeleteOptions.builder().gracePeriodSeconds(0).build()).get();
277279
} catch (NotFoundException ex) {
278280
// Ignore, this is only clean up. Resource may have been deleted by delete test
279281
}

tests/src/test/java/com/marcnuri/yakc/ServiceAccountIT.java

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
*/
4141
@ExtendWith(KubernetesClientExtension.class)
4242
class ServiceAccountIT {
43+
4344
private static final String NAMESPACE = "default";
4445

4546
private String serviceAccountName;

0 commit comments

Comments
 (0)