Expose public function to init fake GCECloud + add common hooks
This commit is contained in:
parent
bc6cb90820
commit
8872f9465f
@ -20,6 +20,7 @@ go_library(
|
|||||||
"gce_clusterid.go",
|
"gce_clusterid.go",
|
||||||
"gce_clusters.go",
|
"gce_clusters.go",
|
||||||
"gce_disks.go",
|
"gce_disks.go",
|
||||||
|
"gce_fake.go",
|
||||||
"gce_firewall.go",
|
"gce_firewall.go",
|
||||||
"gce_forwardingrule.go",
|
"gce_forwardingrule.go",
|
||||||
"gce_healthchecks.go",
|
"gce_healthchecks.go",
|
||||||
@ -50,6 +51,7 @@ go_library(
|
|||||||
"//pkg/cloudprovider/providers/gce/cloud:go_default_library",
|
"//pkg/cloudprovider/providers/gce/cloud:go_default_library",
|
||||||
"//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
|
"//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
|
||||||
"//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
|
"//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
|
||||||
|
"//pkg/cloudprovider/providers/gce/cloud/mock:go_default_library",
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//pkg/features:go_default_library",
|
"//pkg/features:go_default_library",
|
||||||
"//pkg/kubelet/apis:go_default_library",
|
"//pkg/kubelet/apis:go_default_library",
|
||||||
@ -120,7 +122,6 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/cache:go_default_library",
|
|
||||||
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
|
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
|
||||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||||
"//vendor/github.com/stretchr/testify/require:go_default_library",
|
"//vendor/github.com/stretchr/testify/require:go_default_library",
|
||||||
|
@ -44,6 +44,8 @@ var (
|
|||||||
InUseError = &googleapi.Error{Code: http.StatusBadRequest, Message: "It's being used by god."}
|
InUseError = &googleapi.Error{Code: http.StatusBadRequest, Message: "It's being used by god."}
|
||||||
// InternalServerError is shared variable with error code StatusInternalServerError for error verification.
|
// InternalServerError is shared variable with error code StatusInternalServerError for error verification.
|
||||||
InternalServerError = &googleapi.Error{Code: http.StatusInternalServerError}
|
InternalServerError = &googleapi.Error{Code: http.StatusInternalServerError}
|
||||||
|
// UnauthorizedErr wraps a Google API error with code StatusForbidden.
|
||||||
|
UnauthorizedErr = &googleapi.Error{Code: http.StatusForbidden}
|
||||||
)
|
)
|
||||||
|
|
||||||
// gceObject is an abstraction of all GCE API object in go client
|
// gceObject is an abstraction of all GCE API object in go client
|
||||||
@ -436,6 +438,63 @@ func UpdateRegionBackendServiceHook(ctx context.Context, key *meta.Key, obj *ga.
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateBackendServiceHook defines the hook for updating a BackendService.
|
||||||
|
// It replaces the object with the same key in the mock with the updated object.
|
||||||
|
func UpdateBackendServiceHook(ctx context.Context, key *meta.Key, obj *ga.BackendService, m *cloud.MockBackendServices) error {
|
||||||
|
_, err := m.Get(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return &googleapi.Error{
|
||||||
|
Code: http.StatusNotFound,
|
||||||
|
Message: fmt.Sprintf("Key: %s was not found in BackendServices", key.String()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.Name = key.Name
|
||||||
|
projectID := m.ProjectRouter.ProjectID(ctx, "ga", "backendServices")
|
||||||
|
obj.SelfLink = cloud.SelfLink(meta.VersionGA, projectID, "backendServices", key)
|
||||||
|
|
||||||
|
m.Objects[*key] = &cloud.MockBackendServicesObj{Obj: obj}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateAlphaBackendServiceHook defines the hook for updating an alpha BackendService.
|
||||||
|
// It replaces the object with the same key in the mock with the updated object.
|
||||||
|
func UpdateAlphaBackendServiceHook(ctx context.Context, key *meta.Key, obj *alpha.BackendService, m *cloud.MockAlphaBackendServices) error {
|
||||||
|
_, err := m.Get(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return &googleapi.Error{
|
||||||
|
Code: http.StatusNotFound,
|
||||||
|
Message: fmt.Sprintf("Key: %s was not found in BackendServices", key.String()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.Name = key.Name
|
||||||
|
projectID := m.ProjectRouter.ProjectID(ctx, "alpha", "backendServices")
|
||||||
|
obj.SelfLink = cloud.SelfLink(meta.VersionAlpha, projectID, "backendServices", key)
|
||||||
|
|
||||||
|
m.Objects[*key] = &cloud.MockBackendServicesObj{Obj: obj}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateURLMapHook defines the hook for updating a UrlMap.
|
||||||
|
// It replaces the object with the same key in the mock with the updated object.
|
||||||
|
func UpdateURLMapHook(ctx context.Context, key *meta.Key, obj *ga.UrlMap, m *cloud.MockUrlMaps) error {
|
||||||
|
_, err := m.Get(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return &googleapi.Error{
|
||||||
|
Code: http.StatusNotFound,
|
||||||
|
Message: fmt.Sprintf("Key: %s was not found in UrlMaps", key.String()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.Name = key.Name
|
||||||
|
projectID := m.ProjectRouter.ProjectID(ctx, "ga", "urlMaps")
|
||||||
|
obj.SelfLink = cloud.SelfLink(meta.VersionGA, projectID, "urlMaps", key)
|
||||||
|
|
||||||
|
m.Objects[*key] = &cloud.MockUrlMapsObj{Obj: obj}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// InsertFirewallsUnauthorizedErrHook mocks firewall insertion. A forbidden error will be thrown as return.
|
// InsertFirewallsUnauthorizedErrHook mocks firewall insertion. A forbidden error will be thrown as return.
|
||||||
func InsertFirewallsUnauthorizedErrHook(ctx context.Context, key *meta.Key, obj *ga.Firewall, m *cloud.MockFirewalls) (bool, error) {
|
func InsertFirewallsUnauthorizedErrHook(ctx context.Context, key *meta.Key, obj *ga.Firewall, m *cloud.MockFirewalls) (bool, error) {
|
||||||
return true, &googleapi.Error{Code: http.StatusForbidden}
|
return true, &googleapi.Error{Code: http.StatusForbidden}
|
||||||
@ -496,6 +555,16 @@ func DeleteAddressesInternalErrHook(ctx context.Context, key *meta.Key, m *cloud
|
|||||||
return true, InternalServerError
|
return true, InternalServerError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InsertAlphaBackendServiceUnauthorizedErrHook mocks inserting an alpha BackendService and returns a forbidden error.
|
||||||
|
func InsertAlphaBackendServiceUnauthorizedErrHook(ctx context.Context, key *meta.Key, obj *alpha.BackendService, m *cloud.MockAlphaBackendServices) (bool, error) {
|
||||||
|
return true, UnauthorizedErr
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateAlphaBackendServiceUnauthorizedErrHook mocks updating an alpha BackendService and returns a forbidden error.
|
||||||
|
func UpdateAlphaBackendServiceUnauthorizedErrHook(ctx context.Context, key *meta.Key, obj *alpha.BackendService, m *cloud.MockAlphaBackendServices) error {
|
||||||
|
return UnauthorizedErr
|
||||||
|
}
|
||||||
|
|
||||||
// GetRegionBackendServicesErrHook mocks getting region backend service and returns an internal server error.
|
// GetRegionBackendServicesErrHook mocks getting region backend service and returns an internal server error.
|
||||||
func GetRegionBackendServicesErrHook(ctx context.Context, key *meta.Key, m *cloud.MockRegionBackendServices) (bool, *ga.BackendService, error) {
|
func GetRegionBackendServicesErrHook(ctx context.Context, key *meta.Key, m *cloud.MockRegionBackendServices) (bool, *ga.BackendService, error) {
|
||||||
return true, nil, InternalServerError
|
return true, nil, InternalServerError
|
||||||
|
83
pkg/cloudprovider/providers/gce/gce_fake.go
Normal file
83
pkg/cloudprovider/providers/gce/gce_fake.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 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 gce
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
compute "google.golang.org/api/compute/v1"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestClusterValues struct {
|
||||||
|
ProjectID string
|
||||||
|
Region string
|
||||||
|
ZoneName string
|
||||||
|
SecondaryZoneName string
|
||||||
|
ClusterID string
|
||||||
|
ClusterName string
|
||||||
|
}
|
||||||
|
|
||||||
|
func DefaultTestClusterValues() TestClusterValues {
|
||||||
|
return TestClusterValues{
|
||||||
|
ProjectID: "test-project",
|
||||||
|
Region: "us-central1",
|
||||||
|
ZoneName: "us-central1-b",
|
||||||
|
SecondaryZoneName: "us-central1-c",
|
||||||
|
ClusterID: "test-cluster-id",
|
||||||
|
ClusterName: "Test Cluster Name",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func FakeGCECloud(vals TestClusterValues) *GCECloud {
|
||||||
|
return simpleFakeGCECloud(vals)
|
||||||
|
}
|
||||||
|
|
||||||
|
type fakeRoundTripper struct{}
|
||||||
|
|
||||||
|
func (*fakeRoundTripper) RoundTrip(*http.Request) (*http.Response, error) {
|
||||||
|
return nil, fmt.Errorf("err: test used fake http client")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stubs ClusterID so that ClusterID.getOrInitialize() does not require calling
|
||||||
|
// gce.Initialize()
|
||||||
|
func fakeClusterID(clusterID string) ClusterID {
|
||||||
|
return ClusterID{
|
||||||
|
clusterID: &clusterID,
|
||||||
|
store: cache.NewStore(func(obj interface{}) (string, error) {
|
||||||
|
return "", nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func simpleFakeGCECloud(vals TestClusterValues) *GCECloud {
|
||||||
|
client := &http.Client{Transport: &fakeRoundTripper{}}
|
||||||
|
service, _ := compute.New(client)
|
||||||
|
gce := &GCECloud{
|
||||||
|
region: vals.Region,
|
||||||
|
service: service,
|
||||||
|
managedZones: []string{vals.ZoneName},
|
||||||
|
projectID: vals.ProjectID,
|
||||||
|
networkProjectID: vals.ProjectID,
|
||||||
|
ClusterID: fakeClusterID(vals.ClusterID),
|
||||||
|
}
|
||||||
|
c := cloud.NewMockGCE(&gceProjectRouter{gce})
|
||||||
|
gce.c = c
|
||||||
|
return gce
|
||||||
|
}
|
@ -23,9 +23,7 @@ package gce
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -35,12 +33,9 @@ import (
|
|||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
v1_service "k8s.io/kubernetes/pkg/api/v1/service"
|
v1_service "k8s.io/kubernetes/pkg/api/v1/service"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
|
|
||||||
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,26 +49,6 @@ const (
|
|||||||
errStrUnsupportedTier = "unsupported network tier: \"" + wrongTier + "\""
|
errStrUnsupportedTier = "unsupported network tier: \"" + wrongTier + "\""
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestClusterValues struct {
|
|
||||||
ProjectID string
|
|
||||||
Region string
|
|
||||||
ZoneName string
|
|
||||||
SecondaryZoneName string
|
|
||||||
ClusterID string
|
|
||||||
ClusterName string
|
|
||||||
}
|
|
||||||
|
|
||||||
func DefaultTestClusterValues() TestClusterValues {
|
|
||||||
return TestClusterValues{
|
|
||||||
ProjectID: "test-project",
|
|
||||||
Region: "us-central1",
|
|
||||||
ZoneName: "us-central1-b",
|
|
||||||
SecondaryZoneName: "us-central1-c",
|
|
||||||
ClusterID: "test-cluster-id",
|
|
||||||
ClusterName: "Test Cluster Name",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func fakeLoadbalancerService(lbType string) *v1.Service {
|
func fakeLoadbalancerService(lbType string) *v1.Service {
|
||||||
return &v1.Service{
|
return &v1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -92,73 +67,6 @@ var (
|
|||||||
FilewallChangeMsg = fmt.Sprintf("%s %s %s", v1.EventTypeNormal, eventReasonManualChange, eventMsgFirewallChange)
|
FilewallChangeMsg = fmt.Sprintf("%s %s %s", v1.EventTypeNormal, eventReasonManualChange, eventMsgFirewallChange)
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeRoundTripper struct{}
|
|
||||||
|
|
||||||
func (*fakeRoundTripper) RoundTrip(*http.Request) (*http.Response, error) {
|
|
||||||
return nil, fmt.Errorf("err: test used fake http client")
|
|
||||||
}
|
|
||||||
|
|
||||||
func fakeGCECloud(vals TestClusterValues) (*GCECloud, error) {
|
|
||||||
client := &http.Client{Transport: &fakeRoundTripper{}}
|
|
||||||
|
|
||||||
service, err := compute.New(client)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used in disk unit tests
|
|
||||||
fakeManager := newFakeManager(vals.ProjectID, vals.Region)
|
|
||||||
zonesWithNodes := createNodeZones([]string{vals.ZoneName})
|
|
||||||
|
|
||||||
alphaFeatureGate := NewAlphaFeatureGate([]string{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
gce := &GCECloud{
|
|
||||||
region: vals.Region,
|
|
||||||
service: service,
|
|
||||||
manager: fakeManager,
|
|
||||||
managedZones: []string{vals.ZoneName},
|
|
||||||
projectID: vals.ProjectID,
|
|
||||||
networkProjectID: vals.ProjectID,
|
|
||||||
AlphaFeatureGate: alphaFeatureGate,
|
|
||||||
nodeZones: zonesWithNodes,
|
|
||||||
nodeInformerSynced: func() bool { return true },
|
|
||||||
ClusterID: fakeClusterID(vals.ClusterID),
|
|
||||||
}
|
|
||||||
|
|
||||||
c := cloud.NewMockGCE(&gceProjectRouter{gce})
|
|
||||||
c.MockTargetPools.AddInstanceHook = mock.AddInstanceHook
|
|
||||||
c.MockTargetPools.RemoveInstanceHook = mock.RemoveInstanceHook
|
|
||||||
c.MockForwardingRules.InsertHook = mock.InsertFwdRuleHook
|
|
||||||
c.MockAddresses.InsertHook = mock.InsertAddressHook
|
|
||||||
c.MockAlphaAddresses.InsertHook = mock.InsertAlphaAddressHook
|
|
||||||
c.MockAlphaAddresses.X = mock.AddressAttributes{}
|
|
||||||
c.MockAddresses.X = mock.AddressAttributes{}
|
|
||||||
|
|
||||||
c.MockInstanceGroups.X = mock.InstanceGroupAttributes{
|
|
||||||
InstanceMap: make(map[meta.Key]map[string]*compute.InstanceWithNamedPorts),
|
|
||||||
Lock: &sync.Mutex{},
|
|
||||||
}
|
|
||||||
c.MockInstanceGroups.AddInstancesHook = mock.AddInstancesHook
|
|
||||||
c.MockInstanceGroups.RemoveInstancesHook = mock.RemoveInstancesHook
|
|
||||||
c.MockInstanceGroups.ListInstancesHook = mock.ListInstancesHook
|
|
||||||
|
|
||||||
c.MockRegionBackendServices.UpdateHook = mock.UpdateRegionBackendServiceHook
|
|
||||||
c.MockHealthChecks.UpdateHook = mock.UpdateHealthCheckHook
|
|
||||||
c.MockFirewalls.UpdateHook = mock.UpdateFirewallHook
|
|
||||||
|
|
||||||
keyGA := meta.GlobalKey("key-ga")
|
|
||||||
c.MockZones.Objects[*keyGA] = &cloud.MockZonesObj{
|
|
||||||
Obj: &compute.Zone{Name: vals.ZoneName, Region: gce.getRegionLink(vals.Region)},
|
|
||||||
}
|
|
||||||
|
|
||||||
gce.c = c
|
|
||||||
|
|
||||||
return gce, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAndInsertNodes(gce *GCECloud, nodeNames []string, zoneName string) ([]*v1.Node, error) {
|
func createAndInsertNodes(gce *GCECloud, nodeNames []string, zoneName string) ([]*v1.Node, error) {
|
||||||
nodes := []*v1.Node{}
|
nodes := []*v1.Node{}
|
||||||
|
|
||||||
@ -208,17 +116,6 @@ func createAndInsertNodes(gce *GCECloud, nodeNames []string, zoneName string) ([
|
|||||||
return nodes, nil
|
return nodes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stubs ClusterID so that ClusterID.getOrInitialize() does not require calling
|
|
||||||
// gce.Initialize()
|
|
||||||
func fakeClusterID(clusterID string) ClusterID {
|
|
||||||
return ClusterID{
|
|
||||||
clusterID: &clusterID,
|
|
||||||
store: cache.NewStore(func(obj interface{}) (string, error) {
|
|
||||||
return "", nil
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func assertExternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) {
|
func assertExternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) {
|
||||||
lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService)
|
lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService)
|
||||||
hcName := MakeNodesHealthCheckName(vals.ClusterID)
|
hcName := MakeNodesHealthCheckName(vals.ClusterID)
|
||||||
|
@ -24,17 +24,55 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
|
||||||
|
|
||||||
"cloud.google.com/go/compute/metadata"
|
"cloud.google.com/go/compute/metadata"
|
||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func fakeGCECloud(vals TestClusterValues) (*GCECloud, error) {
|
||||||
|
gce := simpleFakeGCECloud(vals)
|
||||||
|
|
||||||
|
gce.AlphaFeatureGate = NewAlphaFeatureGate([]string{})
|
||||||
|
gce.nodeInformerSynced = func() bool { return true }
|
||||||
|
|
||||||
|
mockGCE := gce.c.(*cloud.MockGCE)
|
||||||
|
mockGCE.MockTargetPools.AddInstanceHook = mock.AddInstanceHook
|
||||||
|
mockGCE.MockTargetPools.RemoveInstanceHook = mock.RemoveInstanceHook
|
||||||
|
mockGCE.MockForwardingRules.InsertHook = mock.InsertFwdRuleHook
|
||||||
|
mockGCE.MockAddresses.InsertHook = mock.InsertAddressHook
|
||||||
|
mockGCE.MockAlphaAddresses.InsertHook = mock.InsertAlphaAddressHook
|
||||||
|
mockGCE.MockAlphaAddresses.X = mock.AddressAttributes{}
|
||||||
|
mockGCE.MockAddresses.X = mock.AddressAttributes{}
|
||||||
|
|
||||||
|
mockGCE.MockInstanceGroups.X = mock.InstanceGroupAttributes{
|
||||||
|
InstanceMap: make(map[meta.Key]map[string]*compute.InstanceWithNamedPorts),
|
||||||
|
Lock: &sync.Mutex{},
|
||||||
|
}
|
||||||
|
mockGCE.MockInstanceGroups.AddInstancesHook = mock.AddInstancesHook
|
||||||
|
mockGCE.MockInstanceGroups.RemoveInstancesHook = mock.RemoveInstancesHook
|
||||||
|
mockGCE.MockInstanceGroups.ListInstancesHook = mock.ListInstancesHook
|
||||||
|
|
||||||
|
mockGCE.MockRegionBackendServices.UpdateHook = mock.UpdateRegionBackendServiceHook
|
||||||
|
mockGCE.MockHealthChecks.UpdateHook = mock.UpdateHealthCheckHook
|
||||||
|
mockGCE.MockFirewalls.UpdateHook = mock.UpdateFirewallHook
|
||||||
|
|
||||||
|
keyGA := meta.GlobalKey("key-ga")
|
||||||
|
mockGCE.MockZones.Objects[*keyGA] = &cloud.MockZonesObj{
|
||||||
|
Obj: &compute.Zone{Name: vals.ZoneName, Region: gce.getRegionLink(vals.Region)},
|
||||||
|
}
|
||||||
|
|
||||||
|
return gce, nil
|
||||||
|
}
|
||||||
|
|
||||||
type gceInstance struct {
|
type gceInstance struct {
|
||||||
Zone string
|
Zone string
|
||||||
Name string
|
Name string
|
||||||
|
Loading…
Reference in New Issue
Block a user