diff --git a/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CertificateIntegrationTests.java b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CertificateIntegrationTests.java new file mode 100644 index 0000000..7dc69fe --- /dev/null +++ b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CertificateIntegrationTests.java @@ -0,0 +1,90 @@ +/* + * Copyright 2016-2017 the original author or authors. + * + * 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 org.springframework.credhub.integration; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.springframework.credhub.core.CredHubException; +import org.springframework.credhub.core.certificate.CredHubCertificateOperations; +import org.springframework.credhub.core.credential.CredHubCredentialOperations; +import org.springframework.credhub.support.CertificateSummary; +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.certificate.CertificateCredential; +import org.springframework.credhub.support.certificate.CertificateParameters; +import org.springframework.credhub.support.certificate.CertificateParametersRequest; + + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CertificateIntegrationTests extends CredHubIntegrationTests { + private static final SimpleCredentialName CREDENTIAL_NAME = + new SimpleCredentialName("spring-credhub", "integration-test", "test-certificate"); + + private CredHubCredentialOperations credentials; + private CredHubCertificateOperations certificates; + + @Before + public void setUp() { + credentials = operations.credentials(); + certificates = operations.certificates(); + + try { + credentials.deleteByName(CREDENTIAL_NAME); + } catch (CredHubException e) { + // ignore failing deletes on cleanup + } + } + + @After + public void tearDown() { + credentials.deleteByName(CREDENTIAL_NAME); + + List afterDelete = credentials.findByName(CREDENTIAL_NAME); + assertThat(afterDelete).hasSize(0); + } + + @Test + public void generateCertificate() { + CredentialDetails certificate = credentials.generate(CertificateParametersRequest.builder() + .name(CREDENTIAL_NAME) + .parameters(CertificateParameters.builder() + .commonName("example.com") + .selfSign(true) + .build()) + .build()); + assertThat(certificate.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName()); + assertThat(certificate.getCredentialType()).isEqualTo(CredentialType.CERTIFICATE); + assertThat(certificate.getId()).isNotNull(); + assertThat(certificate.getValue().getCertificate()).isNotNull(); + assertThat(certificate.getValue().getCertificateAuthority()).isNotNull(); + assertThat(certificate.getValue().getPrivateKey()).isNotNull(); + + CertificateSummary byName = certificates.getByName(CREDENTIAL_NAME); + assertThat(byName.getName()).isEqualTo(CREDENTIAL_NAME.getName()); + assertThat(byName.getId()).isNotNull(); + + List allCertificates = certificates.getAll(); + assertThat(allCertificates.size()).isGreaterThan(0); + assertThat(allCertificates).extracting("name").contains(CREDENTIAL_NAME.getName()); + } +} diff --git a/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CredentialIntegrationTests.java b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CredentialIntegrationTests.java index 3003510..ca65be1 100644 --- a/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CredentialIntegrationTests.java +++ b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/CredentialIntegrationTests.java @@ -16,6 +16,7 @@ package org.springframework.credhub.integration; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.credhub.core.CredHubException; @@ -43,10 +44,19 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests { private CredHubCredentialOperations credentials; + private PasswordParameters.PasswordParametersBuilder passwordParameters; + @Before public void setUp() { credentials = operations.credentials(); + passwordParameters = PasswordParameters.builder() + .length(12) + .excludeLower(false) + .excludeUpper(false) + .excludeNumber(false) + .includeSpecial(true); + try { credentials.deleteByName(CREDENTIAL_NAME); } catch (CredHubException e) { @@ -54,6 +64,14 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests { } } + @After + public void tearDown() { + credentials.deleteByName(CREDENTIAL_NAME); + + List afterDelete = credentials.findByName(CREDENTIAL_NAME); + assertThat(afterDelete).hasSize(0); + } + @Test public void writeCredential() { CredentialDetails written = credentials.write(ValueCredentialRequest.builder() @@ -82,11 +100,6 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests { List foundByPath = credentials.findByPath("/spring-credhub/integration-test"); assertThat(foundByPath).hasSize(1); assertThat(foundByPath).extracting("name").extracting("name").containsExactly(CREDENTIAL_NAME.getName()); - - credentials.deleteByName(CREDENTIAL_NAME); - - List afterDelete = credentials.findByName(CREDENTIAL_NAME); - assertThat(afterDelete).hasSize(0); } @Test @@ -137,13 +150,7 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests { CredentialDetails 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()) + .parameters(passwordParameters.build()) .build()); assertThat(generated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName()); assertThat(generated.getCredentialType()).isEqualTo(CredentialType.USER); @@ -160,10 +167,86 @@ public class CredentialIntegrationTests extends CredHubIntegrationTests { 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); + @Test + public void generateNoOverwriteCredential() { + CredentialDetails generated = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(generated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName()); + assertThat(generated.getValue().getUsername()).isEqualTo("test-user"); + assertThat(generated.getValue().getPassword()).matches("^[a-zA-Z0-9\\p{Punct}]{12}$"); + assertThat(generated.getValue().getPasswordHash()).isNotNull(); - List afterDelete = credentials.findByName(CREDENTIAL_NAME); - assertThat(afterDelete).hasSize(0); + CredentialDetails noOverwrite = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .mode(WriteMode.NO_OVERWRITE) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(noOverwrite.getValue().getUsername()).isEqualTo("test-user"); + assertThat(noOverwrite.getValue().getPassword()).isEqualTo(generated.getValue().getPassword()); + assertThat(noOverwrite.getValue().getPasswordHash()).isEqualTo(generated.getValue().getPasswordHash()); + } + + @Test + public void generateOverwriteCredential() { + CredentialDetails generated = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(generated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName()); + 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 overwrite = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .mode(WriteMode.OVERWRITE) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(overwrite.getValue().getUsername()).isEqualTo("test-user"); + assertThat(overwrite.getValue().getPassword()).isNotEqualTo(generated.getValue().getPassword()); + assertThat(overwrite.getValue().getPasswordHash()).isNotEqualTo(generated.getValue().getPasswordHash()); + } + + @Test + public void generateConvergeCredential() { + CredentialDetails generated = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(generated.getName().getName()).isEqualTo(CREDENTIAL_NAME.getName()); + 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 convergeWithoutChanges = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .mode(WriteMode.CONVERGE) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(convergeWithoutChanges.getValue().getUsername()).isEqualTo("test-user"); + assertThat(convergeWithoutChanges.getValue().getPassword()).isEqualTo(generated.getValue().getPassword()); + assertThat(convergeWithoutChanges.getValue().getPasswordHash()).isEqualTo(generated.getValue().getPasswordHash()); + + passwordParameters.includeSpecial(false); + + CredentialDetails convergeWithChanges = credentials.generate(UserParametersRequest.builder() + .name(CREDENTIAL_NAME) + .mode(WriteMode.CONVERGE) + .username("test-user") + .parameters(passwordParameters.build()) + .build()); + assertThat(convergeWithChanges.getValue().getUsername()).isEqualTo("test-user"); + assertThat(convergeWithChanges.getValue().getPassword()).isNotEqualTo(generated.getValue().getPassword()); + assertThat(convergeWithChanges.getValue().getPasswordHash()).isNotEqualTo(generated.getValue().getPasswordHash()); } }