Skip to content

Commit c87152a

Browse files
author
dakodakov
authored
control-service: secrets service integration test (#2289)
Add an integration test for the secrets service. Revert dependabot changes to spring-vault version as the newer versions require spring 6.0+. --------- Signed-off-by: Dako Dakov <ddakov@vmware.com>
1 parent 248de8b commit c87152a

File tree

5 files changed

+108
-3
lines changed

5 files changed

+108
-3
lines changed

projects/control-service/cicd/.gitlab-ci.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ control_service_build_image:
6666
changes: *control_service_code_change_locations
6767

6868
control_service_integration_test:
69-
extends: .control_service_base_build
69+
extends:
70+
- .control_service_base_build
71+
- .images:dind
7072
stage: build
7173
variables:
7274
DEPLOYMENT_K8S_KUBECONFIG: "~/.kube/config"

projects/control-service/projects/pipelines_control_service/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ dependencies { // Implementation dependencies are found on compile classpath of
9292
testImplementation versions.'net.bytebuddy:byte-buddy'
9393
testImplementation versions.'org.testcontainers:testcontainers'
9494
testImplementation versions.'org.awaitility:awaitility'
95+
testImplementation versions.'org.testcontainers:vault'
96+
testImplementation versions.'org.testcontainers:junit-jupiter'
9597
testImplementation 'com.github.kirviq:dumbster:1.7.1'
9698
testImplementation versions.'org.junit.jupiter:junit-jupiter-api'
9799
testImplementation versions.'org.junit.platform:junit-platform-suite-api'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* Copyright 2021-2023 VMware, Inc.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package com.vmware.taurus.secrets.service.vault;
7+
8+
import com.fasterxml.jackson.core.JsonProcessingException;
9+
import com.vmware.taurus.ControlplaneApplication;
10+
import com.vmware.taurus.datajobs.it.common.BaseIT;
11+
import com.vmware.taurus.exception.DataJobSecretsSizeLimitException;
12+
import org.apache.commons.lang3.RandomStringUtils;
13+
import org.junit.jupiter.api.Assertions;
14+
import org.junit.jupiter.api.BeforeAll;
15+
import org.junit.jupiter.api.Test;
16+
import org.springframework.boot.test.context.SpringBootTest;
17+
import org.springframework.vault.authentication.TokenAuthentication;
18+
import org.springframework.vault.client.VaultEndpoint;
19+
import org.springframework.vault.core.VaultTemplate;
20+
import org.testcontainers.junit.jupiter.Container;
21+
import org.testcontainers.junit.jupiter.Testcontainers;
22+
import org.testcontainers.vault.VaultContainer;
23+
24+
import java.net.URI;
25+
import java.net.URISyntaxException;
26+
import java.util.Collections;
27+
import java.util.HashMap;
28+
import java.util.Map;
29+
30+
import static org.junit.jupiter.api.Assertions.assertThrows;
31+
32+
@SpringBootTest(
33+
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
34+
classes = ControlplaneApplication.class)
35+
@Testcontainers
36+
public class TestVaultJobSecretsServiceIT extends BaseIT {
37+
38+
@Container
39+
private static final VaultContainer vaultContainer =
40+
new VaultContainer<>("vault:1.0.2").withVaultToken("root");
41+
42+
private static VaultJobSecretsService vaultJobSecretService;
43+
44+
@BeforeAll
45+
public static void init() throws URISyntaxException {
46+
String vaultUri = vaultContainer.getHttpHostAddress();
47+
48+
VaultEndpoint vaultEndpoint = VaultEndpoint.from(new URI(vaultUri));
49+
TokenAuthentication clientAuthentication = new TokenAuthentication("root");
50+
51+
VaultTemplate vaultTemplate = new VaultTemplate(vaultEndpoint, clientAuthentication);
52+
53+
vaultJobSecretService = new VaultJobSecretsService(vaultTemplate);
54+
}
55+
56+
@Test
57+
public void testGetEmptyDataJobSecrets() throws Exception {
58+
Map<String, Object> result = vaultJobSecretService.readJobSecrets("testJob");
59+
Assertions.assertEquals(Collections.emptyMap(), result);
60+
}
61+
62+
@Test
63+
public void testSetDataJobSecrets() throws Exception {
64+
Map<String, Object> temp = new HashMap<>();
65+
temp.put("key1", "value1");
66+
67+
Map<String, Object> secrets = Collections.unmodifiableMap(temp);
68+
69+
vaultJobSecretService.updateJobSecrets("testJob2", secrets);
70+
71+
Map<String, Object> readResult = vaultJobSecretService.readJobSecrets("testJob2");
72+
Assertions.assertEquals(secrets, readResult);
73+
}
74+
75+
@Test
76+
void testUpdateJobSecretsLimit() throws JsonProcessingException {
77+
Map<String, Object> temp = new HashMap<>();
78+
temp.put("key1", "value1");
79+
80+
Map<String, Object> secrets = Collections.unmodifiableMap(temp);
81+
82+
vaultJobSecretService.updateJobSecrets("testJob2", secrets);
83+
84+
Map<String, Object> largeSecrets = new HashMap<>();
85+
largeSecrets.put("key1", null);
86+
largeSecrets.put(
87+
"key2",
88+
RandomStringUtils.randomAlphabetic(VaultJobSecretsService.VAULT_SIZE_LIMIT_DEFAULT));
89+
90+
assertThrows(
91+
DataJobSecretsSizeLimitException.class,
92+
() -> vaultJobSecretService.updateJobSecrets("testJob2", largeSecrets));
93+
94+
// check secrets were not updated
95+
Map<String, Object> readResult = vaultJobSecretService.readJobSecrets("testJob2");
96+
Assertions.assertEquals(secrets, readResult);
97+
}
98+
}

projects/control-service/projects/pipelines_control_service/src/main/java/com/vmware/taurus/secrets/service/vault/VaultJobSecretsService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
@ConditionalOnProperty(value = "featureflag.vault.integration.enabled")
2828
public class VaultJobSecretsService implements com.vmware.taurus.secrets.service.JobSecretsService {
2929

30-
private static final int VAULT_SIZE_LIMIT_DEFAULT = 1048576; // 1 MB
30+
// package private so it can be used in tests
31+
static final int VAULT_SIZE_LIMIT_DEFAULT = 1048576; // 1 MB
3132
private static final String SECRET = "secret";
3233

3334
@Value("${datajobs.vault.size.limit.bytes}")

projects/control-service/projects/versions-of-external-dependencies.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ project.ext {
3434
'net.javacrumbs.shedlock:shedlock-spring' : 'net.javacrumbs.shedlock:shedlock-spring:5.5.0',
3535
'net.javacrumbs.shedlock:shedlock-provider-jdbc-template' : 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:5.4.0',
3636
'org.testcontainers:testcontainers' : 'org.testcontainers:testcontainers:1.18.3',
37+
'org.testcontainers:vault' : 'org.testcontainers:vault:1.18.3',
38+
'org.testcontainers:junit-jupiter' : 'org.testcontainers:junit-jupiter:1.18.3',
3739
'org.mock-server:mockserver-netty' : 'org.mock-server:mockserver-netty:5.15.0', //5.11.2
3840
'org.awaitility:awaitility' : 'org.awaitility:awaitility:4.2.0',
3941
'org.apache.commons:commons-lang3' : 'org.apache.commons:commons-lang3:3.12.0',
@@ -45,7 +47,7 @@ project.ext {
4547
'com.amazonaws:aws-java-sdk-core' : 'com.amazonaws:aws-java-sdk-core:1.12.492',
4648
'com.amazonaws:aws-java-sdk-sts' : 'com.amazonaws:aws-java-sdk-sts:1.12.492',
4749
'com.amazonaws:aws-java-sdk-ecr' : 'com.amazonaws:aws-java-sdk-ecr:1.12.490',
48-
'org.springframework.vault:spring-vault-core' : 'org.springframework.vault:spring-vault-core:3.0.2',
50+
'org.springframework.vault:spring-vault-core' : 'org.springframework.vault:spring-vault-core:2.3.3',
4951

5052
// transitive dependencies version force (freeze)
5153
// on next upgrade, revise if those still need to be set explicitly

0 commit comments

Comments
 (0)