5656import static java .util .Collections .EMPTY_SET ;
5757import static java .util .Collections .emptyList ;
5858import static org .assertj .core .api .Assertions .fail ;
59+ import static org .cloudfoundry .credhub .requests .CertificateGenerationRequestParameters .CRL_SIGN ;
60+ import static org .cloudfoundry .credhub .requests .CertificateGenerationRequestParameters .KEY_CERT_SIGN ;
5961import static org .hamcrest .MatcherAssert .assertThat ;
6062import static org .hamcrest .Matchers .hasSize ;
6163import static org .hamcrest .Matchers .samePropertyValuesAs ;
@@ -81,6 +83,7 @@ public class DefaultCredentialsHandlerTest {
8183 private DefaultCredentialsHandler subjectWithAcls ;
8284 private DefaultCredentialsHandler subjectWithoutAcls ;
8385 private DefaultCredentialsHandler subjectWithAclsAndConcatenate ;
86+ private DefaultCredentialsHandler subjectWithDefaultCAKeyUsages ;
8487 private DefaultCredentialService credentialService ;
8588 private CEFAuditRecord auditRecord ;
8689 private PermissionCheckingService permissionCheckingService ;
@@ -139,6 +142,17 @@ public void beforeEach() {
139142 true ,
140143 false );
141144
145+ subjectWithDefaultCAKeyUsages = new DefaultCredentialsHandler (
146+ credentialService ,
147+ auditRecord ,
148+ permissionCheckingService ,
149+ userContextHolder ,
150+ certificateAuthorityService ,
151+ universalCredentialGenerator ,
152+ true ,
153+ false ,
154+ true );
155+
142156 generationParameters = new StringGenerationParameters ();
143157 UserContext userContext = mock (UserContext .class );
144158 when (userContext .getActor ()).thenReturn (USER );
@@ -1023,4 +1037,49 @@ public void findContainingName_withAclsDisabled_returnsUnfilteredCredentials() {
10231037 verify (permissionCheckingService , times (0 )).findAllPathsByActor (any ());
10241038 }
10251039
1040+ @ Test
1041+ public void generateCredential_whenCertificateWithIsCaAndNoKeyUsagesAndDefaultCAKeyUsagesEnabled_setsDefaultKeyUsages () {
1042+ CertificateGenerationRequestParameters requestParameters = new CertificateGenerationRequestParameters ();
1043+ requestParameters .setCa (true );
1044+ requestParameters .setKeyUsage (null );
1045+
1046+ CertificateGenerateRequest generateRequest = new CertificateGenerateRequest ();
1047+ generateRequest .setRequestGenerationParameters (requestParameters );
1048+ generateRequest .setName (CREDENTIAL_NAME );
1049+ generateRequest .setType (CredentialType .CERTIFICATE .toString ());
1050+
1051+ when (permissionCheckingService .hasPermission (USER , CREDENTIAL_NAME , PermissionOperation .WRITE ))
1052+ .thenReturn (true );
1053+ when (credentialService .findActiveByName (CREDENTIAL_NAME ))
1054+ .thenReturn (emptyList ());
1055+
1056+ final CertificateCredentialValue generatedValue = new CertificateCredentialValue (
1057+ null ,
1058+ TestConstants .TEST_CA ,
1059+ TestConstants .TEST_PRIVATE_KEY ,
1060+ null ,
1061+ true ,
1062+ false ,
1063+ false ,
1064+ false
1065+ );
1066+ final CertificateCredentialVersion credentialVersion = new CertificateCredentialVersion (CREDENTIAL_NAME );
1067+ credentialVersion .setCa (generatedValue .getCa ());
1068+ credentialVersion .setEncryptor (encryptor );
1069+ credentialVersion .setCertificate (generatedValue .getCertificate ());
1070+ credentialVersion .setPrivateKey (generatedValue .getPrivateKey ());
1071+ credentialVersion .setUuid (UUID .randomUUID ());
1072+ credentialVersion .getCredential ().setUuid (UUID .randomUUID ());
1073+ credentialVersion .setVersionCreatedAt (VERSION1_CREATED_AT );
1074+
1075+ when (universalCredentialGenerator .generate (any ())).thenReturn (generatedValue );
1076+ when (credentialService .save (any (), any (), any ())).thenReturn (credentialVersion );
1077+
1078+ subjectWithDefaultCAKeyUsages .generateCredential (generateRequest );
1079+
1080+ ArgumentCaptor <CertificateGenerateRequest > requestCaptor = ArgumentCaptor .forClass (CertificateGenerateRequest .class );
1081+ verify (universalCredentialGenerator ).generate (requestCaptor .capture ());
1082+ CertificateGenerationRequestParameters capturedParams = requestCaptor .getValue ().getGenerationRequestParameters ();
1083+ assertThat (capturedParams .getKeyUsage (), equalTo (new String []{KEY_CERT_SIGN , CRL_SIGN }));
1084+ }
10261085}
0 commit comments