Add generate and regenerate integration tests.

This commit is contained in:
Scott Frederick
2018-10-23 16:24:34 -05:00
parent 8a1cc78d75
commit ec522d06bd
5 changed files with 107 additions and 8 deletions

View File

@@ -58,11 +58,12 @@ public interface CredHubCredentialOperations {
* Regenerate a credential in CredHub. Only credentials that were previously generated can be
* re-generated.
*
* @param name the name of the credential; must not be {@literal null}
* @param <T> the credential implementation type
* @param name the name of the credential; must not be {@literal null}
* @param credentialType the type of the credential to be regenerated; must not be {@literal null}
* @return the details of the regenerated credential
*/
<T> CredentialDetails<T> regenerate(final CredentialName name);
<T> CredentialDetails<T> regenerate(final CredentialName name, Class<T> credentialType);
/**
* Retrieve a credential using its ID, as returned in a write request.

View File

@@ -113,8 +113,9 @@ public class CredHubCredentialTemplate implements CredHubCredentialOperations {
}
@Override
public <T> CredentialDetails<T> regenerate(final CredentialName name) {
public <T> CredentialDetails<T> regenerate(final CredentialName name, Class<T> credentialType) {
Assert.notNull(name, "credential name must not be null");
Assert.notNull(credentialType, "credential type must not be null");
final ParameterizedTypeReference<CredentialDetails<T>> ref =
new ParameterizedTypeReference<CredentialDetails<T>>() {};

View File

@@ -139,7 +139,7 @@ public abstract class CredHubTemplateDetailUnitTestsBase<T, P> extends CredHubCr
if (!expectedResponse.getStatusCode().equals(HttpStatus.OK)) {
try {
credHubTemplate.regenerate(NAME);
credHubTemplate.regenerate(NAME, getType());
fail("Exception should have been thrown");
}
catch (CredHubException e) {
@@ -147,7 +147,7 @@ public abstract class CredHubTemplateDetailUnitTestsBase<T, P> extends CredHubCr
}
}
else {
CredentialDetails<T> response = credHubTemplate.regenerate(NAME);
CredentialDetails<T> response = credHubTemplate.regenerate(NAME, getType());
assertDetailsResponseContainsExpectedCredential(expectedResponse, response);
}

View File

@@ -21,4 +21,11 @@ public abstract class CredHubIntegrationTests {
@Autowired
protected CredHubOperations operations;
protected boolean serverApiIsV1() {
return operations.info().version().isVersion1();
}
protected boolean serverApiIsV2() {
return operations.info().version().isVersion2();
}
}

View File

@@ -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);
}