mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge pull request #88405 from feiskyer/mock-vmset
Swith to mock clients for route/routetable/networkinterface tests
This commit is contained in:
commit
de75bf9443
@ -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"],
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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"}]}}]}}`
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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{
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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(
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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"],
|
||||
)
|
@ -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)
|
||||
}
|
@ -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"
|
3
vendor/modules.txt
vendored
3
vendor/modules.txt
vendored
@ -1870,11 +1870,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
|
||||
|
Loading…
Reference in New Issue
Block a user