diff --git a/spring-vault/pom.xml b/spring-vault/pom.xml index 68856de2fc..b0b1590df8 100644 --- a/spring-vault/pom.xml +++ b/spring-vault/pom.xml @@ -15,6 +15,18 @@ 0.0.1-SNAPSHOT ../parent-boot-2 + + + + + org.springframework.data + spring-data-releasetrain + Moore-SR1 + import + pom + + + @@ -26,6 +38,10 @@ spring-vault-core ${spring.vault.core.version} + + org.springframework.data + spring-data-keyvalue + com.fasterxml.jackson.core jackson-databind @@ -38,7 +54,7 @@ - 2.1.1.RELEASE + 2.2.0.RELEASE \ No newline at end of file diff --git a/spring-vault/src/main/java/com/baeldung/springvault/Credentials.java b/spring-vault/src/main/java/com/baeldung/springvault/Credentials.java index 548ebd4ff6..a0a9be83a7 100644 --- a/spring-vault/src/main/java/com/baeldung/springvault/Credentials.java +++ b/spring-vault/src/main/java/com/baeldung/springvault/Credentials.java @@ -1,7 +1,12 @@ package com.baeldung.springvault; +import org.springframework.data.annotation.Id; +import org.springframework.vault.repository.mapping.Secret; + +@Secret(backend = "credentials", value = "myapp") public class Credentials { + @Id private String username; private String password; diff --git a/spring-vault/src/main/java/com/baeldung/springvault/CredentialsRepository.java b/spring-vault/src/main/java/com/baeldung/springvault/CredentialsRepository.java new file mode 100644 index 0000000000..41760114be --- /dev/null +++ b/spring-vault/src/main/java/com/baeldung/springvault/CredentialsRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.springvault; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CredentialsRepository extends CrudRepository { + +} diff --git a/spring-vault/src/main/java/com/baeldung/springvault/CredentialsService.java b/spring-vault/src/main/java/com/baeldung/springvault/CredentialsService.java index 6a4b7cb784..454819c7ff 100644 --- a/spring-vault/src/main/java/com/baeldung/springvault/CredentialsService.java +++ b/spring-vault/src/main/java/com/baeldung/springvault/CredentialsService.java @@ -1,6 +1,7 @@ package com.baeldung.springvault; import java.net.URISyntaxException; +import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +19,9 @@ public class CredentialsService { @Autowired private VaultTemplate vaultTemplate; + + @Autowired + private CredentialsRepository credentialsRepository; /** * To Secure Credentials @@ -40,5 +44,15 @@ public class CredentialsService { VaultResponseSupport response = vaultTemplate.read("credentials/myapp", Credentials.class); return response.getData(); } + + public Credentials saveCredentials(Credentials credentials) { + + return credentialsRepository.save(credentials); + } + + public Optional findById(String username) { + + return credentialsRepository.findById(username); + } } diff --git a/spring-vault/src/test/java/com/baeldung/springvault/VaultIntegrationTest.java b/spring-vault/src/test/java/com/baeldung/springvault/VaultIntegrationTest.java index dd8797aacc..a532eeabbf 100644 --- a/spring-vault/src/test/java/com/baeldung/springvault/VaultIntegrationTest.java +++ b/spring-vault/src/test/java/com/baeldung/springvault/VaultIntegrationTest.java @@ -1,23 +1,26 @@ package com.baeldung.springvault; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.net.URISyntaxException; +import java.util.Optional; + import org.junit.FixMethodOrder; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; +import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import java.net.URISyntaxException; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - /** * These tests are requiring the {@code vault} command to be installed and available in the executing * platform. So, if you intend to run them in your environment, the please install the vault and then @@ -32,6 +35,9 @@ public class VaultIntegrationTest { @Autowired private CredentialsService credentialsService; + + @MockBean + private CredentialsRepository credentialsRepository; /** * Test to secure credentials. @@ -71,5 +77,42 @@ public class VaultIntegrationTest { assertEquals("username", credentials.getUsername()); assertEquals("password", credentials.getPassword()); } + + @Test + @Ignore + public void givenCredentials_whenSave_thenReturnCredentials() { + // Given + Credentials credentials = new Credentials("login", "password"); + Mockito.when(credentialsRepository.save(credentials)) + .thenReturn(credentials); + + // When + Credentials savedCredentials = credentialsService.saveCredentials(credentials); + + // Then + assertNotNull(savedCredentials); + assertEquals(savedCredentials.getUsername(), credentials.getUsername()); + assertEquals(savedCredentials.getPassword(), credentials.getPassword()); + } + + @Test + @Ignore + public void givenId_whenFindById_thenReturnCredentials() { + // Given + Credentials credentials = new Credentials("login", "p@ssw@rd"); + Mockito.when(credentialsRepository.findById("login")) + .thenReturn(Optional.of(credentials)); + + // When + Optional returnedCredentials = credentialsService.findById("login"); + + // Then + assertNotNull(returnedCredentials); + assertNotNull(returnedCredentials.get()); + assertEquals(returnedCredentials.get() + .getUsername(), credentials.getUsername()); + assertEquals(returnedCredentials.get() + .getPassword(), credentials.getPassword()); + } }