Skip to content

Commit 68600b8

Browse files
author
t-qini
committed
Switch from fake storage to mock clients in azure unit tests.
1 parent cc75cd5 commit 68600b8

25 files changed

+1512
-1198
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/BUILD

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,31 @@ go_library(
6464
"//staging/src/k8s.io/legacy-cloud-providers/azure/cache:go_default_library",
6565
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
6666
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/diskclient:go_default_library",
67+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/diskclient/mockdiskclient:go_default_library",
68+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/fileclient:go_default_library",
6769
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/interfaceclient:go_default_library",
70+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/interfaceclient/mockinterfaceclient:go_default_library",
6871
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient:go_default_library",
72+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient/mockloadbalancerclient:go_default_library",
6973
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient:go_default_library",
74+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient/mockpublicipclient:go_default_library",
7075
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient:go_default_library",
7176
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient/mockrouteclient:go_default_library",
7277
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient:go_default_library",
7378
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient:go_default_library",
7479
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient:go_default_library",
80+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient/mocksecuritygroupclient:go_default_library",
7581
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient:go_default_library",
7682
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient:go_default_library",
7783
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient:go_default_library",
7884
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient:go_default_library",
7985
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient:go_default_library",
86+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient/mockvmclient:go_default_library",
8087
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient:go_default_library",
8188
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient:go_default_library",
89+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient/mockvmssclient:go_default_library",
8290
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient:go_default_library",
91+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient/mockvmssvmclient:go_default_library",
8392
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
8493
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute:go_default_library",
8594
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library",
@@ -130,8 +139,18 @@ go_test(
130139
"//staging/src/k8s.io/legacy-cloud-providers/azure/auth:go_default_library",
131140
"//staging/src/k8s.io/legacy-cloud-providers/azure/cache:go_default_library",
132141
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
142+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/diskclient/mockdiskclient:go_default_library",
143+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/fileclient/mockfileclient:go_default_library",
144+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/interfaceclient/mockinterfaceclient:go_default_library",
145+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient/mockloadbalancerclient:go_default_library",
146+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient/mockpublicipclient:go_default_library",
133147
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient:go_default_library",
148+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient/mocksecuritygroupclient:go_default_library",
149+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/mockstorageaccountclient:go_default_library",
134150
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient:go_default_library",
151+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient/mockvmclient:go_default_library",
152+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient/mockvmssclient:go_default_library",
153+
"//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient/mockvmssvmclient:go_default_library",
135154
"//staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets:go_default_library",
136155
"//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
137156
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute:go_default_library",

staging/src/k8s.io/legacy-cloud-providers/azure/azure.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import (
4747
azcache "k8s.io/legacy-cloud-providers/azure/cache"
4848
azclients "k8s.io/legacy-cloud-providers/azure/clients"
4949
"k8s.io/legacy-cloud-providers/azure/clients/diskclient"
50+
"k8s.io/legacy-cloud-providers/azure/clients/fileclient"
5051
"k8s.io/legacy-cloud-providers/azure/clients/interfaceclient"
5152
"k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient"
5253
"k8s.io/legacy-cloud-providers/azure/clients/publicipclient"
@@ -61,6 +62,7 @@ import (
6162
"k8s.io/legacy-cloud-providers/azure/clients/vmssclient"
6263
"k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient"
6364
"k8s.io/legacy-cloud-providers/azure/retry"
65+
6466
"sigs.k8s.io/yaml"
6567
)
6668

@@ -234,7 +236,7 @@ type Cloud struct {
234236
StorageAccountClient storageaccountclient.Interface
235237
DisksClient diskclient.Interface
236238
SnapshotsClient snapshotclient.Interface
237-
FileClient FileClient
239+
FileClient fileclient.Interface
238240
VirtualMachineScaleSetsClient vmssclient.Interface
239241
VirtualMachineScaleSetVMsClient vmssvmclient.Interface
240242
VirtualMachineSizesClient vmsizeclient.Interface
@@ -590,7 +592,7 @@ func (az *Cloud) configAzureClients(
590592
az.SecurityGroupsClient = securitygroupclient.New(securityGroupClientConfig)
591593
az.PublicIPAddressesClient = publicipclient.New(publicIPClientConfig)
592594
// fileClient is not based on armclient, but it's still backoff retried.
593-
az.FileClient = newAzureFileClient(&az.Environment, azClientConfig.Backoff)
595+
az.FileClient = fileclient.NewAzureFileClient(&az.Environment, azClientConfig.Backoff)
594596
}
595597

596598
func (az *Cloud) getAzureClientConfig(servicePrincipalToken *adal.ServicePrincipalToken) *azclients.ClientConfig {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,20 @@ package azure
2020

2121
import (
2222
"fmt"
23+
"net/http"
2324
"reflect"
2425
"testing"
2526

2627
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute"
28+
"github.com/Azure/go-autorest/autorest/to"
2729
"github.com/golang/mock/gomock"
2830
"github.com/stretchr/testify/assert"
2931

3032
"k8s.io/apimachinery/pkg/types"
33+
cloudprovider "k8s.io/cloud-provider"
34+
"k8s.io/legacy-cloud-providers/azure/clients/diskclient/mockdiskclient"
35+
"k8s.io/legacy-cloud-providers/azure/clients/vmclient/mockvmclient"
36+
"k8s.io/legacy-cloud-providers/azure/retry"
3137
"k8s.io/utils/pointer"
3238
)
3339

@@ -40,12 +46,14 @@ func TestCommonAttachDisk(t *testing.T) {
4046
vmList map[string]string
4147
nodeName types.NodeName
4248
isDataDisksFull bool
49+
existedDisk compute.Disk
4350
expectedLun int32
4451
expectedErr bool
4552
}{
4653
{
4754
desc: "LUN -1 and error shall be returned if there's no such instance corresponding to given nodeName",
4855
nodeName: "vm1",
56+
existedDisk: compute.Disk{Name: to.StringPtr("disk-name")},
4957
expectedLun: -1,
5058
expectedErr: true,
5159
},
@@ -54,13 +62,23 @@ func TestCommonAttachDisk(t *testing.T) {
5462
vmList: map[string]string{"vm1": "PowerState/Running"},
5563
nodeName: "vm1",
5664
isDataDisksFull: true,
65+
existedDisk: compute.Disk{Name: to.StringPtr("disk-name")},
5766
expectedLun: -1,
5867
expectedErr: true,
5968
},
6069
{
6170
desc: "correct LUN and no error shall be returned if everything is good",
6271
vmList: map[string]string{"vm1": "PowerState/Running"},
6372
nodeName: "vm1",
73+
existedDisk: compute.Disk{Name: to.StringPtr("disk-name")},
74+
expectedLun: 1,
75+
expectedErr: false,
76+
},
77+
{
78+
desc: "an error shall be returned if there's no matching disk",
79+
vmList: map[string]string{"vm1": "PowerState/Running"},
80+
nodeName: "vm1",
81+
existedDisk: compute.Disk{Name: to.StringPtr("disk-name-1")},
6482
expectedLun: -1,
6583
expectedErr: true,
6684
},
@@ -76,9 +94,21 @@ func TestCommonAttachDisk(t *testing.T) {
7694
cloud: testCloud,
7795
vmLockMap: newLockMap(),
7896
}
79-
diskURI := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/disks/disk-name",
80-
testCloud.SubscriptionID, testCloud.ResourceGroup)
81-
setTestVirtualMachines(testCloud, test.vmList, test.isDataDisksFull)
97+
diskURI := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/disks/%s",
98+
testCloud.SubscriptionID, testCloud.ResourceGroup, *test.existedDisk.Name)
99+
expectedVMs := setTestVirtualMachines(testCloud, test.vmList, test.isDataDisksFull)
100+
mockVMsClient := testCloud.VirtualMachinesClient.(*mockvmclient.MockInterface)
101+
for _, vm := range expectedVMs {
102+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, *vm.Name, gomock.Any()).Return(vm, nil).AnyTimes()
103+
}
104+
if len(expectedVMs) == 0 {
105+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, gomock.Any(), gomock.Any()).Return(compute.VirtualMachine{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
106+
}
107+
mockVMsClient.EXPECT().Update(gomock.Any(), testCloud.ResourceGroup, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
108+
109+
mockDisksClient := testCloud.DisksClient.(*mockdiskclient.MockInterface)
110+
mockDisksClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, "disk-name").Return(test.existedDisk, nil).AnyTimes()
111+
mockDisksClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, gomock.Not("disk-name")).Return(compute.Disk{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
82112

83113
lun, err := common.AttachDisk(true, "", diskURI, test.nodeName, compute.CachingTypesReadOnly)
84114
assert.Equal(t, test.expectedLun, lun, "TestCase[%d]: %s", i, test.desc)
@@ -130,7 +160,15 @@ func TestCommonDetachDisk(t *testing.T) {
130160
}
131161
diskURI := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/disks/disk-name",
132162
testCloud.SubscriptionID, testCloud.ResourceGroup)
133-
setTestVirtualMachines(testCloud, test.vmList, false)
163+
expectedVMs := setTestVirtualMachines(testCloud, test.vmList, false)
164+
mockVMsClient := testCloud.VirtualMachinesClient.(*mockvmclient.MockInterface)
165+
for _, vm := range expectedVMs {
166+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, *vm.Name, gomock.Any()).Return(vm, nil).AnyTimes()
167+
}
168+
if len(expectedVMs) == 0 {
169+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, gomock.Any(), gomock.Any()).Return(compute.VirtualMachine{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
170+
}
171+
mockVMsClient.EXPECT().Update(gomock.Any(), testCloud.ResourceGroup, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
134172

135173
err := common.DetachDisk(test.diskName, diskURI, test.nodeName)
136174
assert.Equal(t, test.expectedErr, err != nil, "TestCase[%d]: %s, err: %v", i, test.desc, err)
@@ -172,7 +210,11 @@ func TestGetDiskLun(t *testing.T) {
172210
cloud: testCloud,
173211
vmLockMap: newLockMap(),
174212
}
175-
setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
213+
expectedVMs := setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
214+
mockVMsClient := testCloud.VirtualMachinesClient.(*mockvmclient.MockInterface)
215+
for _, vm := range expectedVMs {
216+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, *vm.Name, gomock.Any()).Return(vm, nil).AnyTimes()
217+
}
176218

177219
lun, err := common.GetDiskLun(test.diskName, test.diskURI, "vm1")
178220
assert.Equal(t, test.expectedLun, lun, "TestCase[%d]: %s", i, test.desc)
@@ -214,7 +256,11 @@ func TestGetNextDiskLun(t *testing.T) {
214256
cloud: testCloud,
215257
vmLockMap: newLockMap(),
216258
}
217-
setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, test.isDataDisksFull)
259+
expectedVMs := setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, test.isDataDisksFull)
260+
mockVMsClient := testCloud.VirtualMachinesClient.(*mockvmclient.MockInterface)
261+
for _, vm := range expectedVMs {
262+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, *vm.Name, gomock.Any()).Return(vm, nil).AnyTimes()
263+
}
218264

219265
lun, err := common.GetNextDiskLun("vm1")
220266
assert.Equal(t, test.expectedLun, lun, "TestCase[%d]: %s", i, test.desc)
@@ -259,15 +305,20 @@ func TestDisksAreAttached(t *testing.T) {
259305
cloud: testCloud,
260306
vmLockMap: newLockMap(),
261307
}
262-
setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
308+
expectedVMs := setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
309+
mockVMsClient := testCloud.VirtualMachinesClient.(*mockvmclient.MockInterface)
310+
for _, vm := range expectedVMs {
311+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, *vm.Name, gomock.Any()).Return(vm, nil).AnyTimes()
312+
}
313+
mockVMsClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, "vm2", gomock.Any()).Return(compute.VirtualMachine{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
263314

264315
attached, err := common.DisksAreAttached(test.diskNames, test.nodeName)
265316
assert.Equal(t, test.expectedAttached, attached, "TestCase[%d]: %s", i, test.desc)
266317
assert.Equal(t, test.expectedErr, err != nil, "TestCase[%d]: %s", i, test.desc)
267318
}
268319
}
269320

