|
|
|
|
@@ -18,21 +18,27 @@ package org.springframework.credhub.integration;
|
|
|
|
|
|
|
|
|
|
import org.junit.Before;
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
import org.springframework.credhub.core.CredHubException;
|
|
|
|
|
import org.springframework.credhub.core.credential.CredHubCredentialOperations;
|
|
|
|
|
import org.springframework.credhub.support.CredentialDetails;
|
|
|
|
|
import org.springframework.credhub.support.CredentialSummary;
|
|
|
|
|
import org.springframework.credhub.support.CredentialType;
|
|
|
|
|
import org.springframework.credhub.support.SimpleCredentialName;
|
|
|
|
|
import org.springframework.credhub.support.WriteMode;
|
|
|
|
|
import org.springframework.credhub.support.password.PasswordParameters;
|
|
|
|
|
import org.springframework.credhub.support.user.UserCredential;
|
|
|
|
|
import org.springframework.credhub.support.user.UserParametersRequest;
|
|
|
|
|
import org.springframework.credhub.support.value.ValueCredential;
|
|
|
|
|
import org.springframework.credhub.support.value.ValueCredentialRequest;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
import static org.junit.Assume.assumeTrue;
|
|
|
|
|
|
|
|
|
|
public class CredentialIntegrationTests extends CredHubIntegrationTests {
|
|
|
|
|
private static final SimpleCredentialName CREDENTIAL_NAME =
|
|
|
|
|
new SimpleCredentialName("spring-credhub", "integration-test", "test-value-credential");
|
|
|
|
|
new SimpleCredentialName("spring-credhub", "integration-test", "test-credential");
|
|
|
|
|
private static final String CREDENTIAL_VALUE = "test-value";
|
|
|
|
|
|
|
|
|
|
private CredHubCredentialOperations credentials;
|
|
|
|
|
@@ -40,8 +46,14 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests {
|
|
|
|
|
@Before
|
|
|
|
|
public void setUp() {
|
|
|
|
|
credentials = operations.credentials();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
credentials.deleteByName(CREDENTIAL_NAME);
|
|
|
|
|
} catch (CredHubException e) {
|
|
|
|
|
// ignore failing deletes on cleanup
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void writeCredential() {
|
|
|
|
|
CredentialDetails<ValueCredential> written = credentials.write(ValueCredentialRequest.builder()
|
|
|
|
|
@@ -72,7 +84,85 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests {
|
|
|
|
|
assertThat(foundByPath).extracting("name").extracting("name").containsExactly(CREDENTIAL_NAME.getName());
|
|
|
|
|
|
|
|
|
|
credentials.deleteByName(CREDENTIAL_NAME);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<CredentialSummary> afterDelete = credentials.findByName(CREDENTIAL_NAME);
|
|
|
|
|
assertThat(afterDelete).hasSize(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void overwriteCredentialV2() {
|
|
|
|
|
assumeTrue(serverApiIsV2());
|
|
|
|
|
|
|
|
|
|
CredentialDetails<ValueCredential> written = credentials.write(ValueCredentialRequest.builder()
|
|
|
|
|
.name(CREDENTIAL_NAME)
|
|
|
|
|
.value(CREDENTIAL_VALUE)
|
|
|
|
|
.build());
|
|
|
|
|
assertThat(written.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(written.getValue().getValue()).isEqualTo(CREDENTIAL_VALUE);
|
|
|
|
|
assertThat(written.getCredentialType()).isEqualTo(CredentialType.VALUE);
|
|
|
|
|
assertThat(written.getId()).isNotNull();
|
|
|
|
|
|
|
|
|
|
CredentialDetails<ValueCredential> overwritten = credentials.write(ValueCredentialRequest.builder()
|
|
|
|
|
.name(CREDENTIAL_NAME)
|
|
|
|
|
.value("new-value")
|
|
|
|
|
.build());
|
|
|
|
|
assertThat(overwritten.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(overwritten.getValue().getValue()).isEqualTo("new-value");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void overwriteCredentialV1() {
|
|
|
|
|
assumeTrue(serverApiIsV1());
|
|
|
|
|
|
|
|
|
|
CredentialDetails<ValueCredential> written = credentials.write(ValueCredentialRequest.builder()
|
|
|
|
|
.name(CREDENTIAL_NAME)
|
|
|
|
|
.value(CREDENTIAL_VALUE)
|
|
|
|
|
.mode(WriteMode.OVERWRITE)
|
|
|
|
|
.build());
|
|
|
|
|
assertThat(written.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(written.getValue().getValue()).isEqualTo(CREDENTIAL_VALUE);
|
|
|
|
|
assertThat(written.getCredentialType()).isEqualTo(CredentialType.VALUE);
|
|
|
|
|
assertThat(written.getId()).isNotNull();
|
|
|
|
|
|
|
|
|
|
CredentialDetails<ValueCredential> overwritten = credentials.write(ValueCredentialRequest.builder()
|
|
|
|
|
.name(CREDENTIAL_NAME)
|
|
|
|
|
.value("new-value")
|
|
|
|
|
.build());
|
|
|
|
|
assertThat(overwritten.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(overwritten.getValue().getValue()).isEqualTo("new-value");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void generateCredential() {
|
|
|
|
|
CredentialDetails<UserCredential> generated = credentials.generate(UserParametersRequest.builder()
|
|
|
|
|
.name(CREDENTIAL_NAME)
|
|
|
|
|
.username("test-user")
|
|
|
|
|
.parameters(PasswordParameters.builder()
|
|
|
|
|
.length(12)
|
|
|
|
|
.excludeLower(false)
|
|
|
|
|
.excludeUpper(false)
|
|
|
|
|
.excludeNumber(false)
|
|
|
|
|
.includeSpecial(true)
|
|
|
|
|
.build())
|
|
|
|
|
.build());
|
|
|
|
|
assertThat(generated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(generated.getCredentialType()).isEqualTo(CredentialType.USER);
|
|
|
|
|
assertThat(generated.getValue().getUsername()).isEqualTo("test-user");
|
|
|
|
|
assertThat(generated.getValue().getPassword()).matches("^[a-zA-Z0-9\\p{Punct}]{12}$");
|
|
|
|
|
assertThat(generated.getValue().getPasswordHash()).isNotNull();
|
|
|
|
|
|
|
|
|
|
CredentialDetails<UserCredential> retrieved = credentials.getById(generated.getId(), UserCredential.class);
|
|
|
|
|
assertThat(retrieved.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
|
|
|
|
|
CredentialDetails<UserCredential> regenerated = credentials.regenerate(CREDENTIAL_NAME, UserCredential.class);
|
|
|
|
|
assertThat(regenerated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName());
|
|
|
|
|
assertThat(regenerated.getValue().getUsername()).isEqualTo("test-user");
|
|
|
|
|
assertThat(regenerated.getValue().getPassword()).matches("^[a-zA-Z0-9\\p{Punct}]{12}$");
|
|
|
|
|
assertThat(regenerated.getValue().getPassword()).isNotEqualTo(generated.getValue().getPassword());
|
|
|
|
|
assertThat(regenerated.getValue().getPasswordHash()).isNotEqualTo(generated.getValue().getPasswordHash());
|
|
|
|
|
|
|
|
|
|
credentials.deleteByName(CREDENTIAL_NAME);
|
|
|
|
|
|
|
|
|
|
List<CredentialSummary> afterDelete = credentials.findByName(CREDENTIAL_NAME);
|
|
|
|
|
assertThat(afterDelete).hasSize(0);
|
|
|
|
|
}
|
|
|
|
|
|