Switch route controller to shared informers

This commit is contained in:
Andy Goldstein
2017-02-13 12:27:03 -05:00
parent beaf5ffacc
commit effde6b8dd
5 changed files with 69 additions and 67 deletions

View File

@@ -26,10 +26,14 @@ import (
core "k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions"
"k8s.io/kubernetes/pkg/cloudprovider"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/kubernetes/pkg/controller"
)
func alwaysReady() bool { return true }
func TestIsResponsibleForRoute(t *testing.T) {
myClusterName := "my-awesome-cluster"
myClusterRoute := "my-awesome-cluster-12345678-90ab-cdef-1234-567890abcdef"
@@ -57,7 +61,10 @@ func TestIsResponsibleForRoute(t *testing.T) {
if err != nil {
t.Errorf("%d. Error in test case: unparsable cidr %q", i, testCase.clusterCIDR)
}
rc := New(nil, nil, myClusterName, cidr)
client := fake.NewSimpleClientset()
informerFactory := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc())
rc := New(nil, nil, informerFactory.Core().V1().Nodes(), myClusterName, cidr)
rc.nodeListerSynced = alwaysReady
route := &cloudprovider.Route{
Name: testCase.routeName,
TargetNode: types.NodeName("doesnt-matter-for-this-test"),
@@ -76,7 +83,7 @@ func TestReconcile(t *testing.T) {
nodeNoCidr := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "node-2", UID: "02"}, Spec: v1.NodeSpec{PodCIDR: ""}}
testCases := []struct {
nodes []v1.Node
nodes []*v1.Node
initialRoutes []*cloudprovider.Route
expectedRoutes []*cloudprovider.Route
expectedNetworkUnavailable []bool
@@ -84,9 +91,9 @@ func TestReconcile(t *testing.T) {
}{
// 2 nodes, routes already there
{
nodes: []v1.Node{
node1,
node2,
nodes: []*v1.Node{
&node1,
&node2,
},
initialRoutes: []*cloudprovider.Route{
{cluster + "-01", "node-1", "10.120.0.0/24"},
@@ -101,9 +108,9 @@ func TestReconcile(t *testing.T) {
},
// 2 nodes, one route already there
{
nodes: []v1.Node{
node1,
node2,
nodes: []*v1.Node{
&node1,
&node2,
},
initialRoutes: []*cloudprovider.Route{
{cluster + "-01", "node-1", "10.120.0.0/24"},
@@ -117,9 +124,9 @@ func TestReconcile(t *testing.T) {
},
// 2 nodes, no routes yet
{
nodes: []v1.Node{
node1,
node2,
nodes: []*v1.Node{
&node1,
&node2,
},
initialRoutes: []*cloudprovider.Route{},
expectedRoutes: []*cloudprovider.Route{
@@ -131,9 +138,9 @@ func TestReconcile(t *testing.T) {
},
// 2 nodes, a few too many routes
{
nodes: []v1.Node{
node1,
node2,
nodes: []*v1.Node{
&node1,
&node2,
},
initialRoutes: []*cloudprovider.Route{
{cluster + "-01", "node-1", "10.120.0.0/24"},
@@ -150,9 +157,9 @@ func TestReconcile(t *testing.T) {
},
// 2 nodes, 2 routes, but only 1 is right
{
nodes: []v1.Node{
node1,
node2,
nodes: []*v1.Node{
&node1,
&node2,
},
initialRoutes: []*cloudprovider.Route{
{cluster + "-01", "node-1", "10.120.0.0/24"},
@@ -167,9 +174,9 @@ func TestReconcile(t *testing.T) {
},
// 2 nodes, one node without CIDR assigned.
{
nodes: []v1.Node{
node1,
nodeNoCidr,
nodes: []*v1.Node{
&node1,
&nodeNoCidr,
},
initialRoutes: []*cloudprovider.Route{},
expectedRoutes: []*cloudprovider.Route{
@@ -192,7 +199,9 @@ func TestReconcile(t *testing.T) {
t.Error("Error in test: fakecloud doesn't support Routes()")
}
_, cidr, _ := net.ParseCIDR("10.120.0.0/16")
rc := New(routes, testCase.clientset, cluster, cidr)
informerFactory := informers.NewSharedInformerFactory(testCase.clientset, controller.NoResyncPeriodFunc())
rc := New(routes, testCase.clientset, informerFactory.Core().V1().Nodes(), cluster, cidr)
rc.nodeListerSynced = alwaysReady
if err := rc.reconcile(testCase.nodes, testCase.initialRoutes); err != nil {
t.Errorf("%d. Error from rc.reconcile(): %v", i, err)
}