From 7a6ba40982ba69e74e005da150ab674c23ee8887 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Thu, 30 May 2019 15:58:18 +0530 Subject: [PATCH] fix unit test failures --- npc/controller.go | 32 +++++++++++++++++++------------- npc/controller_test.go | 34 ++++++++++++++++++++++++++++------ npc/namespace.go | 21 ++------------------- prog/weave-npc/main.go | 2 +- 4 files changed, 50 insertions(+), 39 deletions(-) diff --git a/npc/controller.go b/npc/controller.go index 45c34541..bf2ee837 100644 --- a/npc/controller.go +++ b/npc/controller.go @@ -5,13 +5,14 @@ import ( "sync" "github.com/pkg/errors" - coreapi "k8s.io/api/core/v1" - extnapi "k8s.io/api/extensions/v1beta1" - networkingv1 "k8s.io/api/networking/v1" - "github.com/weaveworks/weave/common" "github.com/weaveworks/weave/net/ipset" "github.com/weaveworks/weave/npc/iptables" + coreapi "k8s.io/api/core/v1" + extnapi "k8s.io/api/extensions/v1beta1" + networkingv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" ) type NetworkPolicyController interface { @@ -33,21 +34,22 @@ type controller struct { nodeName string // my node name - ipt iptables.Interface - ips ipset.Interface - + ipt iptables.Interface + ips ipset.Interface + clientset kubernetes.Interface nss map[string]*ns // ns name -> ns struct nsSelectors *selectorSet // selector string -> nsSelector namespacedPodSelectors *selectorSet defaultEgressDrop bool // flag to track if base iptable rule to drop egress traffic is added or not } -func New(nodeName string, ipt iptables.Interface, ips ipset.Interface) NetworkPolicyController { +func New(nodeName string, ipt iptables.Interface, ips ipset.Interface, clientset kubernetes.Interface) NetworkPolicyController { c := &controller{ - nodeName: nodeName, - ipt: ipt, - ips: ips, - nss: make(map[string]*ns)} + nodeName: nodeName, + ipt: ipt, + ips: ips, + clientset: clientset, + nss: make(map[string]*ns)} doNothing := func(*selector, policyType) error { return nil } c.nsSelectors = newSelectorSet(ips, c.onNewNsSelector, doNothing, doNothing) @@ -89,7 +91,11 @@ func (npc *controller) onNewNamespacePodsSelector(selector *selector) error { func (npc *controller) withNS(name string, f func(ns *ns) error) error { ns, found := npc.nss[name] if !found { - newNs, err := newNS(name, npc.nodeName, npc.ipt, npc.ips, npc.nsSelectors, npc.namespacedPodSelectors) + namespace, err := npc.clientset.CoreV1().Namespaces().Get(name, metav1.GetOptions{}) + if err != nil { + return err + } + newNs, err := newNS(name, npc.nodeName, npc.ipt, npc.ips, npc.nsSelectors, npc.namespacedPodSelectors, namespace) if err != nil { return err } diff --git a/npc/controller_test.go b/npc/controller_test.go index 21488f03..9ee42445 100644 --- a/npc/controller_test.go +++ b/npc/controller_test.go @@ -14,6 +14,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/client-go/kubernetes/fake" ) type mockSet struct { @@ -198,7 +199,10 @@ func TestRegressionPolicyNamespaceOrdering3059(t *testing.T) { // Namespaces first m := newMockIPSet() - controller := New("foo", newMockIPTables(), &m) + client := fake.NewSimpleClientset() + controller := New("foo", newMockIPTables(), &m, client) + client.CoreV1().Namespaces().Create(sourceNamespace) + client.CoreV1().Namespaces().Create(destinationNamespace) const ( selectorIPSetName = "weave-I239Zp%sCvoVt*D6u=A!2]YEk" @@ -214,7 +218,7 @@ func TestRegressionPolicyNamespaceOrdering3059(t *testing.T) { // NetworkPolicy first m = newMockIPSet() - controller = New("foo", newMockIPTables(), &m) + controller = New("foo", newMockIPTables(), &m, &fake.Clientset{}) controller.AddNetworkPolicy(networkPolicy) @@ -235,7 +239,7 @@ func TestDefaultAllow(t *testing.T) { ) m := newMockIPSet() - controller := New("bar", newMockIPTables(), &m) + controller := New("bar", newMockIPTables(), &m, &fake.Clientset{}) defaultNamespace := &coreapi.Namespace{ ObjectMeta: metav1.ObjectMeta{ @@ -363,13 +367,15 @@ func TestOutOfOrderPodEvents(t *testing.T) { ) m := newMockIPSet() - controller := New("qux", newMockIPTables(), &m) + client := fake.NewSimpleClientset() + controller := New("qux", newMockIPTables(), &m, client) defaultNamespace := &coreapi.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "default", }, } + client.CoreV1().Namespaces().Create(defaultNamespace) controller.AddNamespace(defaultNamespace) podFoo := &coreapi.Pod{ @@ -445,13 +451,15 @@ func TestNewTargetSelector(t *testing.T) { ) m := newMockIPSet() - controller := New("baz", newMockIPTables(), &m) + client := fake.NewSimpleClientset() + controller := New("baz", newMockIPTables(), &m, client) defaultNamespace := &coreapi.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "default", }, } + client.CoreV1().Namespaces().Create(defaultNamespace) controller.AddNamespace(defaultNamespace) podFoo := &coreapi.Pod{ @@ -521,7 +529,21 @@ func TestEgressPolicyWithIPBlock(t *testing.T) { m := newMockIPSet() ipt := newMockIPTables() - controller := New("foo", ipt, &m) + client := fake.NewSimpleClientset() + controller := New("foo", ipt, &m, client) + + defaultNamespace := &coreapi.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "default", + }, + } + nonDefaultNamespace := &coreapi.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "non-default", + }, + } + client.CoreV1().Namespaces().Create(defaultNamespace) + client.CoreV1().Namespaces().Create(nonDefaultNamespace) netpolFoo := &networkingv1.NetworkPolicy{ ObjectMeta: metav1.ObjectMeta{ diff --git a/npc/namespace.go b/npc/namespace.go index 6959fcd0..5ea24cea 100644 --- a/npc/namespace.go +++ b/npc/namespace.go @@ -10,8 +10,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" "github.com/weaveworks/weave/common" "github.com/weaveworks/weave/net/ipset" @@ -46,32 +44,17 @@ type ns struct { rules *ruleSet } -func newNS(name, nodeName string, ipt iptables.Interface, ips ipset.Interface, nsSelectors *selectorSet, namespacedPodsSelectors *selectorSet) (*ns, error) { +func newNS(name, nodeName string, ipt iptables.Interface, ips ipset.Interface, nsSelectors *selectorSet, namespacedPodsSelectors *selectorSet, namespaceObj *coreapi.Namespace) (*ns, error) { allPods, err := newSelectorSpec(&metav1.LabelSelector{}, nil, nil, name, ipset.HashIP) if err != nil { return nil, err } - config, err := rest.InClusterConfig() - if err != nil { - return nil, err - } - - client, err := kubernetes.NewForConfig(config) - if err != nil { - return nil, err - } - - namespace, err := client.CoreV1().Namespaces().Get(name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - ns := &ns{ ipt: ipt, ips: ips, name: name, - namespace: namespace, + namespace: namespaceObj, nodeName: nodeName, pods: make(map[types.UID]*coreapi.Pod), policies: make(map[types.UID]interface{}), diff --git a/prog/weave-npc/main.go b/prog/weave-npc/main.go index 3944cb88..d5231b7e 100644 --- a/prog/weave-npc/main.go +++ b/prog/weave-npc/main.go @@ -254,7 +254,7 @@ func root(cmd *cobra.Command, args []string) { handleError(resetIPSets(ips)) handleError(createBaseRules(ipt, ips)) - npc := npc.New(nodeName, ipt, ips) + npc := npc.New(nodeName, ipt, ips, client) nsController := makeController(client.Core().RESTClient(), "namespaces", &coreapi.Namespace{}, cache.ResourceEventHandlerFuncs{