270-
func TestFilteredDetatchingDisks(t *testing.T) {
321+
func TestFilteredDetachingDisks(t *testing.T) {
271322

272323
disks := []compute.DataDisk{
273324
{
@@ -448,10 +499,10 @@ func TestCheckDiskExists(t *testing.T) {
448499
newDiskName := "newdisk"
449500
newDiskURI := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/disks/%s",
450501
testCloud.SubscriptionID, testCloud.ResourceGroup, newDiskName)
451-
fDC := newFakeDisksClient()
452-
rerr := fDC.CreateOrUpdate(ctx, testCloud.ResourceGroup, newDiskName, compute.Disk{})
453-
assert.Equal(t, rerr == nil, true, "return error: %v", rerr)
454-
testCloud.DisksClient = fDC
502+
503+
mockDisksClient := testCloud.DisksClient.(*mockdiskclient.MockInterface)
504+
mockDisksClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, newDiskName).Return(compute.Disk{}, nil).AnyTimes()
505+
mockDisksClient.EXPECT().Get(gomock.Any(), gomock.Not(testCloud.ResourceGroup), gomock.Any()).Return(compute.Disk{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
455506

456507
testCases := []struct {
457508
diskURI string
@@ -503,10 +554,10 @@ func TestFilterNonExistingDisks(t *testing.T) {
503554
testCloud.SubscriptionID, testCloud.ResourceGroup)
504555
newDiskName := "newdisk"
505556
newDiskURI := diskURIPrefix + newDiskName
506-
fDC := newFakeDisksClient()
507-
rerr := fDC.CreateOrUpdate(ctx, testCloud.ResourceGroup, newDiskName, compute.Disk{})
508-
assert.Equal(t, rerr == nil, true, "return error: %v", rerr)
509-
testCloud.DisksClient = fDC
557+
558+
mockDisksClient := testCloud.DisksClient.(*mockdiskclient.MockInterface)
559+
mockDisksClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, newDiskName).Return(compute.Disk{}, nil).AnyTimes()
560+
mockDisksClient.EXPECT().Get(gomock.Any(), testCloud.ResourceGroup, gomock.Not(newDiskName)).Return(compute.Disk{}, &retry.Error{HTTPStatusCode: http.StatusNotFound, RawError: cloudprovider.InstanceNotFound}).AnyTimes()
510561

511562
disks := []compute.DataDisk{
512563
{

0 commit comments

Comments
 (0)