3636import io .harness .connector .ConnectorDTO ;
3737import io .harness .connector .ConnectorInfoDTO ;
3838import io .harness .connector .entities .embedded .vaultconnector .VaultConnector ;
39+ import io .harness .connector .mappers .secretmanagermapper .VaultDTOToEntity ;
3940import io .harness .connector .mappers .secretmanagermapper .VaultEntityToDTO ;
4041import io .harness .connector .services .NGConnectorSecretManagerService ;
42+ import io .harness .delegate .beans .DelegateMetaInfo ;
4143import io .harness .delegate .beans .connector .ConnectorType ;
4244import io .harness .delegate .beans .connector .vaultconnector .VaultConnectorDTO ;
4345import io .harness .delegate .utils .TaskSetupAbstractionHelper ;
4446import io .harness .delegatetasks .NGVaultFetchEngineTaskResponse ;
4547import io .harness .delegatetasks .NGVaultRenewalAppRoleTaskResponse ;
4648import io .harness .delegatetasks .NGVaultRenewalTaskParameters ;
49+ import io .harness .delegatetasks .NGVaultRenewalTaskResponse ;
4750import io .harness .encryption .SecretRefData ;
51+ import io .harness .git .model .ChangeType ;
4852import io .harness .helpers .ext .vault .VaultAppRoleLoginResult ;
4953import io .harness .ng .core .api .NGEncryptedDataService ;
5054import io .harness .ng .core .api .SecretCrudService ;
8185@ OwnedBy (PL )
8286public class NGVaultServiceImplTest extends CategoryTest {
8387 @ InjectMocks VaultEntityToDTO vaultEntityToDTO ;
88+ @ InjectMocks VaultDTOToEntity vaultDTOToEntity ;
8489
8590 DelegateGrpcClientWrapper delegateService ;
8691 NGConnectorSecretManagerService ngConnectorSecretManagerService ;
@@ -285,6 +290,62 @@ public void testProcessAppRole_VaultConfigHasRequiredLoginParams() throws IOExce
285290 .isEqualTo (String .valueOf (vaultConnectorDTO .getSecretId ().getDecryptedValue ()));
286291 }
287292
293+ @ Test
294+ @ Owner (developers = VIKAS_M )
295+ @ Category (UnitTests .class )
296+ public void testRenewAppRoleClientToken_willUpdateCorrespondingPPT () throws IOException {
297+ VaultConnectorDTO vaultConnectorDTO = vaultEntityToDTO .createConnectorDTO (buildAppRoleVaultConnector ());
298+ vaultConnectorDTO .setRenewAppRoleToken (true );
299+ VaultConnector vaultConnector = vaultDTOToEntity .toConnectorEntity (vaultConnectorDTO );
300+ VaultConfigDTO vaultConfigDTO = (VaultConfigDTO ) getVaultConfigDTOWithAppRoleAuth ();
301+ vaultConfigDTO .setEncryptionType (VAULT );
302+ Call <RestResponse <Boolean >> request = mock (Call .class );
303+ doReturn (request ).when (accountClient ).isFeatureFlagEnabled (any (), any ());
304+ when (request .execute ()).thenReturn (Response .success (new RestResponse <>(false )));
305+ when (ngConnectorSecretManagerService .getUsingIdentifier (any (), any (), any (), any (), anyBoolean ()))
306+ .thenReturn (vaultConfigDTO );
307+ when (delegateService .executeSyncTask (any ()))
308+ .thenReturn (
309+ NGVaultRenewalAppRoleTaskResponse .builder ()
310+ .vaultAppRoleLoginResult (VaultAppRoleLoginResult .builder ().clientToken (randomAlphabetic (10 )).build ())
311+ .build ());
312+ when (ngEncryptedDataService .updateSecretText (any (), any ())).thenReturn (NGEncryptedData .builder ().build ());
313+ when (connectorRepository .save (vaultConnector , ChangeType .NONE )).thenReturn (vaultConnector );
314+ ngVaultService .renewAppRoleClientToken (vaultConnector );
315+ ArgumentCaptor <String > argumentCaptor = ArgumentCaptor .forClass (String .class );
316+ verify (ngConnectorSecretManagerService , times (1 )).getPerpetualTaskId (any (), any (), any (), argumentCaptor .capture ());
317+ assertThat (argumentCaptor .getValue ()).isEqualTo (vaultConnector .getIdentifier ());
318+ verify (ngConnectorSecretManagerService , times (1 )).resetHeartBeatTask (any (), any ());
319+ }
320+
321+ @ Test
322+ @ Owner (developers = VIKAS_M )
323+ @ Category (UnitTests .class )
324+ public void testRenewVaultToken_willUpdateCorrespondingPPT () throws IOException {
325+ VaultConnectorDTO vaultConnectorDTO = vaultEntityToDTO .createConnectorDTO (buildTokenBasedConnector ());
326+ vaultConnectorDTO .setRenewAppRoleToken (true );
327+ VaultConnector vaultConnector = vaultDTOToEntity .toConnectorEntity (vaultConnectorDTO );
328+ VaultConfigDTO vaultConfigDTO = (VaultConfigDTO ) getVaultConfigDTOWithAuthToken ();
329+ vaultConfigDTO .setEncryptionType (VAULT );
330+ Call <RestResponse <Boolean >> request = mock (Call .class );
331+ doReturn (request ).when (accountClient ).isFeatureFlagEnabled (any (), any ());
332+ when (request .execute ()).thenReturn (Response .success (new RestResponse <>(false )));
333+ when (ngConnectorSecretManagerService .getUsingIdentifier (any (), any (), any (), any (), anyBoolean ()))
334+ .thenReturn (vaultConfigDTO );
335+ when (delegateService .executeSyncTask (any ()))
336+ .thenReturn (NGVaultRenewalTaskResponse .builder ()
337+ .isSuccessful (true )
338+ .delegateMetaInfo (DelegateMetaInfo .builder ().hostName ("hostName" ).id ("id" ).build ())
339+ .build ());
340+ when (ngEncryptedDataService .updateSecretText (any (), any ())).thenReturn (NGEncryptedData .builder ().build ());
341+ when (connectorRepository .save (vaultConnector , ChangeType .NONE )).thenReturn (vaultConnector );
342+ ngVaultService .renewToken (vaultConnector );
343+ ArgumentCaptor <String > argumentCaptor = ArgumentCaptor .forClass (String .class );
344+ verify (ngConnectorSecretManagerService , times (1 )).getPerpetualTaskId (any (), any (), any (), argumentCaptor .capture ());
345+ assertThat (argumentCaptor .getValue ()).isEqualTo (vaultConnector .getIdentifier ());
346+ verify (ngConnectorSecretManagerService , times (1 )).resetHeartBeatTask (any (), any ());
347+ }
348+
288349 private VaultConnector buildAppRoleVaultConnector () {
289350 return VaultConnector .builder ()
290351 .accessType (AccessType .APP_ROLE )
@@ -295,12 +356,22 @@ private VaultConnector buildAppRoleVaultConnector() {
295356 .build ();
296357 }
297358
359+ private VaultConnector buildTokenBasedConnector () {
360+ return VaultConnector .builder ()
361+ .accessType (AccessType .TOKEN )
362+ .vaultUrl (HTTP_VAULT_URL )
363+ .authTokenRef ("tokenRef" )
364+ .namespace (randomAlphabetic (10 ))
365+ .build ();
366+ }
367+
298368 private SecretManagerConfigDTO getVaultConfigDTOWithAuthToken () {
299369 String authToken = "authToken" ;
300370 String secretEngineName = "secretEngine" ;
301371 VaultConfigDTO vaultConfigDTO = VaultConfigDTO .builder ().build ();
302372 vaultConfigDTO .setIdentifier (KMS_IDENTIFIER );
303373 vaultConfigDTO .setVaultUrl (HTTP_VAULT_URL );
374+ vaultConfigDTO .setName (CONNECTOR_NAME );
304375 vaultConfigDTO .setAuthToken (authToken );
305376 vaultConfigDTO .setSecretEngineName (secretEngineName );
306377 vaultConfigDTO .setUseVaultAgent (false );
@@ -309,6 +380,20 @@ private SecretManagerConfigDTO getVaultConfigDTOWithAuthToken() {
309380 return vaultConfigDTO ;
310381 }
311382
383+ private SecretManagerConfigDTO getVaultConfigDTOWithAppRoleAuth () {
384+ String secretEngineName = "secretEngine" ;
385+ VaultConfigDTO vaultConfigDTO = VaultConfigDTO .builder ().build ();
386+ vaultConfigDTO .setIdentifier (KMS_IDENTIFIER );
387+ vaultConfigDTO .setName (CONNECTOR_NAME );
388+ vaultConfigDTO .setVaultUrl (HTTP_VAULT_URL );
389+ vaultConfigDTO .setAppRoleId ("test-role-id" );
390+ vaultConfigDTO .setSecretEngineName (secretEngineName );
391+ vaultConfigDTO .setUseVaultAgent (false );
392+ vaultConfigDTO .setUseK8sAuth (false );
393+ vaultConfigDTO .setUseAwsIam (false );
394+ return vaultConfigDTO ;
395+ }
396+
312397 private void setUpCommonMocks () throws IOException {
313398 when (ngEncryptedDataService .get (any (), any (), any (), any ())).thenReturn (NGEncryptedData .builder ().build ());
314399 when (ngEncryptorService .fetchSecretValue (any (), any (), any ())).thenReturn (randomAlphabetic (10 ).toCharArray ());
0 commit comments