diff --git a/README.md b/README.md index 83edca4..998a9a2 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ You can use this SDk in your application by adding the following dependency: ```xml - com.delinea.secrets + com.thycotic.secrets dsv-sdk-java - 1.0 + 1.0.1 ``` diff --git a/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultFactoryBeanTest.java b/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultFactoryBeanTest.java new file mode 100644 index 0000000..2dec0c5 --- /dev/null +++ b/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultFactoryBeanTest.java @@ -0,0 +1,44 @@ +package com.delinea.secrets.vault.spring; + +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; + +import static org.junit.jupiter.api.Assertions.*; + +class SecretsVaultFactoryBeanTest { + + private SecretsVaultFactoryBean configured(String tld, String baseUrlTemplate) throws Exception { + SecretsVaultFactoryBean factory = new SecretsVaultFactoryBean(); + ReflectionTestUtils.setField(factory, "tenant", "mytenant"); + ReflectionTestUtils.setField(factory, "clientId", "test-id"); + ReflectionTestUtils.setField(factory, "clientSecret", "test-secret"); + ReflectionTestUtils.setField(factory, "tld", tld); + ReflectionTestUtils.setField(factory, "baseUrlTemplate", baseUrlTemplate); + factory.afterPropertiesSet(); + return factory; + } + + @Test + void afterPropertiesSet_trimsDotWrappedTld() throws Exception { + SecretsVaultFactoryBean factory = configured(".com.", SecretsVaultFactoryBean.DEFAULT_BASE_URL_TEMPLATE); + assertEquals("com", ReflectionTestUtils.getField(factory, "tld")); + } + + @Test + void afterPropertiesSet_preservesCleanTld() throws Exception { + SecretsVaultFactoryBean factory = configured("eu", SecretsVaultFactoryBean.DEFAULT_BASE_URL_TEMPLATE); + assertEquals("eu", ReflectionTestUtils.getField(factory, "tld")); + } + + @Test + void afterPropertiesSet_stripsTrailingSlashFromBaseUrl() throws Exception { + SecretsVaultFactoryBean factory = configured("com", "https://%s.secretsvaultcloud.%s/v1/"); + String url = (String) ReflectionTestUtils.getField(factory, "baseUrlTemplate"); + assertFalse(url.endsWith("/")); + } + + @Test + void getObjectType_returnsSecretsVaultClass() { + assertEquals(SecretsVault.class, new SecretsVaultFactoryBean().getObjectType()); + } +} diff --git a/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultTest.java b/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultTest.java new file mode 100644 index 0000000..baad85b --- /dev/null +++ b/src/test/java/com/delinea/secrets/vault/spring/SecretsVaultTest.java @@ -0,0 +1,66 @@ +package com.delinea.secrets.vault.spring; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; +import static org.springframework.test.web.client.response.MockRestResponseCreators.*; + +class SecretsVaultTest { + + private static final String BASE_URL = "https://mytenant.secretsvaultcloud.com/v1"; + private static final String SECRET_JSON = + "{\"path\":\"/test/secret\",\"version\":1," + + "\"data\":{\"username\":\"admin\",\"password\":\"s3cr3t\"},\"attributes\":{}}"; + + private SecretsVault vault; + private MockRestServiceServer server; + + @BeforeEach + void setUp() { + vault = new SecretsVault(); + vault.setUriTemplateHandler(new DefaultUriBuilderFactory(BASE_URL)); + server = MockRestServiceServer.createServer(vault); + } + + @Test + void getSecret_stripsLeadingSlash() { + server.expect(requestTo(BASE_URL + "/secrets/test/secret")) + .andExpect(method(HttpMethod.GET)) + .andRespond(withSuccess(SECRET_JSON, MediaType.APPLICATION_JSON)); + + Secret secret = vault.getSecret("/test/secret"); + + assertNotNull(secret); + server.verify(); + } + + @Test + void getSecret_withoutLeadingSlash() { + server.expect(requestTo(BASE_URL + "/secrets/test/secret")) + .andExpect(method(HttpMethod.GET)) + .andRespond(withSuccess(SECRET_JSON, MediaType.APPLICATION_JSON)); + + Secret secret = vault.getSecret("test/secret"); + + assertNotNull(secret); + server.verify(); + } + + @Test + void getSecret_mapsDataFields() { + server.expect(requestTo(BASE_URL + "/secrets/test/secret")) + .andExpect(method(HttpMethod.GET)) + .andRespond(withSuccess(SECRET_JSON, MediaType.APPLICATION_JSON)); + + Secret secret = vault.getSecret("test/secret"); + + assertEquals("admin", secret.getData().get("username")); + assertEquals("s3cr3t", secret.getData().get("password")); + } +}