Add unittest
This commit is contained in:
parent
bc8b658a5c
commit
3f618d7dca
4 changed files with 57 additions and 7 deletions
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package backends
|
package backends
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
|
@ -25,10 +26,14 @@ import (
|
||||||
"k8s.io/ingress/controllers/gce/storage"
|
"k8s.io/ingress/controllers/gce/storage"
|
||||||
"k8s.io/ingress/controllers/gce/utils"
|
"k8s.io/ingress/controllers/gce/utils"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
|
"google.golang.org/api/googleapi"
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultZone = "zone-a"
|
const defaultZone = "zone-a"
|
||||||
|
|
||||||
|
var noOpErrFunc = func(op int, be *compute.BackendService) error { return nil }
|
||||||
|
|
||||||
func newBackendPool(f BackendServices, fakeIGs instances.InstanceGroups, syncWithCloud bool) BackendPool {
|
func newBackendPool(f BackendServices, fakeIGs instances.InstanceGroups, syncWithCloud bool) BackendPool {
|
||||||
namer := &utils.Namer{}
|
namer := &utils.Namer{}
|
||||||
nodePool := instances.NewNodePool(fakeIGs)
|
nodePool := instances.NewNodePool(fakeIGs)
|
||||||
|
@ -40,7 +45,7 @@ func newBackendPool(f BackendServices, fakeIGs instances.InstanceGroups, syncWit
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBackendPoolAdd(t *testing.T) {
|
func TestBackendPoolAdd(t *testing.T) {
|
||||||
f := NewFakeBackendServices()
|
f := NewFakeBackendServices(noOpErrFunc)
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
pool := newBackendPool(f, fakeIGs, false)
|
pool := newBackendPool(f, fakeIGs, false)
|
||||||
namer := utils.Namer{}
|
namer := utils.Namer{}
|
||||||
|
@ -110,7 +115,7 @@ func TestBackendPoolSync(t *testing.T) {
|
||||||
// Call sync on a backend pool with a list of ports, make sure the pool
|
// Call sync on a backend pool with a list of ports, make sure the pool
|
||||||
// creates/deletes required ports.
|
// creates/deletes required ports.
|
||||||
svcNodePorts := []int64{81, 82, 83}
|
svcNodePorts := []int64{81, 82, 83}
|
||||||
f := NewFakeBackendServices()
|
f := NewFakeBackendServices(noOpErrFunc)
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
pool := newBackendPool(f, fakeIGs, true)
|
pool := newBackendPool(f, fakeIGs, true)
|
||||||
pool.Add(81)
|
pool.Add(81)
|
||||||
|
@ -174,7 +179,7 @@ func TestBackendPoolSync(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBackendPoolShutdown(t *testing.T) {
|
func TestBackendPoolShutdown(t *testing.T) {
|
||||||
f := NewFakeBackendServices()
|
f := NewFakeBackendServices(noOpErrFunc)
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
pool := newBackendPool(f, fakeIGs, false)
|
pool := newBackendPool(f, fakeIGs, false)
|
||||||
namer := utils.Namer{}
|
namer := utils.Namer{}
|
||||||
|
@ -187,7 +192,7 @@ func TestBackendPoolShutdown(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBackendInstanceGroupClobbering(t *testing.T) {
|
func TestBackendInstanceGroupClobbering(t *testing.T) {
|
||||||
f := NewFakeBackendServices()
|
f := NewFakeBackendServices(noOpErrFunc)
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
pool := newBackendPool(f, fakeIGs, false)
|
pool := newBackendPool(f, fakeIGs, false)
|
||||||
namer := utils.Namer{}
|
namer := utils.Namer{}
|
||||||
|
@ -230,3 +235,40 @@ func TestBackendInstanceGroupClobbering(t *testing.T) {
|
||||||
t.Fatalf("Expected %v Got %v", expectedGroups, gotGroups)
|
t.Fatalf("Expected %v Got %v", expectedGroups, gotGroups)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBackendCreateBalancingMode(t *testing.T) {
|
||||||
|
f := NewFakeBackendServices(noOpErrFunc)
|
||||||
|
|
||||||
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
|
pool := newBackendPool(f, fakeIGs, false)
|
||||||
|
namer := utils.Namer{}
|
||||||
|
nodePort := int64(8080)
|
||||||
|
modes := []BalancingMode{Rate, Utilization}
|
||||||
|
|
||||||
|
// block the creation of Backends with the given balancingMode
|
||||||
|
// and verify that a backend with the other balancingMode is
|
||||||
|
// created
|
||||||
|
for i, bm := range modes {
|
||||||
|
f.errFunc = func(op int, be *compute.BackendService) error {
|
||||||
|
for _, b := range be.Backends {
|
||||||
|
if b.BalancingMode == string(bm) {
|
||||||
|
return &googleapi.Error{Code: http.StatusBadRequest}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.Add(nodePort)
|
||||||
|
be, err := f.GetBackendService(namer.BeName(nodePort))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, b := range be.Backends {
|
||||||
|
if b.BalancingMode != string(modes[(i+1)%len(modes)]) {
|
||||||
|
t.Fatalf("Wrong balancing mode, expected %v got %v", modes[(i+1)%len(modes)], b.BalancingMode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pool.GC([]int64{})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -25,8 +25,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewFakeBackendServices creates a new fake backend services manager.
|
// NewFakeBackendServices creates a new fake backend services manager.
|
||||||
func NewFakeBackendServices() *FakeBackendServices {
|
func NewFakeBackendServices(ef func(op int, be *compute.BackendService) error) *FakeBackendServices {
|
||||||
return &FakeBackendServices{
|
return &FakeBackendServices{
|
||||||
|
errFunc: ef,
|
||||||
backendServices: cache.NewStore(func(obj interface{}) (string, error) {
|
backendServices: cache.NewStore(func(obj interface{}) (string, error) {
|
||||||
svc := obj.(*compute.BackendService)
|
svc := obj.(*compute.BackendService)
|
||||||
return svc.Name, nil
|
return svc.Name, nil
|
||||||
|
@ -38,6 +39,7 @@ func NewFakeBackendServices() *FakeBackendServices {
|
||||||
type FakeBackendServices struct {
|
type FakeBackendServices struct {
|
||||||
backendServices cache.Store
|
backendServices cache.Store
|
||||||
calls []int
|
calls []int
|
||||||
|
errFunc func(op int, be *compute.BackendService) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBackendService fakes getting a backend service from the cloud.
|
// GetBackendService fakes getting a backend service from the cloud.
|
||||||
|
@ -60,6 +62,11 @@ func (f *FakeBackendServices) GetBackendService(name string) (*compute.BackendSe
|
||||||
|
|
||||||
// CreateBackendService fakes backend service creation.
|
// CreateBackendService fakes backend service creation.
|
||||||
func (f *FakeBackendServices) CreateBackendService(be *compute.BackendService) error {
|
func (f *FakeBackendServices) CreateBackendService(be *compute.BackendService) error {
|
||||||
|
if f.errFunc != nil {
|
||||||
|
if err := f.errFunc(utils.Create, be); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
f.calls = append(f.calls, utils.Create)
|
f.calls = append(f.calls, utils.Create)
|
||||||
be.SelfLink = be.Name
|
be.SelfLink = be.Name
|
||||||
return f.backendServices.Update(be)
|
return f.backendServices.Update(be)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
|
compute "google.golang.org/api/compute/v1"
|
||||||
"k8s.io/ingress/controllers/gce/backends"
|
"k8s.io/ingress/controllers/gce/backends"
|
||||||
"k8s.io/ingress/controllers/gce/firewalls"
|
"k8s.io/ingress/controllers/gce/firewalls"
|
||||||
"k8s.io/ingress/controllers/gce/healthchecks"
|
"k8s.io/ingress/controllers/gce/healthchecks"
|
||||||
|
@ -45,7 +46,7 @@ type fakeClusterManager struct {
|
||||||
// NewFakeClusterManager creates a new fake ClusterManager.
|
// NewFakeClusterManager creates a new fake ClusterManager.
|
||||||
func NewFakeClusterManager(clusterName string) *fakeClusterManager {
|
func NewFakeClusterManager(clusterName string) *fakeClusterManager {
|
||||||
fakeLbs := loadbalancers.NewFakeLoadBalancers(clusterName)
|
fakeLbs := loadbalancers.NewFakeLoadBalancers(clusterName)
|
||||||
fakeBackends := backends.NewFakeBackendServices()
|
fakeBackends := backends.NewFakeBackendServices(func(op int, be *compute.BackendService) error { return nil })
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
fakeHCs := healthchecks.NewFakeHealthChecks()
|
fakeHCs := healthchecks.NewFakeHealthChecks()
|
||||||
namer := utils.NewNamer(clusterName)
|
namer := utils.NewNamer(clusterName)
|
||||||
|
|
|
@ -34,7 +34,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
func newFakeLoadBalancerPool(f LoadBalancers, t *testing.T) LoadBalancerPool {
|
func newFakeLoadBalancerPool(f LoadBalancers, t *testing.T) LoadBalancerPool {
|
||||||
fakeBackends := backends.NewFakeBackendServices()
|
fakeBackends := backends.NewFakeBackendServices(func(op int, be *compute.BackendService) error { return nil })
|
||||||
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
fakeIGs := instances.NewFakeInstanceGroups(sets.NewString())
|
||||||
fakeHCs := healthchecks.NewFakeHealthChecks()
|
fakeHCs := healthchecks.NewFakeHealthChecks()
|
||||||
namer := &utils.Namer{}
|
namer := &utils.Namer{}
|
||||||
|
|
Loading…
Reference in a new issue