diff --git a/pom.xml b/pom.xml
index 623afbd..3ba6725 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,6 +138,12 @@
3.8.0
test
+
+ com.github.stefanbirkner
+ system-lambda
+ 1.2.0
+ test
+
commons-io
commons-io
@@ -286,7 +292,7 @@
org.owasp
dependency-check-maven
- 6.0.5
+ 6.1.3
diff --git a/src/test/java/de/stklcode/jvault/connector/builder/HTTPVaultConnectorBuilderTest.java b/src/test/java/de/stklcode/jvault/connector/builder/HTTPVaultConnectorBuilderTest.java
index 733c332..9832496 100644
--- a/src/test/java/de/stklcode/jvault/connector/builder/HTTPVaultConnectorBuilderTest.java
+++ b/src/test/java/de/stklcode/jvault/connector/builder/HTTPVaultConnectorBuilderTest.java
@@ -16,17 +16,18 @@
package de.stklcode.jvault.connector.builder;
+import com.github.stefanbirkner.systemlambda.SystemLambda;
import de.stklcode.jvault.connector.HTTPVaultConnector;
import de.stklcode.jvault.connector.exception.TlsException;
-import de.stklcode.jvault.connector.test.EnvironmentMock;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.File;
-import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.NoSuchFileException;
+import java.util.concurrent.Callable;
+import static com.github.stefanbirkner.systemlambda.SystemLambda.withEnvironmentVariable;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -50,59 +51,68 @@ class HTTPVaultConnectorBuilderTest {
* Test building from environment variables
*/
@Test
- void testFromEnv() throws NoSuchFieldException, IllegalAccessException, IOException {
+ void testFromEnv() throws Exception {
/* Provide address only should be enough */
- setenv(VAULT_ADDR, null, null, null);
- HTTPVaultConnectorBuilder factory = assertDoesNotThrow(
- () -> VaultConnectorBuilder.http().fromEnv(),
- "Factory creation from minimal environment failed"
- );
- HTTPVaultConnector connector = factory.build();
+ withVaultEnv(VAULT_ADDR, null, null, null).execute(() -> {
+ HTTPVaultConnectorBuilder builder = assertDoesNotThrow(
+ () -> VaultConnectorBuilder.http().fromEnv(),
+ "Factory creation from minimal environment failed"
+ );
+ HTTPVaultConnector connector = builder.build();
- assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
- assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
- assertThat("Non-default number of retries, when none set", getRequestHelperPrivate(connector, "retries"), is(0));
+ assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
+ assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
+ assertThat("Non-default number of retries, when none set", getRequestHelperPrivate(connector, "retries"), is(0));
+
+ return null;
+ });
/* Provide address and number of retries */
- setenv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), null);
+ withVaultEnv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), null).execute(() -> {
+ HTTPVaultConnectorBuilder builder = assertDoesNotThrow(
+ () -> VaultConnectorBuilder.http().fromEnv(),
+ "Factory creation from environment failed"
+ );
+ HTTPVaultConnector connector = builder.build();
- factory = assertDoesNotThrow(
- () -> VaultConnectorBuilder.http().fromEnv(),
- "Factory creation from environment failed"
- );
- connector = factory.build();
+ assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
+ assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
+ assertThat("Number of retries not set correctly", getRequestHelperPrivate(connector, "retries"), is(VAULT_MAX_RETRIES));
- assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
- assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
- assertThat("Number of retries not set correctly", getRequestHelperPrivate(connector, "retries"), is(VAULT_MAX_RETRIES));
+ return null;
+ });
/* Provide CA certificate */
String VAULT_CACERT = tempDir.toString() + "/doesnotexist";
- setenv(VAULT_ADDR, VAULT_CACERT, VAULT_MAX_RETRIES.toString(), null);
+ withVaultEnv(VAULT_ADDR, VAULT_CACERT, VAULT_MAX_RETRIES.toString(), null).execute(() -> {
+ TlsException e = assertThrows(
+ TlsException.class,
+ () -> VaultConnectorBuilder.http().fromEnv(),
+ "Creation with unknown cert path failed."
+ );
+ assertThat(e.getCause(), is(instanceOf(NoSuchFileException.class)));
+ assertThat(((NoSuchFileException) e.getCause()).getFile(), is(VAULT_CACERT));
- TlsException e = assertThrows(
- TlsException.class,
- () -> VaultConnectorBuilder.http().fromEnv(),
- "Creation with unknown cert path failed."
- );
- assertThat(e.getCause(), is(instanceOf(NoSuchFileException.class)));
- assertThat(((NoSuchFileException) e.getCause()).getFile(), is(VAULT_CACERT));
+ return null;
+ });
/* Automatic authentication */
- setenv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), VAULT_TOKEN);
+ withVaultEnv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), VAULT_TOKEN).execute(() -> {
+ HTTPVaultConnectorBuilder builder = assertDoesNotThrow(
+ () -> VaultConnectorBuilder.http().fromEnv(),
+ "Factory creation from minimal environment failed"
+ );
+ assertThat("Token nor set correctly", getPrivate(builder, "token"), is(equalTo(VAULT_TOKEN)));
- factory = assertDoesNotThrow(
- () -> VaultConnectorBuilder.http().fromEnv(),
- "Factory creation from minimal environment failed"
- );
- assertThat("Token nor set correctly", getPrivate(factory, "token"), is(equalTo(VAULT_TOKEN)));
+ return null;
+ });
}
- private void setenv(String vault_addr, String vault_cacert, String vault_max_retries, String vault_token) {
- EnvironmentMock.setenv("VAULT_ADDR", vault_addr);
- EnvironmentMock.setenv("VAULT_CACERT", vault_cacert);
- EnvironmentMock.setenv("VAULT_MAX_RETRIES", vault_max_retries);
- EnvironmentMock.setenv("VAULT_TOKEN", vault_token);
+ private SystemLambda.WithEnvironmentVariables withVaultEnv(String vault_addr, String vault_cacert, String vault_max_retries, String vault_token) {
+ return withEnvironmentVariable("VAULT_ADDR", vault_addr)
+ .and("VAULT_CACERT", vault_cacert)
+ .and("VAULT_MAX_RETRIES", vault_max_retries)
+ .and("VAULT_TOKEN", vault_token);
}
private Object getRequestHelperPrivate(HTTPVaultConnector connector, String fieldName) throws NoSuchFieldException, IllegalAccessException {
diff --git a/src/test/java/de/stklcode/jvault/connector/factory/HTTPVaultConnectorFactoryTest.java b/src/test/java/de/stklcode/jvault/connector/factory/HTTPVaultConnectorFactoryTest.java
index a07e78a..dc3df2e 100644
--- a/src/test/java/de/stklcode/jvault/connector/factory/HTTPVaultConnectorFactoryTest.java
+++ b/src/test/java/de/stklcode/jvault/connector/factory/HTTPVaultConnectorFactoryTest.java
@@ -16,17 +16,17 @@
package de.stklcode.jvault.connector.factory;
+import com.github.stefanbirkner.systemlambda.SystemLambda;
import de.stklcode.jvault.connector.HTTPVaultConnector;
import de.stklcode.jvault.connector.exception.TlsException;
-import de.stklcode.jvault.connector.test.EnvironmentMock;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.File;
-import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.NoSuchFileException;
+import static com.github.stefanbirkner.systemlambda.SystemLambda.withEnvironmentVariable;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -50,60 +50,68 @@ class HTTPVaultConnectorFactoryTest {
* Test building from environment variables
*/
@Test
- void testFromEnv() throws NoSuchFieldException, IllegalAccessException, IOException {
+ void testFromEnv() throws Exception {
/* Provide address only should be enough */
- setenv(VAULT_ADDR, null, null, null);
+ withVaultEnv(VAULT_ADDR, null, null, null).execute(() -> {
+ HTTPVaultConnectorFactory factory = assertDoesNotThrow(
+ () -> VaultConnectorFactory.httpFactory().fromEnv(),
+ "Factory creation from minimal environment failed"
+ );
+ HTTPVaultConnector connector = factory.build();
- HTTPVaultConnectorFactory factory = assertDoesNotThrow(
- () -> VaultConnectorFactory.httpFactory().fromEnv(),
- "Factory creation from minimal environment failed"
- );
- HTTPVaultConnector connector = factory.build();
+ assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
+ assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
+ assertThat("Non-default number of retries, when none set", getRequestHelperPrivate(connector, "retries"), is(0));
- assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
- assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
- assertThat("Non-default number of retries, when none set", getRequestHelperPrivate(connector, "retries"), is(0));
+ return null;
+ });
/* Provide address and number of retries */
- setenv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), null);
+ withVaultEnv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), null).execute(() -> {
+ HTTPVaultConnectorFactory factory = assertDoesNotThrow(
+ () -> VaultConnectorFactory.httpFactory().fromEnv(),
+ "Factory creation from environment failed"
+ );
+ HTTPVaultConnector connector = factory.build();
- factory = assertDoesNotThrow(
- () -> VaultConnectorFactory.httpFactory().fromEnv(),
- "Factory creation from environment failed"
- );
- connector = factory.build();
+ assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
+ assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
+ assertThat("Number of retries not set correctly", getRequestHelperPrivate(connector, "retries"), is(VAULT_MAX_RETRIES));
- assertThat("URL nor set correctly", getRequestHelperPrivate(connector, "baseURL"), is(equalTo(VAULT_ADDR + "/v1/")));
- assertThat("Trusted CA cert set when no cert provided", getRequestHelperPrivate(connector, "trustedCaCert"), is(nullValue()));
- assertThat("Number of retries not set correctly", getRequestHelperPrivate(connector, "retries"), is(VAULT_MAX_RETRIES));
+ return null;
+ });
/* Provide CA certificate */
String VAULT_CACERT = tempDir.toString() + "/doesnotexist";
- setenv(VAULT_ADDR, VAULT_CACERT, VAULT_MAX_RETRIES.toString(), null);
+ withVaultEnv(VAULT_ADDR, VAULT_CACERT, VAULT_MAX_RETRIES.toString(), null).execute(() -> {
+ TlsException e = assertThrows(
+ TlsException.class,
+ () -> VaultConnectorFactory.httpFactory().fromEnv(),
+ "Creation with unknown cert path failed."
+ );
+ assertThat(e.getCause(), is(instanceOf(NoSuchFileException.class)));
+ assertThat(((NoSuchFileException) e.getCause()).getFile(), is(VAULT_CACERT));
- TlsException e = assertThrows(
- TlsException.class,
- () -> VaultConnectorFactory.httpFactory().fromEnv(),
- "Creation with unknown cert path failed."
- );
- assertThat(e.getCause(), is(instanceOf(NoSuchFileException.class)));
- assertThat(((NoSuchFileException) e.getCause()).getFile(), is(VAULT_CACERT));
+ return null;
+ });
/* Automatic authentication */
- setenv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), VAULT_TOKEN);
+ withVaultEnv(VAULT_ADDR, null, VAULT_MAX_RETRIES.toString(), VAULT_TOKEN).execute(() -> {
+ HTTPVaultConnectorFactory factory = assertDoesNotThrow(
+ () -> VaultConnectorFactory.httpFactory().fromEnv(),
+ "Factory creation from minimal environment failed"
+ );
+ assertThat("Token nor set correctly", getPrivate(getPrivate(factory, "delegate"), "token"), is(equalTo(VAULT_TOKEN)));
- factory = assertDoesNotThrow(
- () -> VaultConnectorFactory.httpFactory().fromEnv(),
- "Factory creation from minimal environment failed"
- );
- assertThat("Token nor set correctly", getPrivate(getPrivate(factory, "delegate"), "token"), is(equalTo(VAULT_TOKEN)));
+ return null;
+ });
}
- private void setenv(String vault_addr, String vault_cacert, String vault_max_retries, String vault_token) {
- EnvironmentMock.setenv("VAULT_ADDR", vault_addr);
- EnvironmentMock.setenv("VAULT_CACERT", vault_cacert);
- EnvironmentMock.setenv("VAULT_MAX_RETRIES", vault_max_retries);
- EnvironmentMock.setenv("VAULT_TOKEN", vault_token);
+ private SystemLambda.WithEnvironmentVariables withVaultEnv(String vault_addr, String vault_cacert, String vault_max_retries, String vault_token) {
+ return withEnvironmentVariable("VAULT_ADDR", vault_addr)
+ .and("VAULT_CACERT", vault_cacert)
+ .and("VAULT_MAX_RETRIES", vault_max_retries)
+ .and("VAULT_TOKEN", vault_token);
}
private Object getRequestHelperPrivate(HTTPVaultConnector connector, String fieldName) throws NoSuchFieldException, IllegalAccessException {
diff --git a/src/test/java/de/stklcode/jvault/connector/test/EnvironmentMock.java b/src/test/java/de/stklcode/jvault/connector/test/EnvironmentMock.java
deleted file mode 100644
index 0fb6552..0000000
--- a/src/test/java/de/stklcode/jvault/connector/test/EnvironmentMock.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2016-2021 Stefan Kalscheuer
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package de.stklcode.jvault.connector.test;
-
-import java.lang.reflect.Field;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * Test helper to modify system environment.
- *
- * @author Stefan Kalscheuer
- */
-@SuppressWarnings("unchecked")
-public class EnvironmentMock {
- private static Map environment;
-
- static {
- try {
- Map originalEnv = System.getenv();
- Field mapField = originalEnv.getClass().getDeclaredField("m");
- mapField.setAccessible(true);
- environment = (Map) mapField.get(originalEnv);
- } catch (NoSuchFieldException | IllegalAccessException | ClassCastException e) {
- fail("Failed to intercept unmodifiable system environment");
- }
- }
-
- public static void setenv(String key, String value) {
- if (value != null) {
- environment.put(key, value);
- } else {
- environment.remove(key);
- }
- }
-}