Browse Source

feat(oracle): implement SecretExists (#5672)

Signed-off-by: Anders Swanson <anders.swanson@oracle.com>
Co-authored-by: Gergely Brautigam <skarlso777@gmail.com>
Anders Swanson 4 months ago
parent
commit
710fc06d2e
2 changed files with 56 additions and 2 deletions
  1. 11 2
      providers/v1/oracle/oracle.go
  2. 45 0
      providers/v1/oracle/oracle_test.go

+ 11 - 2
providers/v1/oracle/oracle.go

@@ -190,8 +190,17 @@ func (vms *VaultManagementService) DeleteSecret(ctx context.Context, remoteRef e
 }
 }
 
 
 // SecretExists checks if a secret exists in the Oracle Cloud Infrastructure Vault.
 // SecretExists checks if a secret exists in the Oracle Cloud Infrastructure Vault.
-func (vms *VaultManagementService) SecretExists(_ context.Context, _ esv1.PushSecretRemoteRef) (bool, error) {
-	return false, errors.New("not implemented")
+func (vms *VaultManagementService) SecretExists(ctx context.Context, pushSecretRef esv1.PushSecretRemoteRef) (bool, error) {
+	secretName := pushSecretRef.GetRemoteKey()
+	_, action, err := vms.getSecretBundleWithCode(ctx, secretName)
+	switch action {
+	case SecretNotFound:
+		return false, nil
+	case SecretExists:
+		return true, nil
+	default:
+		return false, sanitizeOCISDKErr(err)
+	}
 }
 }
 
 
 // GetAllSecrets retrieves all secrets from the Oracle Cloud Infrastructure Vault that match the given criteria.
 // GetAllSecrets retrieves all secrets from the Oracle Cloud Infrastructure Vault that match the given criteria.

+ 45 - 0
providers/v1/oracle/oracle_test.go

@@ -745,6 +745,51 @@ func TestOracleVaultDeleteSecret(t *testing.T) {
 	}
 	}
 }
 }
 
 
+func TestOracleVaultSecretExists(t *testing.T) {
+	var testCases = map[string]struct {
+		vms       *VaultManagementService
+		remoteRef esv1.PushSecretRemoteRef
+		ok        bool
+	}{
+		"ok if secret exists": {
+			&VaultManagementService{
+				VaultClient: &fakeoracle.OracleMockVaultClient{},
+				Client: &fakeoracle.OracleMockClient{
+					SecretBundles: map[string]secrets.SecretBundle{
+						s1id: s1bundle,
+					},
+				},
+			},
+			esv1alpha1.PushSecretRemoteRef{
+				RemoteKey: s1id,
+			},
+			true,
+		},
+		"not ok if secret doesn't exist": {
+			&VaultManagementService{
+				VaultClient: &fakeoracle.OracleMockVaultClient{},
+				Client: &fakeoracle.OracleMockClient{
+					SecretBundles: map[string]secrets.SecretBundle{
+						s1id: s1bundle,
+					},
+				},
+			},
+			esv1alpha1.PushSecretRemoteRef{
+				RemoteKey: s2id,
+			},
+			false,
+		},
+	}
+
+	for name, testCase := range testCases {
+		t.Run(name, func(t *testing.T) {
+			ok, err := testCase.vms.SecretExists(context.Background(), testCase.remoteRef)
+			assert.NoError(t, err)
+			assert.Equal(t, testCase.ok, ok)
+		})
+	}
+}
+
 var (
 var (
 	s1id      = "test1"
 	s1id      = "test1"
 	s2id      = "mysecret"
 	s2id      = "mysecret"