Skip to content

Commit

Permalink
test: Added unit test for getVolumes method for getting Secret Volume…
Browse files Browse the repository at this point in the history
… in aci_volumes (#499)
  • Loading branch information
nidhunge authored Mar 28, 2023
1 parent d6d00f4 commit bc92cae
Showing 1 changed file with 113 additions and 0 deletions.
113 changes: 113 additions & 0 deletions pkg/provider/aci_volumes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"gotest.tools/assert"
is "gotest.tools/assert/cmp"
v1 "k8s.io/api/core/v1"
errors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand Down Expand Up @@ -490,3 +491,115 @@ func TestCreatePodWithCSIVolume(t *testing.T) {
})
}
}

func TestGetVolumesForSecretVolume(t *testing.T) {
fakeVolumeSecret := "fake-volume-secret"
secretVolumeName := "SecretVolume"
secretName := "api-key"

fakeSecret := v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: fakeVolumeSecret,
Namespace: podNamespace,
},
Data: map[string][]byte{
azureFileStorageAccountName: []byte("azureFileStorageAccountName"),
azureFileStorageAccountKey: []byte("azureFileStorageAccountKey")},
}

setOptional := new(bool)
*setOptional = false

fakePodVolumes := []v1.Volume{
{
Name: emptyVolumeName,
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{},
},
},
{
Name: secretVolumeName,
VolumeSource: v1.VolumeSource{
Secret: &v1.SecretVolumeSource{
SecretName: secretName,
Items: []v1.KeyToPath{
{
Key: "azureFileStorageAccountName",
Path: "azureFileStorageAccountName",
},
},
Optional: setOptional,
},
},
},
}

mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

aciMocks := createNewACIMock()

cases := []struct {
description string
callSecretMocks func(secretMock *MockSecretLister)
expectedError error
}{
{
description: "Secret is nil and returns error while Optional is set to false",
callSecretMocks: func(secretMock *MockSecretLister) {
for _, volume := range fakePodVolumes {
if volume.Name == secretVolumeName {
mockSecretNamespaceLister := NewMockSecretNamespaceLister(mockCtrl)
secretMock.EXPECT().Secrets(podNamespace).Return(mockSecretNamespaceLister)
mockSecretNamespaceLister.EXPECT().Get(volume.Secret.SecretName).Return(nil, errors.NewNotFound(v1.Resource("secret"), secretName))
}
}
},
expectedError: fmt.Errorf("secret %s is required by Pod %s and does not exist", secretName, podName),
},
{
description: "Secret returns a valid value",
callSecretMocks: func(secretMock *MockSecretLister) {
for _, volume := range fakePodVolumes {
if volume.Name == secretVolumeName {
mockSecretNamespaceLister := NewMockSecretNamespaceLister(mockCtrl)
secretMock.EXPECT().Secrets(podNamespace).Return(mockSecretNamespaceLister)
mockSecretNamespaceLister.EXPECT().Get(volume.Secret.SecretName).Return(&fakeSecret, nil)
}
}
},
expectedError: nil,
},
}

for _, tc := range cases {
t.Run(tc.description, func(t *testing.T) {
mockSecretLister := NewMockSecretLister(mockCtrl)

pod := testsutil.CreatePodObj(podName, podNamespace)
tc.callSecretMocks(mockSecretLister)

pod.Spec.Volumes = fakePodVolumes

provider, err := createTestProvider(aciMocks, NewMockConfigMapLister(mockCtrl),
mockSecretLister, NewMockPodLister(mockCtrl))
if err != nil {
t.Fatal("Unable to create test provider", err)
}

volumes,err := provider.getVolumes(context.Background(), pod)

if tc.expectedError == nil {
azureStorageAccountName := base64.StdEncoding.EncodeToString([]byte("azureFileStorageAccountName"))
azureStorageAccountKey := base64.StdEncoding.EncodeToString([]byte("azureFileStorageAccountKey"))
assert.NilError(t, tc.expectedError, err)
assert.DeepEqual(t, *volumes[1].Secret[azureFileStorageAccountName], azureStorageAccountName)
assert.DeepEqual(t, *volumes[1].Secret[azureFileStorageAccountKey], azureStorageAccountKey)
} else {
assert.Equal(t, tc.expectedError.Error(), err.Error())
}

})
}

}

0 comments on commit bc92cae

Please sign in to comment.