From 78b18ed6f4e571b95f3b375d9c28f5f6fb17e536 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Tue, 18 Feb 2020 07:52:49 +0000 Subject: [PATCH] Swith to mock clients for route/routetable/networkinterface tests --- .../k8s.io/legacy-cloud-providers/azure/BUILD | 9 + .../azure/azure_controller_common_test.go | 26 +- .../azure/azure_controller_standard_test.go | 16 +- .../azure/azure_fakes.go | 258 +--------------- .../azure/azure_instances_test.go | 14 +- .../azure/azure_loadbalancer_test.go | 74 ++++- .../azure/azure_routes_test.go | 131 ++++---- .../azure/azure_standard_test.go | 17 +- .../azure/azure_test.go | 269 +++++++++++----- .../azure/azure_vmsets.go | 2 + .../azure/azure_vmss_cache_test.go | 11 +- .../azure/azure_vmss_test.go | 29 +- .../azure/azure_wrap_test.go | 11 +- .../azure/mockvmsets/BUILD | 35 +++ .../azure/mockvmsets/azure_mock_vmsets.go | 289 ++++++++++++++++++ .../azure/mockvmsets/doc.go | 20 ++ vendor/modules.txt | 3 + 17 files changed, 769 insertions(+), 445 deletions(-) create mode 100644 staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/BUILD create mode 100644 staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/azure_mock_vmsets.go create mode 100644 staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/doc.go diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD index c8fae57ba9a..217bbc5f4f5 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD @@ -68,11 +68,14 @@ go_library( "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient/mockrouteclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient:go_default_library", @@ -85,6 +88,7 @@ go_library( "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", + "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/rubiojr/go-vhd/vhd:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/net:go_default_library", @@ -125,11 +129,15 @@ go_test( "//staging/src/k8s.io/legacy-cloud-providers/azure/auth:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/cache:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", + "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", "//vendor/sigs.k8s.io/yaml:go_default_library", @@ -151,6 +159,7 @@ filegroup( "//staging/src/k8s.io/legacy-cloud-providers/azure/cache:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:all-srcs", ], tags = ["automanaged"], diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go index 3b0162c7a0a..bbd872ac319 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go @@ -24,6 +24,7 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" @@ -31,6 +32,9 @@ import ( ) func TestCommonAttachDisk(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string vmList map[string]string @@ -63,7 +67,7 @@ func TestCommonAttachDisk(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) common := &controllerCommon{ location: testCloud.Location, storageEndpointSuffix: testCloud.Environment.StorageEndpointSuffix, @@ -83,6 +87,9 @@ func TestCommonAttachDisk(t *testing.T) { } func TestCommonDetachDisk(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string vmList map[string]string @@ -112,7 +119,7 @@ func TestCommonDetachDisk(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) common := &controllerCommon{ location: testCloud.Location, storageEndpointSuffix: testCloud.Environment.StorageEndpointSuffix, @@ -131,6 +138,9 @@ func TestCommonDetachDisk(t *testing.T) { } func TestGetDiskLun(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string diskName string @@ -153,7 +163,7 @@ func TestGetDiskLun(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) common := &controllerCommon{ location: testCloud.Location, storageEndpointSuffix: testCloud.Environment.StorageEndpointSuffix, @@ -171,6 +181,9 @@ func TestGetDiskLun(t *testing.T) { } func TestGetNextDiskLun(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string isDataDisksFull bool @@ -192,7 +205,7 @@ func TestGetNextDiskLun(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) common := &controllerCommon{ location: testCloud.Location, storageEndpointSuffix: testCloud.Environment.StorageEndpointSuffix, @@ -210,6 +223,9 @@ func TestGetNextDiskLun(t *testing.T) { } func TestDisksAreAttached(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string diskNames []string @@ -234,7 +250,7 @@ func TestDisksAreAttached(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) common := &controllerCommon{ location: testCloud.Location, storageEndpointSuffix: testCloud.Environment.StorageEndpointSuffix, diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_standard_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_standard_test.go index bafeca2ea5a..aca11ec04e0 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_standard_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_standard_test.go @@ -24,6 +24,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" @@ -35,6 +36,9 @@ var ( ) func TestStandardAttachDisk(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string nodeName types.NodeName @@ -53,7 +57,7 @@ func TestStandardAttachDisk(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) vmSet := testCloud.vmSet setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false) @@ -64,6 +68,9 @@ func TestStandardAttachDisk(t *testing.T) { } func TestStandardDetachDisk(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string nodeName types.NodeName @@ -90,7 +97,7 @@ func TestStandardDetachDisk(t *testing.T) { } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) vmSet := testCloud.vmSet setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false) @@ -100,6 +107,9 @@ func TestStandardDetachDisk(t *testing.T) { } func TestGetDataDisks(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + var testCases = []struct { desc string nodeName types.NodeName @@ -140,7 +150,7 @@ func TestGetDataDisks(t *testing.T) { }, } for i, test := range testCases { - testCloud := GetTestCloud() + testCloud := GetTestCloud(ctrl) vmSet := testCloud.vmSet setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go index fc9dda47404..6c29b68620c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go @@ -24,21 +24,20 @@ import ( "fmt" "math/rand" "net/http" - "strings" "sync" "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" - cloudprovider "k8s.io/cloud-provider" "k8s.io/legacy-cloud-providers/azure/auth" - azcache "k8s.io/legacy-cloud-providers/azure/cache" + "k8s.io/legacy-cloud-providers/azure/clients/routeclient/mockrouteclient" + "k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient" + "k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient" "k8s.io/legacy-cloud-providers/azure/retry" ) @@ -382,81 +381,6 @@ func (fVMC *fakeAzureVirtualMachinesClient) setFakeStore(store map[string]map[st fVMC.FakeStore = store } -type fakeAzureSubnetsClient struct { - mutex *sync.Mutex - FakeStore map[string]map[string]network.Subnet -} - -func newFakeAzureSubnetsClient() *fakeAzureSubnetsClient { - fASC := &fakeAzureSubnetsClient{} - fASC.FakeStore = make(map[string]map[string]network.Subnet) - fASC.mutex = &sync.Mutex{} - return fASC -} - -func (fASC *fakeAzureSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters network.Subnet) *retry.Error { - fASC.mutex.Lock() - defer fASC.mutex.Unlock() - - rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") - if _, ok := fASC.FakeStore[rgVnet]; !ok { - fASC.FakeStore[rgVnet] = make(map[string]network.Subnet) - } - fASC.FakeStore[rgVnet][subnetName] = subnetParameters - - return nil -} - -func (fASC *fakeAzureSubnetsClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string) *retry.Error { - fASC.mutex.Lock() - defer fASC.mutex.Unlock() - - rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") - if rgSubnets, ok := fASC.FakeStore[rgVnet]; ok { - if _, ok := rgSubnets[subnetName]; ok { - delete(rgSubnets, subnetName) - return nil - } - } - - return retry.GetError( - &http.Response{ - StatusCode: http.StatusNotFound, - }, - errors.New("Not such Subnet")) -} - -func (fASC *fakeAzureSubnetsClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, expand string) (result network.Subnet, err *retry.Error) { - fASC.mutex.Lock() - defer fASC.mutex.Unlock() - rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") - if _, ok := fASC.FakeStore[rgVnet]; ok { - if entity, ok := fASC.FakeStore[rgVnet][subnetName]; ok { - return entity, nil - } - } - return result, retry.GetError( - &http.Response{ - StatusCode: http.StatusNotFound, - }, - errors.New("Not such Subnet")) -} - -func (fASC *fakeAzureSubnetsClient) List(ctx context.Context, resourceGroupName string, virtualNetworkName string) (result []network.Subnet, err *retry.Error) { - fASC.mutex.Lock() - defer fASC.mutex.Unlock() - - rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") - var value []network.Subnet - if _, ok := fASC.FakeStore[rgVnet]; ok { - for _, v := range fASC.FakeStore[rgVnet] { - value = append(value, v) - } - } - - return value, nil -} - type fakeAzureNSGClient struct { mutex *sync.Mutex FakeStore map[string]map[string]network.SecurityGroup @@ -677,98 +601,6 @@ func (fVMSSC *fakeVirtualMachineScaleSetsClient) DeleteInstances(ctx context.Con return nil } -type fakeRoutesClient struct { - mutex *sync.Mutex - FakeStore map[string]map[string]network.Route - Calls []string -} - -func newFakeRoutesClient() *fakeRoutesClient { - fRC := &fakeRoutesClient{} - fRC.FakeStore = make(map[string]map[string]network.Route) - fRC.mutex = &sync.Mutex{} - return fRC -} - -func (fRC *fakeRoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, routeName string, routeParameters network.Route, etag string) *retry.Error { - fRC.mutex.Lock() - defer fRC.mutex.Unlock() - - fRC.Calls = append(fRC.Calls, "CreateOrUpdate") - - if _, ok := fRC.FakeStore[routeTableName]; !ok { - fRC.FakeStore[routeTableName] = make(map[string]network.Route) - } - fRC.FakeStore[routeTableName][routeName] = routeParameters - - return nil -} - -func (fRC *fakeRoutesClient) Delete(ctx context.Context, resourceGroupName string, routeTableName string, routeName string) *retry.Error { - fRC.mutex.Lock() - defer fRC.mutex.Unlock() - - fRC.Calls = append(fRC.Calls, "Delete") - - if routes, ok := fRC.FakeStore[routeTableName]; ok { - if _, ok := routes[routeName]; ok { - delete(routes, routeName) - return nil - } - } - - return retry.GetError( - &http.Response{ - StatusCode: http.StatusNotFound, - }, - errors.New("Not such Route")) -} - -type fakeRouteTablesClient struct { - mutex *sync.Mutex - FakeStore map[string]map[string]network.RouteTable - Calls []string -} - -func newFakeRouteTablesClient() *fakeRouteTablesClient { - fRTC := &fakeRouteTablesClient{} - fRTC.FakeStore = make(map[string]map[string]network.RouteTable) - fRTC.mutex = &sync.Mutex{} - return fRTC -} - -func (fRTC *fakeRouteTablesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, parameters network.RouteTable, etag string) *retry.Error { - fRTC.mutex.Lock() - defer fRTC.mutex.Unlock() - - fRTC.Calls = append(fRTC.Calls, "CreateOrUpdate") - - if _, ok := fRTC.FakeStore[resourceGroupName]; !ok { - fRTC.FakeStore[resourceGroupName] = make(map[string]network.RouteTable) - } - fRTC.FakeStore[resourceGroupName][routeTableName] = parameters - - return nil -} - -func (fRTC *fakeRouteTablesClient) Get(ctx context.Context, resourceGroupName string, routeTableName string, expand string) (result network.RouteTable, err *retry.Error) { - fRTC.mutex.Lock() - defer fRTC.mutex.Unlock() - - fRTC.Calls = append(fRTC.Calls, "Get") - - if _, ok := fRTC.FakeStore[resourceGroupName]; ok { - if entity, ok := fRTC.FakeStore[resourceGroupName][routeTableName]; ok { - return entity, nil - } - } - return result, retry.GetError( - &http.Response{ - StatusCode: http.StatusNotFound, - }, - errors.New("Not such RouteTable")) -} - type fakeFileClient struct { } @@ -925,82 +757,8 @@ func (fDC *fakeDisksClient) Get(ctx context.Context, resourceGroupName string, d errors.New("Not such Disk")) } -type fakeVMSet struct { - NodeToIP map[string]string - Err error -} - -func (f *fakeVMSet) GetInstanceIDByNodeName(name string) (string, error) { - return "", fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetInstanceTypeByNodeName(name string) (string, error) { - return "", fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetPrivateIPsByNodeName(nodeName string) ([]string, error) { - return []string{}, fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetIPByNodeName(name string) (string, string, error) { - ip, found := f.NodeToIP[name] - if !found { - return "", "", fmt.Errorf("not found") - } - - return ip, "", nil -} - -func (f *fakeVMSet) GetPrimaryInterface(nodeName string) (network.Interface, error) { - return network.Interface{}, fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetNodeNameByProviderID(providerID string) (types.NodeName, error) { - return types.NodeName(""), fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetZoneByNodeName(name string) (cloudprovider.Zone, error) { - return cloudprovider.Zone{}, fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetPrimaryVMSetName() string { - return "" -} - -func (f *fakeVMSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (availabilitySetNames *[]string, err error) { - return nil, fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, backendPoolID string, vmSetName string, isInternal bool) error { - return fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeName, backendPoolID string, vmSetName string, isInternal bool) error { - return fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool) error { - return fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error { - return fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) DetachDisk(diskName, diskURI string, nodeName types.NodeName) error { - return fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetDataDisks(nodeName types.NodeName, crt azcache.AzureCacheReadType) ([]compute.DataDisk, error) { - return nil, fmt.Errorf("unimplemented") -} - -func (f *fakeVMSet) GetPowerStatusByNodeName(name string) (string, error) { - return "", fmt.Errorf("unimplemented") -} - // GetTestCloud returns a fake azure cloud for unit tests in Azure related CSI drivers -func GetTestCloud() (az *Cloud) { +func GetTestCloud(ctrl *gomock.Controller) (az *Cloud) { az = &Cloud{ Config: Config{ AzureAuthConfig: auth.AzureAuthConfig{ @@ -1031,10 +789,10 @@ func GetTestCloud() (az *Cloud) { az.InterfacesClient = newFakeAzureInterfacesClient() az.LoadBalancerClient = newFakeAzureLBClient() az.PublicIPAddressesClient = newFakeAzurePIPClient(az.Config.SubscriptionID) - az.RoutesClient = newFakeRoutesClient() - az.RouteTablesClient = newFakeRouteTablesClient() + az.RoutesClient = mockrouteclient.NewMockInterface(ctrl) + az.RouteTablesClient = mockroutetableclient.NewMockInterface(ctrl) az.SecurityGroupsClient = newFakeAzureNSGClient() - az.SubnetsClient = newFakeAzureSubnetsClient() + az.SubnetsClient = mocksubnetclient.NewMockInterface(ctrl) az.VirtualMachineScaleSetsClient = newFakeVirtualMachineScaleSetsClient() az.VirtualMachineScaleSetVMsClient = newFakeVirtualMachineScaleSetVMsClient() az.VirtualMachinesClient = newFakeAzureVirtualMachinesClient() diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go index 483dce0e054..80e9ff85976 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go @@ -28,6 +28,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" @@ -82,7 +83,10 @@ func setTestVirtualMachines(c *Cloud, vmList map[string]string, isDataDisksFull } func TestInstanceID(t *testing.T) { - cloud := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + cloud := GetTestCloud(ctrl) cloud.Config.UseInstanceMetadata = true testcases := []struct { @@ -214,8 +218,10 @@ func TestInstanceShutdownByProviderID(t *testing.T) { }, } + ctrl := gomock.NewController(t) + defer ctrl.Finish() for _, test := range testcases { - cloud := GetTestCloud() + cloud := GetTestCloud(ctrl) setTestVirtualMachines(cloud, test.vmList, false) providerID := "azure://" + cloud.getStandardMachineID("subscription", "rg", test.nodeName) hasShutdown, err := cloud.InstanceShutdownByProviderID(context.Background(), providerID) @@ -236,7 +242,9 @@ func TestInstanceShutdownByProviderID(t *testing.T) { } func TestNodeAddresses(t *testing.T) { - cloud := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + cloud := GetTestCloud(ctrl) cloud.Config.UseInstanceMetadata = true metadataTemplate := `{"compute":{"name":"%s"},"network":{"interface":[{"ipv4":{"ipAddress":[{"privateIpAddress":"%s","publicIpAddress":"%s"}]},"ipv6":{"ipAddress":[{"privateIpAddress":"%s","publicIpAddress":"%s"}]}}]}}` diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer_test.go index 6589a8f8ff0..ea61a875735 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer_test.go @@ -29,10 +29,12 @@ import ( "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient" ) func TestFindProbe(t *testing.T) { @@ -378,12 +380,14 @@ func TestEnsureLoadBalancerDeleted(t *testing.T) { }, } - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) for i, c := range tests { clusterResources := getClusterResources(az, vmCount, availabilitySetCount) getTestSecurityGroup(az) if c.service.Annotations[ServiceAnnotationLoadBalancerInternal] == "true" { - addTestSubnet(t, az, &c.service) + validateTestSubnet(t, az, &c.service) } // create the service first. @@ -488,7 +492,9 @@ func TestServiceOwnsPublicIP(t *testing.T) { } func TestGetPublicIPAddressResourceGroup(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) for i, c := range []struct { desc string @@ -692,8 +698,10 @@ func TestGetServiceLoadBalancer(t *testing.T) { }, } + ctrl := gomock.NewController(t) + defer ctrl.Finish() for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 3, 3) for _, existingLB := range test.existingLBs { @@ -714,6 +722,9 @@ func TestGetServiceLoadBalancer(t *testing.T) { } func TestIsFrontendIPChanged(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string config network.FrontendIPConfiguration @@ -903,7 +914,10 @@ func TestIsFrontendIPChanged(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) + mockSubnetsClient := az.SubnetsClient.(*mocksubnetclient.MockInterface) + mockSubnetsClient.EXPECT().Get(gomock.Any(), "rg", "vnet", "testSubnet", "").Return(test.exsistingSubnet, nil).AnyTimes() + mockSubnetsClient.EXPECT().CreateOrUpdate(gomock.Any(), "rg", "vnet", "testSubnet", test.exsistingSubnet).Return(nil) err := az.SubnetsClient.CreateOrUpdate(context.TODO(), "rg", "vnet", "testSubnet", test.exsistingSubnet) if err != nil { t.Fatalf("TestCase[%d] meets unexpected error: %v", i, err) @@ -924,6 +938,9 @@ func TestIsFrontendIPChanged(t *testing.T) { } func TestDeterminePublicIPName(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string loadBalancerIP string @@ -960,7 +977,7 @@ func TestDeterminePublicIPName(t *testing.T) { }, } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) service := getTestService("test1", v1.ProtocolTCP, nil, 80) service.Spec.LoadBalancerIP = test.loadBalancerIP for _, existingPIP := range test.exsistingPIPs { @@ -976,6 +993,9 @@ func TestDeterminePublicIPName(t *testing.T) { } func TestReconcileLoadBalancerRule(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string service v1.Service @@ -1117,7 +1137,7 @@ func TestReconcileLoadBalancerRule(t *testing.T) { }, } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) az.Config.LoadBalancerSku = test.loadBalancerSku probe, lbrule, err := az.reconcileLoadBalancerRule(&test.service, test.wantLb, "frontendIPConfigID", "backendPoolID", "lbname", to.Int32Ptr(0)) @@ -1191,6 +1211,9 @@ func getTestLoadBalancer(name, rgName, clusterName, identifier *string, service } func TestReconcileLoadBalancer(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + service1 := getTestService("test1", v1.ProtocolTCP, nil, 80) basicLb1 := getTestLoadBalancer(to.StringPtr("lb1"), to.StringPtr("rg"), to.StringPtr("testCluster"), to.StringPtr("atest1"), service1, "Basic") @@ -1547,7 +1570,7 @@ func TestReconcileLoadBalancer(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) az.Config.LoadBalancerSku = test.loadBalancerSku az.DisableOutboundSNAT = test.disableOutboundSnat if test.preConfigLBType != "" { @@ -1583,7 +1606,10 @@ func TestReconcileLoadBalancer(t *testing.T) { } func TestGetServiceLoadBalancerStatus(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) service := getTestService("test1", v1.ProtocolTCP, nil, 80) internalService := getInternalTestService("test1", 80) @@ -1721,6 +1747,9 @@ func TestGetServiceLoadBalancerStatus(t *testing.T) { } func TestReconcileSecurityGroup(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string service v1.Service @@ -1804,7 +1833,7 @@ func TestReconcileSecurityGroup(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) for name, sg := range test.existingSgs { err := az.SecurityGroupsClient.CreateOrUpdate(context.TODO(), "rg", name, sg, "") if err != nil { @@ -1818,6 +1847,9 @@ func TestReconcileSecurityGroup(t *testing.T) { } func TestSafeDeletePublicIP(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string pip *network.PublicIPAddress @@ -1852,7 +1884,7 @@ func TestSafeDeletePublicIP(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) err := az.PublicIPAddressesClient.CreateOrUpdate(context.TODO(), "rg", "pip1", network.PublicIPAddress{ Name: to.StringPtr("pip1"), PublicIPAddressPropertiesFormat: &network.PublicIPAddressPropertiesFormat{ @@ -1873,6 +1905,9 @@ func TestSafeDeletePublicIP(t *testing.T) { } func TestReconcilePublicIP(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string wantLb bool @@ -1971,7 +2006,7 @@ func TestReconcilePublicIP(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) service := getTestService("test1", v1.ProtocolTCP, nil, 80) service.Annotations = test.annotations for _, pip := range test.existingPIPs { @@ -1991,6 +2026,9 @@ func TestReconcilePublicIP(t *testing.T) { } func TestEnsurePublicIPExists(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string existingPIPs []network.PublicIPAddress @@ -2082,7 +2120,7 @@ func TestEnsurePublicIPExists(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) service := getTestService("test1", v1.ProtocolTCP, nil, 80) for _, pip := range test.existingPIPs { err := az.PublicIPAddressesClient.CreateOrUpdate(context.TODO(), "rg", to.String(pip.Name), pip) @@ -2101,6 +2139,9 @@ func TestEnsurePublicIPExists(t *testing.T) { } func TestShouldUpdateLoadBalancer(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string lbHasDeletionTimestamp bool @@ -2134,7 +2175,7 @@ func TestShouldUpdateLoadBalancer(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) service := getTestService("test1", v1.ProtocolTCP, nil, 80) if test.lbHasDeletionTimestamp { service.ObjectMeta.DeletionTimestamp = &metav1.Time{Time: time.Now()} @@ -2164,6 +2205,9 @@ func TestShouldUpdateLoadBalancer(t *testing.T) { } func TestIsBackendPoolPreConfigured(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { desc string preConfiguredBackendPoolLoadBalancerTypes string @@ -2221,7 +2265,7 @@ func TestIsBackendPoolPreConfigured(t *testing.T) { } for i, test := range testCases { - az := GetTestCloud() + az := GetTestCloud(ctrl) az.Config.PreConfiguredBackendPoolLoadBalancerTypes = test.preConfiguredBackendPoolLoadBalancerTypes var service v1.Service if test.isInternalService { diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_routes_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_routes_test.go index 6eeb5929176..e8835e9d20c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_routes_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_routes_test.go @@ -27,18 +27,23 @@ import ( "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" cloudprovider "k8s.io/cloud-provider" + "k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient" + "k8s.io/legacy-cloud-providers/azure/mockvmsets" ) func TestDeleteRoute(t *testing.T) { - fakeTable := newFakeRouteTablesClient() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + routeTableClient := mockroutetableclient.NewMockInterface(ctrl) cloud := &Cloud{ - RouteTablesClient: fakeTable, + RouteTablesClient: routeTableClient, Config: Config{ RouteTableResourceGroup: "foo", RouteTableName: "bar", @@ -67,30 +72,21 @@ func TestDeleteRoute(t *testing.T) { }, }, } - fakeTable.FakeStore = map[string]map[string]network.RouteTable{} - fakeTable.FakeStore[cloud.RouteTableResourceGroup] = map[string]network.RouteTable{ - cloud.RouteTableName: routeTables, + routeTablesAfterDeletion := network.RouteTable{ + Name: &cloud.RouteTableName, + Location: &cloud.Location, + RouteTablePropertiesFormat: &network.RouteTablePropertiesFormat{ + Routes: &[]network.Route{}, + }, } - + routeTableClient.EXPECT().Get(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, "").Return(routeTables, nil) + routeTableClient.EXPECT().CreateOrUpdate(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, routeTablesAfterDeletion, "").Return(nil) err := cloud.DeleteRoute(context.TODO(), "cluster", &route) if err != nil { t.Errorf("unexpected error deleting route: %v", err) t.FailNow() } - rt, found := fakeTable.FakeStore[cloud.RouteTableResourceGroup][cloud.RouteTableName] - if !found { - t.Errorf("unexpected missing routetable for %s", cloud.RouteTableName) - t.FailNow() - } - - for _, r := range *rt.Routes { - if to.String(r.Name) == routeName { - t.Errorf("unexpectedly found: %v that should have been deleted.", routeName) - t.FailNow() - } - } - // test delete route for unmanaged nodes. nodeName := "node1" nodeCIDR := "4.3.2.1/24" @@ -114,12 +110,14 @@ func TestDeleteRoute(t *testing.T) { } func TestCreateRoute(t *testing.T) { - fakeTable := newFakeRouteTablesClient() - fakeVM := &fakeVMSet{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + routeTableClient := mockroutetableclient.NewMockInterface(ctrl) + mockVMSet := mockvmsets.NewMockVMSet(ctrl) cloud := &Cloud{ - RouteTablesClient: fakeTable, - vmSet: fakeVM, + RouteTablesClient: routeTableClient, + vmSet: mockVMSet, Config: Config{ RouteTableResourceGroup: "foo", RouteTableName: "bar", @@ -133,69 +131,46 @@ func TestCreateRoute(t *testing.T) { cloud.routeUpdater = newDelayedRouteUpdater(cloud, 100*time.Millisecond) go cloud.routeUpdater.run() - expectedTable := network.RouteTable{ + currentTable := network.RouteTable{ Name: &cloud.RouteTableName, Location: &cloud.Location, RouteTablePropertiesFormat: &network.RouteTablePropertiesFormat{}, } - fakeTable.FakeStore = map[string]map[string]network.RouteTable{} - fakeTable.FakeStore[cloud.RouteTableResourceGroup] = map[string]network.RouteTable{ - cloud.RouteTableName: expectedTable, + updatedTable := network.RouteTable{ + Name: &cloud.RouteTableName, + Location: &cloud.Location, + RouteTablePropertiesFormat: &network.RouteTablePropertiesFormat{ + Routes: &[]network.Route{ + { + Name: to.StringPtr("node"), + RoutePropertiesFormat: &network.RoutePropertiesFormat{ + AddressPrefix: to.StringPtr("1.2.3.4/24"), + NextHopIPAddress: to.StringPtr("2.4.6.8"), + NextHopType: network.RouteNextHopTypeVirtualAppliance, + }, + }, + }, + }, } route := cloudprovider.Route{TargetNode: "node", DestinationCIDR: "1.2.3.4/24"} - nodeIP := "2.4.6.8" - fakeVM.NodeToIP = map[string]string{ - "node": nodeIP, - } + routeTableClient.EXPECT().Get(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, "").Return(currentTable, nil) + routeTableClient.EXPECT().CreateOrUpdate(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, updatedTable, "").Return(nil) + mockVMSet.EXPECT().GetIPByNodeName("node").Return(nodeIP, "", nil).AnyTimes() err := cloud.CreateRoute(context.TODO(), "cluster", "unused", &route) if err != nil { t.Errorf("unexpected error create if not exists route table: %v", err) t.FailNow() } - if len(fakeTable.Calls) != 2 { - t.Errorf("unexpected calls create if not exists, exists: %v", fakeTable.Calls) - } - routeName := mapNodeNameToRouteName(false, route.TargetNode, string(route.DestinationCIDR)) - rt, found := fakeTable.FakeStore[cloud.RouteTableResourceGroup][cloud.RouteTableName] - if !found { - t.Errorf("unexpected missing routetable for %s", cloud.RouteTableName) - t.FailNow() - } - - foundRoute := false - for _, r := range *rt.Routes { - if to.String(r.Name) == routeName { - foundRoute = true - if *r.AddressPrefix != route.DestinationCIDR { - t.Errorf("Expected cidr: %s, saw %s", *r.AddressPrefix, route.DestinationCIDR) - } - if r.NextHopType != network.RouteNextHopTypeVirtualAppliance { - t.Errorf("Expected next hop: %v, saw %v", network.RouteNextHopTypeVirtualAppliance, r.NextHopType) - } - if *r.NextHopIPAddress != nodeIP { - t.Errorf("Expected IP address: %s, saw %s", nodeIP, *r.NextHopIPAddress) - } - - } - } - if !foundRoute { - t.Errorf("could not find route: %v in %v", routeName, fakeTable.FakeStore) - t.FailNow() - } - - // test create again without real creation, clean fakeTable calls - fakeTable.Calls = []string{} + // test create again without real creation. + routeTableClient.EXPECT().Get(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, "").Return(updatedTable, nil).Times(1) err = cloud.CreateRoute(context.TODO(), "cluster", "unused", &route) if err != nil { t.Errorf("unexpected error creating route: %v", err) t.FailNow() } - if len(fakeTable.Calls) != 1 || fakeTable.Calls[0] != "Get" { - t.Errorf("unexpected route calls create if not exists, exists: %v", fakeTable.Calls) - } // test create route for unmanaged nodes. nodeName := "node1" @@ -222,9 +197,12 @@ func TestCreateRoute(t *testing.T) { } func TestCreateRouteTable(t *testing.T) { - fake := newFakeRouteTablesClient() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + routeTableClient := mockroutetableclient.NewMockInterface(ctrl) + cloud := &Cloud{ - RouteTablesClient: fake, + RouteTablesClient: routeTableClient, Config: Config{ RouteTableResourceGroup: "foo", RouteTableName: "bar", @@ -235,23 +213,16 @@ func TestCreateRouteTable(t *testing.T) { cloud.rtCache = cache expectedTable := network.RouteTable{ - Name: &cloud.RouteTableName, - Location: &cloud.Location, + Name: &cloud.RouteTableName, + Location: &cloud.Location, + RouteTablePropertiesFormat: &network.RouteTablePropertiesFormat{}, } - + routeTableClient.EXPECT().CreateOrUpdate(gomock.Any(), cloud.RouteTableResourceGroup, cloud.RouteTableName, expectedTable, "").Return(nil) err := cloud.createRouteTable() if err != nil { t.Errorf("unexpected error in creating route table: %v", err) t.FailNow() } - - table := fake.FakeStore["foo"]["bar"] - if *table.Location != *expectedTable.Location { - t.Errorf("mismatch: %s vs %s", *table.Location, *expectedTable.Location) - } - if *table.Name != *expectedTable.Name { - t.Errorf("mismatch: %s vs %s", *table.Name, *expectedTable.Name) - } } func TestProcessRoutes(t *testing.T) { diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go index 98969b828db..2869533def7 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go @@ -22,6 +22,7 @@ import ( "strconv" "testing" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" @@ -127,7 +128,9 @@ func TestGenerateStorageAccountName(t *testing.T) { } func TestMapLoadBalancerNameToVMSet(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) az.PrimaryAvailabilitySetName = "primary" cases := []struct { @@ -175,7 +178,9 @@ func TestMapLoadBalancerNameToVMSet(t *testing.T) { } func TestGetAzureLoadBalancerName(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) az.PrimaryAvailabilitySetName = "primary" cases := []struct { @@ -256,7 +261,9 @@ func TestGetAzureLoadBalancerName(t *testing.T) { } func TestGetLoadBalancingRuleName(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) az.PrimaryAvailabilitySetName = "primary" svc := &v1.Service{ @@ -337,7 +344,9 @@ func TestGetLoadBalancingRuleName(t *testing.T) { } func TestGetFrontendIPConfigName(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) az.PrimaryAvailabilitySetName = "primary" svc := &v1.Service{ diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go index dcd1921cc16..2d1df26fced 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go @@ -29,6 +29,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" @@ -36,6 +37,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" servicehelpers "k8s.io/cloud-provider/service/helpers" + "k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient" "k8s.io/legacy-cloud-providers/azure/retry" ) @@ -67,7 +69,10 @@ func TestFlipServiceInternalAnnotation(t *testing.T) { // Test additional of a new service/port. func TestAddPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80) clusterResources := getClusterResources(az, 1, 1) @@ -108,7 +113,10 @@ func TestLoadBalancerExternalServiceModeSelection(t *testing.T) { } func testLoadBalancerServiceDefaultModeSelection(t *testing.T, isInternal bool) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) const vmCount = 8 const availabilitySetCount = 4 const serviceCount = 9 @@ -121,7 +129,7 @@ func testLoadBalancerServiceDefaultModeSelection(t *testing.T, isInternal bool) var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -163,7 +171,10 @@ func testLoadBalancerServiceDefaultModeSelection(t *testing.T, isInternal bool) // Validate even distribution of external services across load balancers // based on number of availability sets func testLoadBalancerServiceAutoModeSelection(t *testing.T, isInternal bool) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) const vmCount = 8 const availabilitySetCount = 4 const serviceCount = 9 @@ -176,7 +187,7 @@ func testLoadBalancerServiceAutoModeSelection(t *testing.T, isInternal bool) { var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -224,7 +235,10 @@ func testLoadBalancerServiceAutoModeSelection(t *testing.T, isInternal bool) { // services will be assigned load balancers that are part of the provided availability sets // specified in service annotation func testLoadBalancerServicesSpecifiedSelection(t *testing.T, isInternal bool) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) const vmCount = 8 const availabilitySetCount = 4 const serviceCount = 9 @@ -239,7 +253,7 @@ func testLoadBalancerServicesSpecifiedSelection(t *testing.T, isInternal bool) { var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -267,7 +281,10 @@ func testLoadBalancerServicesSpecifiedSelection(t *testing.T, isInternal bool) { } func testLoadBalancerMaxRulesServices(t *testing.T, isInternal bool) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) const vmCount = 1 const availabilitySetCount = 1 @@ -281,7 +298,7 @@ func testLoadBalancerMaxRulesServices(t *testing.T, isInternal bool) { var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -310,7 +327,7 @@ func testLoadBalancerMaxRulesServices(t *testing.T, isInternal bool) { var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -327,7 +344,10 @@ func testLoadBalancerMaxRulesServices(t *testing.T, isInternal bool) { // Validate service deletion in lb auto selection mode func testLoadBalancerServiceAutoModeDeleteSelection(t *testing.T, isInternal bool) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) const vmCount = 8 const availabilitySetCount = 4 const serviceCount = 9 @@ -340,7 +360,7 @@ func testLoadBalancerServiceAutoModeDeleteSelection(t *testing.T, isInternal boo var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -359,7 +379,7 @@ func testLoadBalancerServiceAutoModeDeleteSelection(t *testing.T, isInternal boo var svc v1.Service if isInternal { svc = getInternalTestService(svcName, 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) } else { svc = getTestService(svcName, v1.ProtocolTCP, nil, 8081) } @@ -385,10 +405,13 @@ func testLoadBalancerServiceAutoModeDeleteSelection(t *testing.T, isInternal boo // Test addition of a new service on an internal LB with a subnet. func TestReconcileLoadBalancerAddServiceOnInternalSubnet(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) - svc := getInternalTestService("servicea", 80) - addTestSubnet(t, az, &svc) + svc := getInternalTestService("svc1", 80) + validateTestSubnet(t, az, &svc) lb, err := az.reconcileLoadBalancer(testClusterName, &svc, clusterResources.nodes, true /* wantLb */) if err != nil { @@ -404,7 +427,10 @@ func TestReconcileLoadBalancerAddServiceOnInternalSubnet(t *testing.T) { } func TestReconcileSecurityGroupFromAnyDestinationAddressPrefixToLoadBalancerIP(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc1 := getTestService("serviceea", v1.ProtocolTCP, nil, 80) svc1.Spec.LoadBalancerIP = "192.168.0.0" getTestSecurityGroup(az) @@ -421,7 +447,10 @@ func TestReconcileSecurityGroupFromAnyDestinationAddressPrefixToLoadBalancerIP(t } func TestReconcileSecurityGroupDynamicLoadBalancerIP(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc1 := getTestService("servicea", v1.ProtocolTCP, nil, 80) svc1.Spec.LoadBalancerIP = "" getTestSecurityGroup(az) @@ -435,14 +464,14 @@ func TestReconcileSecurityGroupDynamicLoadBalancerIP(t *testing.T) { // Test addition of services on an internal LB using both default and explicit subnets. func TestReconcileLoadBalancerAddServicesOnMultipleSubnets(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc1 := getTestService("service1", v1.ProtocolTCP, nil, 8081) svc2 := getInternalTestService("service2", 8081) - // Internal and External service cannot reside on the same LB resource - addTestSubnet(t, az, &svc2) - // svc1 is using LB without "-internal" suffix lb, err := az.reconcileLoadBalancer(testClusterName, &svc1, clusterResources.nodes, true /* wantLb */) if err != nil { @@ -456,6 +485,9 @@ func TestReconcileLoadBalancerAddServicesOnMultipleSubnets(t *testing.T) { validateLoadBalancer(t, lb, svc1) + // Internal and External service cannot reside on the same LB resource + validateTestSubnet(t, az, &svc2) + // svc2 is using LB with "-internal" suffix lb, err = az.reconcileLoadBalancer(testClusterName, &svc2, nil, true /* wantLb */) if err != nil { @@ -472,10 +504,13 @@ func TestReconcileLoadBalancerAddServicesOnMultipleSubnets(t *testing.T) { // Test moving a service exposure from one subnet to another. func TestReconcileLoadBalancerEditServiceSubnet(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc := getInternalTestService("service1", 8081) - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) lb, err := az.reconcileLoadBalancer(testClusterName, &svc, clusterResources.nodes, true /* wantLb */) if err != nil { @@ -485,7 +520,7 @@ func TestReconcileLoadBalancerEditServiceSubnet(t *testing.T) { validateLoadBalancer(t, lb, svc) svc.Annotations[ServiceAnnotationLoadBalancerInternalSubnet] = "NewSubnet" - addTestSubnet(t, az, &svc) + validateTestSubnet(t, az, &svc) lb, err = az.reconcileLoadBalancer(testClusterName, &svc, clusterResources.nodes, true /* wantLb */) if err != nil { @@ -501,7 +536,10 @@ func TestReconcileLoadBalancerEditServiceSubnet(t *testing.T) { } func TestReconcileLoadBalancerNodeHealth(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80) svc.Spec.ExternalTrafficPolicy = v1.ServiceExternalTrafficPolicyTypeLocal @@ -522,7 +560,10 @@ func TestReconcileLoadBalancerNodeHealth(t *testing.T) { // Test removing all services results in removing the frontend ip configuration func TestReconcileLoadBalancerRemoveService(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) @@ -546,7 +587,10 @@ func TestReconcileLoadBalancerRemoveService(t *testing.T) { // Test removing all service ports results in removing the frontend ip configuration func TestReconcileLoadBalancerRemoveAllPortsRemovesFrontendConfig(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80) @@ -572,7 +616,10 @@ func TestReconcileLoadBalancerRemoveAllPortsRemovesFrontendConfig(t *testing.T) // Test removal of a port from an existing service. func TestReconcileLoadBalancerRemovesPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) @@ -592,7 +639,10 @@ func TestReconcileLoadBalancerRemovesPort(t *testing.T) { // Test reconciliation of multiple services on same port func TestReconcileLoadBalancerMultipleServices(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) clusterResources := getClusterResources(az, 1, 1) svc1 := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) svc2 := getTestService("serviceb", v1.ProtocolTCP, nil, 80) @@ -620,7 +670,10 @@ func findLBRuleForPort(lbRules []network.LoadBalancingRule, port int32) (network } func TestServiceDefaultsToNoSessionPersistence(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("service-sa-omitted", v1.ProtocolTCP, nil, 7170) clusterResources := getClusterResources(az, 1, 1) @@ -640,7 +693,10 @@ func TestServiceDefaultsToNoSessionPersistence(t *testing.T) { } func TestServiceRespectsNoSessionAffinity(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("service-sa-none", v1.ProtocolTCP, nil, 7170) svc.Spec.SessionAffinity = v1.ServiceAffinityNone clusterResources := getClusterResources(az, 1, 1) @@ -663,7 +719,10 @@ func TestServiceRespectsNoSessionAffinity(t *testing.T) { } func TestServiceRespectsClientIPSessionAffinity(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("service-sa-clientip", v1.ProtocolTCP, nil, 7170) svc.Spec.SessionAffinity = v1.ServiceAffinityClientIP clusterResources := getClusterResources(az, 1, 1) @@ -686,7 +745,10 @@ func TestServiceRespectsClientIPSessionAffinity(t *testing.T) { } func TestReconcileSecurityGroupNewServiceAddsPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) getTestSecurityGroup(az) svc1 := getTestService("servicea", v1.ProtocolTCP, nil, 80) clusterResources := getClusterResources(az, 1, 1) @@ -702,10 +764,13 @@ func TestReconcileSecurityGroupNewServiceAddsPort(t *testing.T) { } func TestReconcileSecurityGroupNewInternalServiceAddsPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) getTestSecurityGroup(az) svc1 := getInternalTestService("serviceea", 80) - addTestSubnet(t, az, &svc1) + validateTestSubnet(t, az, &svc1) clusterResources := getClusterResources(az, 1, 1) lb, _ := az.reconcileLoadBalancer(testClusterName, &svc1, clusterResources.nodes, true) @@ -719,7 +784,10 @@ func TestReconcileSecurityGroupNewInternalServiceAddsPort(t *testing.T) { } func TestReconcileSecurityGroupRemoveService(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) service1 := getTestService("servicea", v1.ProtocolTCP, nil, 81) service2 := getTestService("serviceb", v1.ProtocolTCP, nil, 82) clusterResources := getClusterResources(az, 1, 1) @@ -741,7 +809,10 @@ func TestReconcileSecurityGroupRemoveService(t *testing.T) { } func TestReconcileSecurityGroupRemoveServiceRemovesPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) clusterResources := getClusterResources(az, 1, 1) @@ -759,7 +830,10 @@ func TestReconcileSecurityGroupRemoveServiceRemovesPort(t *testing.T) { } func TestReconcileSecurityWithSourceRanges(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) svc.Spec.LoadBalancerSourceRanges = []string{ "192.168.0.0/24", @@ -780,7 +854,9 @@ func TestReconcileSecurityWithSourceRanges(t *testing.T) { } func TestReconcileSecurityGroupEtagMismatch(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) sg := getTestSecurityGroup(az) cachedSG := *sg @@ -802,8 +878,11 @@ func TestReconcileSecurityGroupEtagMismatch(t *testing.T) { assert.Equal(t, expectedError.Error(), err) } -func TestReconcilePublicIPWithNewService(t *testing.T) { - az := GetTestCloud() +func TestReconcilePuablicIPWithNewService(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) pip, err := az.reconcilePublicIP(testClusterName, &svc, "", true /* wantLb*/) @@ -824,7 +903,10 @@ func TestReconcilePublicIPWithNewService(t *testing.T) { } func TestReconcilePublicIPRemoveService(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicea", v1.ProtocolTCP, nil, 80, 443) pip, err := az.reconcilePublicIP(testClusterName, &svc, "", true /* wantLb*/) @@ -844,7 +926,10 @@ func TestReconcilePublicIPRemoveService(t *testing.T) { } func TestReconcilePublicIPWithInternalService(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getInternalTestService("servicea", 80, 443) pip, err := az.reconcilePublicIP(testClusterName, &svc, "", true /* wantLb*/) @@ -856,7 +941,10 @@ func TestReconcilePublicIPWithInternalService(t *testing.T) { } func TestReconcilePublicIPWithExternalAndInternalSwitch(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getInternalTestService("servicea", 80, 443) pip, err := az.reconcilePublicIP(testClusterName, &svc, "", true /* wantLb*/) @@ -1109,7 +1197,10 @@ func getTestSecurityGroup(az *Cloud, services ...v1.Service) *network.SecurityGr } func validateLoadBalancer(t *testing.T, loadBalancer *network.LoadBalancer, services ...v1.Service) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) expectedRuleCount := 0 expectedFrontendIPCount := 0 expectedProbeCount := 0 @@ -1117,9 +1208,16 @@ func validateLoadBalancer(t *testing.T, loadBalancer *network.LoadBalancer, serv for _, svc := range services { if len(svc.Spec.Ports) > 0 { expectedFrontendIPCount++ + expectedSubnetName := "" + if requiresInternalLoadBalancer(&svc) { + expectedSubnetName = svc.Annotations[ServiceAnnotationLoadBalancerInternalSubnet] + if expectedSubnetName == "" { + expectedSubnetName = az.SubnetName + } + } expectedFrontendIP := ExpectedFrontendIPInfo{ Name: az.getFrontendIPConfigName(&svc), - Subnet: subnet(&svc), + Subnet: to.StringPtr(expectedSubnetName), } expectedFrontendIPs = append(expectedFrontendIPs, expectedFrontendIP) } @@ -1325,7 +1423,10 @@ func securityRuleMatches(serviceSourceRange string, servicePort v1.ServicePort, } func validateSecurityGroup(t *testing.T, securityGroup *network.SecurityGroup, services ...v1.Service) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) seenRules := make(map[string]string) for _, svc := range services { for _, wantedRule := range svc.Spec.Ports { @@ -1652,7 +1753,10 @@ func validateEmptyConfig(t *testing.T, config string) { } func TestGetNodeNameByProviderID(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) providers := []struct { providerID string name types.NodeName @@ -1703,37 +1807,33 @@ func TestGetNodeNameByProviderID(t *testing.T) { } } -func addTestSubnet(t *testing.T, az *Cloud, svc *v1.Service) { +func validateTestSubnet(t *testing.T, az *Cloud, svc *v1.Service) { if svc.Annotations[ServiceAnnotationLoadBalancerInternal] != "true" { t.Error("Subnet added to non-internal service") } + subName := svc.Annotations[ServiceAnnotationLoadBalancerInternalSubnet] if subName == "" { subName = az.SubnetName } - subnetID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s", az.SubscriptionID, az.VnetResourceGroup, az.VnetName, subName) - - ctx, cancel := getContextWithCancel() - defer cancel() - err := az.SubnetsClient.CreateOrUpdate(ctx, az.VnetResourceGroup, az.VnetName, subName, + mockSubnetsClient := az.SubnetsClient.(*mocksubnetclient.MockInterface) + mockSubnetsClient.EXPECT().Get(gomock.Any(), az.VnetResourceGroup, az.VnetName, subName, "").Return( network.Subnet{ ID: &subnetID, Name: &subName, - }) - - if err != nil { - t.Errorf("Subnet cannot be created or update, %v", err) - } - svc.Annotations[ServiceAnnotationLoadBalancerInternalSubnet] = subName + }, nil).AnyTimes() } func TestIfServiceSpecifiesSharedRuleAndRuleDoesNotExistItIsCreated(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicesr", v1.ProtocolTCP, nil, 80) svc.Spec.LoadBalancerIP = "192.168.77.88" svc.Annotations[ServiceAnnotationSharedSecurityRule] = "true" @@ -1772,7 +1872,10 @@ func TestIfServiceSpecifiesSharedRuleAndRuleDoesNotExistItIsCreated(t *testing.T } func TestIfServiceSpecifiesSharedRuleAndRuleExistsThenTheServicesPortAndAddressAreAdded(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + az := GetTestCloud(ctrl) svc := getTestService("servicesr", v1.ProtocolTCP, nil, 80) svc.Spec.LoadBalancerIP = "192.168.77.88" svc.Annotations[ServiceAnnotationSharedSecurityRule] = "true" @@ -1824,7 +1927,9 @@ func TestIfServiceSpecifiesSharedRuleAndRuleExistsThenTheServicesPortAndAddressA } func TestIfServicesSpecifySharedRuleButDifferentPortsThenSeparateRulesAreCreated(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -1893,7 +1998,9 @@ func TestIfServicesSpecifySharedRuleButDifferentPortsThenSeparateRulesAreCreated } func TestIfServicesSpecifySharedRuleButDifferentProtocolsThenSeparateRulesAreCreated(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -1960,7 +2067,9 @@ func TestIfServicesSpecifySharedRuleButDifferentProtocolsThenSeparateRulesAreCre } func TestIfServicesSpecifySharedRuleButDifferentSourceAddressesThenSeparateRulesAreCreated(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 80) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2031,7 +2140,9 @@ func TestIfServicesSpecifySharedRuleButDifferentSourceAddressesThenSeparateRules } func TestIfServicesSpecifySharedRuleButSomeAreOnDifferentPortsThenRulesAreSeparatedOrConsoliatedByPort(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2131,7 +2242,9 @@ func TestIfServicesSpecifySharedRuleButSomeAreOnDifferentPortsThenRulesAreSepara } func TestIfServiceSpecifiesSharedRuleAndServiceIsDeletedThenTheServicesPortAndAddressAreRemoved(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 80) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2186,7 +2299,9 @@ func TestIfServiceSpecifiesSharedRuleAndServiceIsDeletedThenTheServicesPortAndAd } func TestIfSomeServicesShareARuleAndOneIsDeletedItIsRemovedFromTheRightRule(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2293,7 +2408,9 @@ func TestIfSomeServicesShareARuleAndOneIsDeletedItIsRemovedFromTheRightRule(t *t } func TestIfServiceSpecifiesSharedRuleAndLastServiceIsDeletedThenRuleIsDeleted(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2373,7 +2490,9 @@ func TestIfServiceSpecifiesSharedRuleAndLastServiceIsDeletedThenRuleIsDeleted(t } func TestCanCombineSharedAndPrivateRulesInSameGroup(t *testing.T) { - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) svc1 := getTestService("servicesr1", v1.ProtocolTCP, nil, 4444) svc1.Spec.LoadBalancerIP = "192.168.77.88" @@ -2630,7 +2749,9 @@ func TestGetResourceGroups(t *testing.T) { }, } - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) for _, test := range tests { az.nodeResourceGroups = test.nodeResourceGroups if test.informerSynced { @@ -2680,7 +2801,9 @@ func TestGetNodeResourceGroup(t *testing.T) { }, } - az := GetTestCloud() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + az := GetTestCloud(ctrl) for _, test := range tests { az.nodeResourceGroups = test.nodeResourceGroups if test.informerSynced { diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmsets.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmsets.go index c7b4d3afa9d..43fe595cd98 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmsets.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmsets.go @@ -30,6 +30,8 @@ import ( // VMSet defines functions all vmsets (including scale set and availability // set) should be implemented. +// Don't forget to run the following command to generate the mock client: +// mockgen -source=$GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmsets.go -package=mockvmsets VMSet > $GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/azure_mock_vmsets.go type VMSet interface { // GetInstanceIDByNodeName gets the cloud provider ID by node name. // It must return ("", cloudprovider.InstanceNotFound) if the instance does diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_cache_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_cache_test.go index e09c5db0d18..026160e4a06 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_cache_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_cache_test.go @@ -25,6 +25,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" cloudprovider "k8s.io/cloud-provider" azcache "k8s.io/legacy-cloud-providers/azure/cache" @@ -75,9 +76,12 @@ func TestExtractVmssVMName(t *testing.T) { } func TestVMSSVMCache(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + vmssName := "vmss" vmList := []string{"vmssee6c2000000", "vmssee6c2000001", "vmssee6c2000002"} - ss, err := newTestScaleSet(vmssName, "", 0, vmList) + ss, err := newTestScaleSet(ctrl, vmssName, "", 0, vmList) assert.NoError(t, err) // validate getting VMSS VM via cache. @@ -117,9 +121,12 @@ func TestVMSSVMCache(t *testing.T) { } func TestVMSSVMCacheWithDeletingNodes(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + vmssName := "vmss" vmList := []string{"vmssee6c2000000", "vmssee6c2000001", "vmssee6c2000002"} - ss, err := newTestScaleSetWithState(vmssName, "", 0, vmList, "Deleting") + ss, err := newTestScaleSetWithState(ctrl, vmssName, "", 0, vmList, "Deleting") assert.NoError(t, err) virtualMachines, rerr := ss.VirtualMachineScaleSetVMsClient.List( diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go index 65885698307..dd75fe22edd 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go @@ -25,6 +25,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/go-autorest/autorest/to" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" ) @@ -33,12 +34,12 @@ const ( fakePublicIP = "10.10.10.10" ) -func newTestScaleSet(scaleSetName, zone string, faultDomain int32, vmList []string) (*scaleSet, error) { - return newTestScaleSetWithState(scaleSetName, zone, faultDomain, vmList, "Running") +func newTestScaleSet(ctrl *gomock.Controller, scaleSetName, zone string, faultDomain int32, vmList []string) (*scaleSet, error) { + return newTestScaleSetWithState(ctrl, scaleSetName, zone, faultDomain, vmList, "Running") } -func newTestScaleSetWithState(scaleSetName, zone string, faultDomain int32, vmList []string, state string) (*scaleSet, error) { - cloud := GetTestCloud() +func newTestScaleSetWithState(ctrl *gomock.Controller, scaleSetName, zone string, faultDomain int32, vmList []string, state string) (*scaleSet, error) { + cloud := GetTestCloud(ctrl) setTestVirtualMachineCloud(cloud, scaleSetName, zone, faultDomain, vmList, state) ss, err := newScaleSet(cloud) if err != nil { @@ -194,6 +195,9 @@ func TestGetScaleSetVMInstanceID(t *testing.T) { } func TestGetInstanceIDByNodeName(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { description string scaleSet string @@ -226,7 +230,7 @@ func TestGetInstanceIDByNodeName(t *testing.T) { } for _, test := range testCases { - ss, err := newTestScaleSet(test.scaleSet, "", 0, test.vmList) + ss, err := newTestScaleSet(ctrl, test.scaleSet, "", 0, test.vmList) assert.NoError(t, err, test.description) real, err := ss.GetInstanceIDByNodeName(test.nodeName) @@ -241,6 +245,9 @@ func TestGetInstanceIDByNodeName(t *testing.T) { } func TestGetZoneByNodeName(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { description string scaleSet string @@ -279,7 +286,7 @@ func TestGetZoneByNodeName(t *testing.T) { } for _, test := range testCases { - ss, err := newTestScaleSet(test.scaleSet, test.zone, test.faultDomain, test.vmList) + ss, err := newTestScaleSet(ctrl, test.scaleSet, test.zone, test.faultDomain, test.vmList) assert.NoError(t, err, test.description) real, err := ss.GetZoneByNodeName(test.nodeName) @@ -294,6 +301,9 @@ func TestGetZoneByNodeName(t *testing.T) { } func TestGetIPByNodeName(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + testCases := []struct { description string scaleSet string @@ -319,7 +329,7 @@ func TestGetIPByNodeName(t *testing.T) { } for _, test := range testCases { - ss, err := newTestScaleSet(test.scaleSet, "", 0, test.vmList) + ss, err := newTestScaleSet(ctrl, test.scaleSet, "", 0, test.vmList) assert.NoError(t, err, test.description) privateIP, publicIP, err := ss.GetIPByNodeName(test.nodeName) @@ -334,6 +344,9 @@ func TestGetIPByNodeName(t *testing.T) { } func TestGetNodeNameByIPConfigurationID(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ipConfigurationIDTemplate := "/subscriptions/script/resourceGroups/rg/providers/Microsoft.Compute/virtualMachineScaleSets/%s/virtualMachines/%s/networkInterfaces/%s/ipConfigurations/ipconfig1" testCases := []struct { @@ -368,7 +381,7 @@ func TestGetNodeNameByIPConfigurationID(t *testing.T) { } for _, test := range testCases { - ss, err := newTestScaleSet(test.scaleSet, "", 0, test.vmList) + ss, err := newTestScaleSet(ctrl, test.scaleSet, "", 0, test.vmList) assert.NoError(t, err, test.description) nodeName, err := ss.getNodeNameByIPConfigurationID(test.ipConfigurationID) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_wrap_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_wrap_test.go index c227a0f913c..f509e6b3b55 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_wrap_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_wrap_test.go @@ -23,6 +23,7 @@ import ( "reflect" "testing" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/legacy-cloud-providers/azure/retry" @@ -56,6 +57,9 @@ func TestExtractNotFound(t *testing.T) { } func TestIsNodeUnmanaged(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + tests := []struct { name string unmanagedNodes sets.String @@ -89,7 +93,7 @@ func TestIsNodeUnmanaged(t *testing.T) { }, } - az := GetTestCloud() + az := GetTestCloud(ctrl) for _, test := range tests { az.unmanagedNodes = test.unmanagedNodes if test.expectErr { @@ -110,6 +114,9 @@ func TestIsNodeUnmanaged(t *testing.T) { } func TestIsNodeUnmanagedByProviderID(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + tests := []struct { providerID string expected bool @@ -137,7 +144,7 @@ func TestIsNodeUnmanagedByProviderID(t *testing.T) { }, } - az := GetTestCloud() + az := GetTestCloud(ctrl) for _, test := range tests { isUnmanagedNode := az.IsNodeUnmanagedByProviderID(test.providerID) assert.Equal(t, test.expected, isUnmanagedNode, test.providerID) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/BUILD new file mode 100644 index 00000000000..a2da0c8ba04 --- /dev/null +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "azure_mock_vmsets.go", + "doc.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/mockvmsets", + importpath = "k8s.io/legacy-cloud-providers/azure/mockvmsets", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/cloud-provider:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/cache:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", + "//vendor/github.com/golang/mock/gomock:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/azure_mock_vmsets.go b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/azure_mock_vmsets.go new file mode 100644 index 00000000000..93849f77156 --- /dev/null +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/azure_mock_vmsets.go @@ -0,0 +1,289 @@ +// +build !providerless + +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package mockvmsets + +import ( + reflect "reflect" + + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" + gomock "github.com/golang/mock/gomock" + v1 "k8s.io/api/core/v1" + types "k8s.io/apimachinery/pkg/types" + cloudprovider "k8s.io/cloud-provider" + cache "k8s.io/legacy-cloud-providers/azure/cache" +) + +// MockVMSet is a mock of VMSet interface +type MockVMSet struct { + ctrl *gomock.Controller + recorder *MockVMSetMockRecorder +} + +// MockVMSetMockRecorder is the mock recorder for MockVMSet +type MockVMSetMockRecorder struct { + mock *MockVMSet +} + +// NewMockVMSet creates a new mock instance +func NewMockVMSet(ctrl *gomock.Controller) *MockVMSet { + mock := &MockVMSet{ctrl: ctrl} + mock.recorder = &MockVMSetMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockVMSet) EXPECT() *MockVMSetMockRecorder { + return m.recorder +} + +// GetInstanceIDByNodeName mocks base method +func (m *MockVMSet) GetInstanceIDByNodeName(name string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstanceIDByNodeName", name) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstanceIDByNodeName indicates an expected call of GetInstanceIDByNodeName +func (mr *MockVMSetMockRecorder) GetInstanceIDByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstanceIDByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetInstanceIDByNodeName), name) +} + +// GetInstanceTypeByNodeName mocks base method +func (m *MockVMSet) GetInstanceTypeByNodeName(name string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstanceTypeByNodeName", name) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstanceTypeByNodeName indicates an expected call of GetInstanceTypeByNodeName +func (mr *MockVMSetMockRecorder) GetInstanceTypeByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstanceTypeByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetInstanceTypeByNodeName), name) +} + +// GetIPByNodeName mocks base method +func (m *MockVMSet) GetIPByNodeName(name string) (string, string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetIPByNodeName", name) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(string) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetIPByNodeName indicates an expected call of GetIPByNodeName +func (mr *MockVMSetMockRecorder) GetIPByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetIPByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetIPByNodeName), name) +} + +// GetPrimaryInterface mocks base method +func (m *MockVMSet) GetPrimaryInterface(nodeName string) (network.Interface, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPrimaryInterface", nodeName) + ret0, _ := ret[0].(network.Interface) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPrimaryInterface indicates an expected call of GetPrimaryInterface +func (mr *MockVMSetMockRecorder) GetPrimaryInterface(nodeName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPrimaryInterface", reflect.TypeOf((*MockVMSet)(nil).GetPrimaryInterface), nodeName) +} + +// GetNodeNameByProviderID mocks base method +func (m *MockVMSet) GetNodeNameByProviderID(providerID string) (types.NodeName, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetNodeNameByProviderID", providerID) + ret0, _ := ret[0].(types.NodeName) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetNodeNameByProviderID indicates an expected call of GetNodeNameByProviderID +func (mr *MockVMSetMockRecorder) GetNodeNameByProviderID(providerID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNodeNameByProviderID", reflect.TypeOf((*MockVMSet)(nil).GetNodeNameByProviderID), providerID) +} + +// GetZoneByNodeName mocks base method +func (m *MockVMSet) GetZoneByNodeName(name string) (cloudprovider.Zone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetZoneByNodeName", name) + ret0, _ := ret[0].(cloudprovider.Zone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetZoneByNodeName indicates an expected call of GetZoneByNodeName +func (mr *MockVMSetMockRecorder) GetZoneByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetZoneByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetZoneByNodeName), name) +} + +// GetPrimaryVMSetName mocks base method +func (m *MockVMSet) GetPrimaryVMSetName() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPrimaryVMSetName") + ret0, _ := ret[0].(string) + return ret0 +} + +// GetPrimaryVMSetName indicates an expected call of GetPrimaryVMSetName +func (mr *MockVMSetMockRecorder) GetPrimaryVMSetName() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPrimaryVMSetName", reflect.TypeOf((*MockVMSet)(nil).GetPrimaryVMSetName)) +} + +// GetVMSetNames mocks base method +func (m *MockVMSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (*[]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetVMSetNames", service, nodes) + ret0, _ := ret[0].(*[]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetVMSetNames indicates an expected call of GetVMSetNames +func (mr *MockVMSetMockRecorder) GetVMSetNames(service, nodes interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVMSetNames", reflect.TypeOf((*MockVMSet)(nil).GetVMSetNames), service, nodes) +} + +// EnsureHostsInPool mocks base method +func (m *MockVMSet) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, backendPoolID, vmSetName string, isInternal bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EnsureHostsInPool", service, nodes, backendPoolID, vmSetName, isInternal) + ret0, _ := ret[0].(error) + return ret0 +} + +// EnsureHostsInPool indicates an expected call of EnsureHostsInPool +func (mr *MockVMSetMockRecorder) EnsureHostsInPool(service, nodes, backendPoolID, vmSetName, isInternal interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureHostsInPool", reflect.TypeOf((*MockVMSet)(nil).EnsureHostsInPool), service, nodes, backendPoolID, vmSetName, isInternal) +} + +// EnsureHostInPool mocks base method +func (m *MockVMSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeName, backendPoolID, vmSetName string, isInternal bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EnsureHostInPool", service, nodeName, backendPoolID, vmSetName, isInternal) + ret0, _ := ret[0].(error) + return ret0 +} + +// EnsureHostInPool indicates an expected call of EnsureHostInPool +func (mr *MockVMSetMockRecorder) EnsureHostInPool(service, nodeName, backendPoolID, vmSetName, isInternal interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureHostInPool", reflect.TypeOf((*MockVMSet)(nil).EnsureHostInPool), service, nodeName, backendPoolID, vmSetName, isInternal) +} + +// EnsureBackendPoolDeleted mocks base method +func (m *MockVMSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EnsureBackendPoolDeleted", service, backendPoolID, vmSetName, backendAddressPools) + ret0, _ := ret[0].(error) + return ret0 +} + +// EnsureBackendPoolDeleted indicates an expected call of EnsureBackendPoolDeleted +func (mr *MockVMSetMockRecorder) EnsureBackendPoolDeleted(service, backendPoolID, vmSetName, backendAddressPools interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureBackendPoolDeleted", reflect.TypeOf((*MockVMSet)(nil).EnsureBackendPoolDeleted), service, backendPoolID, vmSetName, backendAddressPools) +} + +// AttachDisk mocks base method +func (m *MockVMSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AttachDisk", isManagedDisk, diskName, diskURI, nodeName, lun, cachingMode, diskEncryptionSetID, writeAcceleratorEnabled) + ret0, _ := ret[0].(error) + return ret0 +} + +// AttachDisk indicates an expected call of AttachDisk +func (mr *MockVMSetMockRecorder) AttachDisk(isManagedDisk, diskName, diskURI, nodeName, lun, cachingMode, diskEncryptionSetID, writeAcceleratorEnabled interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AttachDisk", reflect.TypeOf((*MockVMSet)(nil).AttachDisk), isManagedDisk, diskName, diskURI, nodeName, lun, cachingMode, diskEncryptionSetID, writeAcceleratorEnabled) +} + +// DetachDisk mocks base method +func (m *MockVMSet) DetachDisk(diskName, diskURI string, nodeName types.NodeName) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DetachDisk", diskName, diskURI, nodeName) + ret0, _ := ret[0].(error) + return ret0 +} + +// DetachDisk indicates an expected call of DetachDisk +func (mr *MockVMSetMockRecorder) DetachDisk(diskName, diskURI, nodeName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DetachDisk", reflect.TypeOf((*MockVMSet)(nil).DetachDisk), diskName, diskURI, nodeName) +} + +// GetDataDisks mocks base method +func (m *MockVMSet) GetDataDisks(nodeName types.NodeName, string cache.AzureCacheReadType) ([]compute.DataDisk, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDataDisks", nodeName, string) + ret0, _ := ret[0].([]compute.DataDisk) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDataDisks indicates an expected call of GetDataDisks +func (mr *MockVMSetMockRecorder) GetDataDisks(nodeName, string interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDataDisks", reflect.TypeOf((*MockVMSet)(nil).GetDataDisks), nodeName, string) +} + +// GetPowerStatusByNodeName mocks base method +func (m *MockVMSet) GetPowerStatusByNodeName(name string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPowerStatusByNodeName", name) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPowerStatusByNodeName indicates an expected call of GetPowerStatusByNodeName +func (mr *MockVMSetMockRecorder) GetPowerStatusByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPowerStatusByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetPowerStatusByNodeName), name) +} + +// GetPrivateIPsByNodeName mocks base method +func (m *MockVMSet) GetPrivateIPsByNodeName(name string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPrivateIPsByNodeName", name) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPrivateIPsByNodeName indicates an expected call of GetPrivateIPsByNodeName +func (mr *MockVMSetMockRecorder) GetPrivateIPsByNodeName(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPrivateIPsByNodeName", reflect.TypeOf((*MockVMSet)(nil).GetPrivateIPsByNodeName), name) +} diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/doc.go b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/doc.go new file mode 100644 index 00000000000..352e37f6902 --- /dev/null +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/mockvmsets/doc.go @@ -0,0 +1,20 @@ +// +build !providerless + +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package mockvmsets implements the mock client for VMSet. +package mockvmsets // import "k8s.io/legacy-cloud-providers/azure/mockvmsets" diff --git a/vendor/modules.txt b/vendor/modules.txt index d4f90b3b651..8086c6b85fb 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1871,11 +1871,14 @@ k8s.io/legacy-cloud-providers/azure/clients/interfaceclient k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient k8s.io/legacy-cloud-providers/azure/clients/publicipclient k8s.io/legacy-cloud-providers/azure/clients/routeclient +k8s.io/legacy-cloud-providers/azure/clients/routeclient/mockrouteclient k8s.io/legacy-cloud-providers/azure/clients/routetableclient +k8s.io/legacy-cloud-providers/azure/clients/routetableclient/mockroutetableclient k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient k8s.io/legacy-cloud-providers/azure/clients/snapshotclient k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient k8s.io/legacy-cloud-providers/azure/clients/subnetclient +k8s.io/legacy-cloud-providers/azure/clients/subnetclient/mocksubnetclient k8s.io/legacy-cloud-providers/azure/clients/vmclient k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient k8s.io/legacy-cloud-providers/azure/clients/vmssclient