@@ -18,16 +18,12 @@ import (
1818 "github.com/hashicorp/hcp-sdk-go/clients/cloud-vault-secrets/preview/2023-11-28/models"
1919 "github.com/stretchr/testify/assert"
2020 "github.com/stretchr/testify/require"
21- corev1 "k8s.io/api/core/v1"
22- apierrors "k8s.io/apimachinery/pkg/api/errors"
2321 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2422 "sigs.k8s.io/controller-runtime/pkg/client"
25- ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
2623
2724 secretsv1beta1 "github.com/hashicorp/vault-secrets-operator/api/v1beta1"
2825 "github.com/hashicorp/vault-secrets-operator/common"
2926 "github.com/hashicorp/vault-secrets-operator/helpers"
30- "github.com/hashicorp/vault-secrets-operator/internal/testutils"
3127)
3228
3329var _ runtime.ClientTransport = (* fakeHVSTransport )(nil )
@@ -1229,158 +1225,158 @@ func Test_makeShadowObjKey(t *testing.T) {
12291225 }
12301226}
12311227
1232- func Test_CleanupOrphanedShadowSecrets (t * testing.T ) {
1233- deletionTimestamp := metav1 .Now ()
1234-
1235- tests := map [string ]struct {
1236- o * secretsv1beta1.HCPVaultSecretsApp
1237- secret * corev1.Secret
1238- isHCPVaultSecretsAppDeletionExpected bool
1239- isShadowSecretDeletionExpected bool
1240- }{
1241- "deleted-secret-hvsapp-owner" : {
1242- o : & secretsv1beta1.HCPVaultSecretsApp {
1243- TypeMeta : metav1.TypeMeta {
1244- Kind : HCPVaultSecretsApp .String (),
1245- APIVersion : secretsv1beta1 .GroupVersion .Version ,
1246- },
1247- ObjectMeta : metav1.ObjectMeta {
1248- UID : "hvsApp1UID" ,
1249- Namespace : "hvsApp1Namespace" ,
1250- Name : "hvsApp1" ,
1251- Finalizers : []string {hcpVaultSecretsAppFinalizer },
1252- },
1253- },
1254- secret : & corev1.Secret {
1255- ObjectMeta : metav1.ObjectMeta {
1256- Namespace : common .OperatorNamespace ,
1257- Name : "shadowSecret1" ,
1258- DeletionTimestamp : & deletionTimestamp ,
1259- Finalizers : []string {vaultDynamicSecretFinalizer },
1260- Labels : map [string ]string {
1261- hvsaLabelPrefix + "/namespace" : "hvsApp1Namespace" ,
1262- hvsaLabelPrefix + "/name" : "hvsApp1" ,
1263- "app.kubernetes.io/component" : "hvs-dynamic-secret-cache" ,
1264- helpers .LabelOwnerRefUID : "hvsApp1UID" ,
1265- },
1266- },
1267- },
1268- isHCPVaultSecretsAppDeletionExpected : true ,
1269- isShadowSecretDeletionExpected : true ,
1270- },
1271- "deleted-secret-hvsapp-not-owner" : {
1272- o : & secretsv1beta1.HCPVaultSecretsApp {
1273- TypeMeta : metav1.TypeMeta {
1274- Kind : HCPVaultSecretsApp .String (),
1275- APIVersion : secretsv1beta1 .GroupVersion .Version ,
1276- },
1277- ObjectMeta : metav1.ObjectMeta {
1278- UID : "hvsApp2UID" ,
1279- Namespace : "hvsApp2Namespace" ,
1280- Name : "hvsApp2" ,
1281- Finalizers : []string {hcpVaultSecretsAppFinalizer },
1282- },
1283- },
1284- secret : & corev1.Secret {
1285- ObjectMeta : metav1.ObjectMeta {
1286- Namespace : common .OperatorNamespace ,
1287- Name : "shadowSecret2" ,
1288- DeletionTimestamp : & deletionTimestamp ,
1289- Finalizers : []string {vaultDynamicSecretFinalizer },
1290- Labels : map [string ]string {
1291- "app.kubernetes.io/component" : "hvs-dynamic-secret-cache" ,
1292- },
1293- },
1294- },
1295- isShadowSecretDeletionExpected : true ,
1296- },
1297- "deleted-secret-hvsapp-not-found" : {
1298- secret : & corev1.Secret {
1299- ObjectMeta : metav1.ObjectMeta {
1300- Namespace : common .OperatorNamespace ,
1301- Name : "shadowSecret3" ,
1302- Labels : map [string ]string {
1303- "app.kubernetes.io/component" : "hvs-dynamic-secret-cache" ,
1304- },
1305- DeletionTimestamp : & deletionTimestamp ,
1306- Finalizers : []string {hcpVaultSecretsAppFinalizer },
1307- },
1308- },
1309- isShadowSecretDeletionExpected : true ,
1310- },
1311- "secret-not-dynamic" : {
1312- o : & secretsv1beta1.HCPVaultSecretsApp {
1313- TypeMeta : metav1.TypeMeta {
1314- Kind : HCPVaultSecretsApp .String (),
1315- APIVersion : secretsv1beta1 .GroupVersion .Version ,
1316- },
1317- ObjectMeta : metav1.ObjectMeta {
1318- UID : "hvsApp4UID" ,
1319- Namespace : "hvsApp4Namespace" ,
1320- Name : "hvsApp4" ,
1321- Finalizers : []string {hcpVaultSecretsAppFinalizer },
1322- },
1323- },
1324- secret : & corev1.Secret {
1325- ObjectMeta : metav1.ObjectMeta {
1326- Namespace : common .OperatorNamespace ,
1327- Name : "nonShadowSecret" ,
1328- DeletionTimestamp : & deletionTimestamp ,
1329- Finalizers : []string {vaultDynamicSecretFinalizer },
1330- Labels : map [string ]string {
1331- hvsaLabelPrefix + "/namespace" : "hvsApp4Namespace" ,
1332- hvsaLabelPrefix + "/name" : "hvsApp4" ,
1333- helpers .LabelOwnerRefUID : "hvsApp4UID" ,
1334- },
1335- },
1336- },
1337- isShadowSecretDeletionExpected : false ,
1338- },
1339- }
1340-
1341- ctx := context .Background ()
1342- clientBuilder := testutils .NewFakeClientBuilder ()
1343-
1344- for name , tt := range tests {
1345- t .Run (name , func (t * testing.T ) {
1346- client := clientBuilder .Build ()
1347- r := & HCPVaultSecretsAppReconciler {
1348- Client : client ,
1349- BackOffRegistry : NewBackOffRegistry (),
1350- referenceCache : newResourceReferenceCache (),
1351- }
1352-
1353- // create the HCPVaultSecretsApp if the test case has one
1354- if tt .o != nil {
1355- assert .NoError (t , client .Create (ctx , tt .o ))
1356- }
1357-
1358- // create the secret for the test case
1359- assert .NoError (t , client .Create (ctx , tt .secret ))
1360-
1361- // DeleteTimestamp is a read-only field, so Delete will need to be called to
1362- // simulate deletion of the HCPVaultSecretsApp
1363- if tt .isHCPVaultSecretsAppDeletionExpected {
1364- assert .NoError (t , client .Delete (ctx , tt .o ))
1365- }
1366-
1367- r .cleanupOrphanedShadowSecrets (ctx )
1368-
1369- if tt .isHCPVaultSecretsAppDeletionExpected {
1370- deletedHVSApp := & secretsv1beta1.HCPVaultSecretsApp {}
1371- err := r .Get (ctx , ctrlclient .ObjectKeyFromObject (tt .o ), deletedHVSApp )
1372- assert .True (t , apierrors .IsNotFound (err ))
1373- }
1374-
1375- if tt .isShadowSecretDeletionExpected {
1376- deletedSecret := & corev1.Secret {}
1377- err := r .Get (ctx , makeShadowObjKey (tt .secret ), deletedSecret )
1378- assert .True (t , apierrors .IsNotFound (err ))
1379- } else {
1380- secret := & corev1.Secret {}
1381- err := r .Get (ctx , ctrlclient .ObjectKeyFromObject (tt .secret ), secret )
1382- assert .False (t , apierrors .IsNotFound (err ))
1383- }
1384- })
1385- }
1386- }
1228+ // func Test_CleanupOrphanedShadowSecrets(t *testing.T) {
1229+ // deletionTimestamp := metav1.Now()
1230+
1231+ // tests := map[string]struct {
1232+ // o *secretsv1beta1.HCPVaultSecretsApp
1233+ // secret *corev1.Secret
1234+ // isHCPVaultSecretsAppDeletionExpected bool
1235+ // isShadowSecretDeletionExpected bool
1236+ // }{
1237+ // "deleted-secret-hvsapp-owner": {
1238+ // o: &secretsv1beta1.HCPVaultSecretsApp{
1239+ // TypeMeta: metav1.TypeMeta{
1240+ // Kind: HCPVaultSecretsApp.String(),
1241+ // APIVersion: secretsv1beta1.GroupVersion.Version,
1242+ // },
1243+ // ObjectMeta: metav1.ObjectMeta{
1244+ // UID: "hvsApp1UID",
1245+ // Namespace: "hvsApp1Namespace",
1246+ // Name: "hvsApp1",
1247+ // Finalizers: []string{hcpVaultSecretsAppFinalizer},
1248+ // },
1249+ // },
1250+ // secret: &corev1.Secret{
1251+ // ObjectMeta: metav1.ObjectMeta{
1252+ // Namespace: common.OperatorNamespace,
1253+ // Name: "shadowSecret1",
1254+ // DeletionTimestamp: &deletionTimestamp,
1255+ // Finalizers: []string{vaultDynamicSecretFinalizer},
1256+ // Labels: map[string]string{
1257+ // hvsaLabelPrefix + "/namespace": "hvsApp1Namespace",
1258+ // hvsaLabelPrefix + "/name": "hvsApp1",
1259+ // "app.kubernetes.io/component": "hvs-dynamic-secret-cache",
1260+ // helpers.LabelOwnerRefUID: "hvsApp1UID",
1261+ // },
1262+ // },
1263+ // },
1264+ // isHCPVaultSecretsAppDeletionExpected: true,
1265+ // isShadowSecretDeletionExpected: true,
1266+ // },
1267+ // "deleted-secret-hvsapp-not-owner": {
1268+ // o: &secretsv1beta1.HCPVaultSecretsApp{
1269+ // TypeMeta: metav1.TypeMeta{
1270+ // Kind: HCPVaultSecretsApp.String(),
1271+ // APIVersion: secretsv1beta1.GroupVersion.Version,
1272+ // },
1273+ // ObjectMeta: metav1.ObjectMeta{
1274+ // UID: "hvsApp2UID",
1275+ // Namespace: "hvsApp2Namespace",
1276+ // Name: "hvsApp2",
1277+ // Finalizers: []string{hcpVaultSecretsAppFinalizer},
1278+ // },
1279+ // },
1280+ // secret: &corev1.Secret{
1281+ // ObjectMeta: metav1.ObjectMeta{
1282+ // Namespace: common.OperatorNamespace,
1283+ // Name: "shadowSecret2",
1284+ // DeletionTimestamp: &deletionTimestamp,
1285+ // Finalizers: []string{vaultDynamicSecretFinalizer},
1286+ // Labels: map[string]string{
1287+ // "app.kubernetes.io/component": "hvs-dynamic-secret-cache",
1288+ // },
1289+ // },
1290+ // },
1291+ // isShadowSecretDeletionExpected: true,
1292+ // },
1293+ // "deleted-secret-hvsapp-not-found": {
1294+ // secret: &corev1.Secret{
1295+ // ObjectMeta: metav1.ObjectMeta{
1296+ // Namespace: common.OperatorNamespace,
1297+ // Name: "shadowSecret3",
1298+ // Labels: map[string]string{
1299+ // "app.kubernetes.io/component": "hvs-dynamic-secret-cache",
1300+ // },
1301+ // DeletionTimestamp: &deletionTimestamp,
1302+ // Finalizers: []string{hcpVaultSecretsAppFinalizer},
1303+ // },
1304+ // },
1305+ // isShadowSecretDeletionExpected: true,
1306+ // },
1307+ // "secret-not-dynamic": {
1308+ // o: &secretsv1beta1.HCPVaultSecretsApp{
1309+ // TypeMeta: metav1.TypeMeta{
1310+ // Kind: HCPVaultSecretsApp.String(),
1311+ // APIVersion: secretsv1beta1.GroupVersion.Version,
1312+ // },
1313+ // ObjectMeta: metav1.ObjectMeta{
1314+ // UID: "hvsApp4UID",
1315+ // Namespace: "hvsApp4Namespace",
1316+ // Name: "hvsApp4",
1317+ // Finalizers: []string{hcpVaultSecretsAppFinalizer},
1318+ // },
1319+ // },
1320+ // secret: &corev1.Secret{
1321+ // ObjectMeta: metav1.ObjectMeta{
1322+ // Namespace: common.OperatorNamespace,
1323+ // Name: "nonShadowSecret",
1324+ // DeletionTimestamp: &deletionTimestamp,
1325+ // Finalizers: []string{vaultDynamicSecretFinalizer},
1326+ // Labels: map[string]string{
1327+ // hvsaLabelPrefix + "/namespace": "hvsApp4Namespace",
1328+ // hvsaLabelPrefix + "/name": "hvsApp4",
1329+ // helpers.LabelOwnerRefUID: "hvsApp4UID",
1330+ // },
1331+ // },
1332+ // },
1333+ // isShadowSecretDeletionExpected: false,
1334+ // },
1335+ // }
1336+
1337+ // ctx := context.Background()
1338+ // clientBuilder := testutils.NewFakeClientBuilder()
1339+
1340+ // for name, tt := range tests {
1341+ // t.Run(name, func(t *testing.T) {
1342+ // client := clientBuilder.Build()
1343+ // r := &HCPVaultSecretsAppReconciler{
1344+ // Client: client,
1345+ // BackOffRegistry: NewBackOffRegistry(),
1346+ // referenceCache: newResourceReferenceCache(),
1347+ // }
1348+
1349+ // // create the HCPVaultSecretsApp if the test case has one
1350+ // if tt.o != nil {
1351+ // assert.NoError(t, client.Create(ctx, tt.o))
1352+ // }
1353+
1354+ // // create the secret for the test case
1355+ // assert.NoError(t, client.Create(ctx, tt.secret))
1356+
1357+ // // DeleteTimestamp is a read-only field, so Delete will need to be called to
1358+ // // simulate deletion of the HCPVaultSecretsApp
1359+ // if tt.isHCPVaultSecretsAppDeletionExpected {
1360+ // assert.NoError(t, client.Delete(ctx, tt.o))
1361+ // }
1362+
1363+ // r.cleanupOrphanedShadowSecrets(ctx)
1364+
1365+ // if tt.isHCPVaultSecretsAppDeletionExpected {
1366+ // deletedHVSApp := &secretsv1beta1.HCPVaultSecretsApp{}
1367+ // err := r.Get(ctx, ctrlclient.ObjectKeyFromObject(tt.o), deletedHVSApp)
1368+ // assert.True(t, apierrors.IsNotFound(err))
1369+ // }
1370+
1371+ // if tt.isShadowSecretDeletionExpected {
1372+ // deletedSecret := &corev1.Secret{}
1373+ // err := r.Get(ctx, makeShadowObjKey(tt.secret), deletedSecret)
1374+ // assert.True(t, apierrors.IsNotFound(err))
1375+ // } else {
1376+ // secret := &corev1.Secret{}
1377+ // err := r.Get(ctx, ctrlclient.ObjectKeyFromObject(tt.secret), secret)
1378+ // assert.False(t, apierrors.IsNotFound(err))
1379+ // }
1380+ // })
1381+ // }
1382+ // }
0 commit comments