From fbc2872ab705db287cafc9c481de769fdb338af7 Mon Sep 17 00:00:00 2001 From: Brandon Palm Date: Wed, 18 Sep 2024 14:13:47 -0500 Subject: [PATCH 1/2] networkpolicy: add List() func --- pkg/networkpolicy/list.go | 58 ++++++++++++++++++++++++++++++++++ pkg/networkpolicy/list_test.go | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 pkg/networkpolicy/list.go create mode 100644 pkg/networkpolicy/list_test.go diff --git a/pkg/networkpolicy/list.go b/pkg/networkpolicy/list.go new file mode 100644 index 000000000..253f28418 --- /dev/null +++ b/pkg/networkpolicy/list.go @@ -0,0 +1,58 @@ +package networkpolicy + +import ( + "context" + "fmt" + + "github.com/golang/glog" + "github.com/openshift-kni/eco-goinfra/pkg/clients" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// List returns networkpolicy inventory in the given namespace. +func List(apiClient *clients.Settings, nsname string, options ...metav1.ListOptions) ([]*NetworkPolicyBuilder, error) { + if nsname == "" { + glog.V(100).Infof("networkpolicy 'nsname' parameter can not be empty") + + return nil, fmt.Errorf("failed to list networkpolicies, 'nsname' parameter is empty") + } + + passedOptions := metav1.ListOptions{} + logMessage := fmt.Sprintf("Listing networkpolicies in the namespace %s", nsname) + + if len(options) > 1 { + glog.V(100).Infof("'options' parameter must be empty or single-valued") + + return nil, fmt.Errorf("error: more than one ListOptions was passed") + } + + if len(options) == 1 { + passedOptions = options[0] + logMessage += fmt.Sprintf(" with the options %v", passedOptions) + } + + glog.V(100).Infof(logMessage) + + networkpolicyList, err := apiClient.NetworkPolicies(nsname).List(context.TODO(), passedOptions) + + if err != nil { + glog.V(100).Infof("Failed to list networkpolicies in the namespace %s due to %s", nsname, err.Error()) + + return nil, err + } + + var networkpolicyObjects []*NetworkPolicyBuilder + + for _, runningNetworkPolicy := range networkpolicyList.Items { + copiedNetworkPolicy := runningNetworkPolicy + networkpolicyBuilder := &NetworkPolicyBuilder{ + apiClient: apiClient, + Object: &copiedNetworkPolicy, + Definition: &copiedNetworkPolicy, + } + + networkpolicyObjects = append(networkpolicyObjects, networkpolicyBuilder) + } + + return networkpolicyObjects, nil +} diff --git a/pkg/networkpolicy/list_test.go b/pkg/networkpolicy/list_test.go new file mode 100644 index 000000000..3d5b429d4 --- /dev/null +++ b/pkg/networkpolicy/list_test.go @@ -0,0 +1,55 @@ +package networkpolicy + +import ( + "testing" + + "github.com/openshift-kni/eco-goinfra/pkg/clients" + "github.com/stretchr/testify/assert" + netv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +func TestList(t *testing.T) { + generateNetworkPolicy := func(name, namespace string) *netv1.NetworkPolicy { + return &netv1.NetworkPolicy{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + Labels: map[string]string{"demo": name}, + }, + } + } + + testCases := []struct { + networkPolicyExists bool + }{ + { + networkPolicyExists: true, + }, + { + networkPolicyExists: false, + }, + } + + for _, testCase := range testCases { + var runtimeObjects []runtime.Object + + if testCase.networkPolicyExists { + runtimeObjects = append(runtimeObjects, generateNetworkPolicy("test-networkpolicy", "test-namespace")) + } + + testSettings := clients.GetTestClients(clients.TestClientParams{ + K8sMockObjects: runtimeObjects, + }) + + networkPolicyList, err := List(testSettings, "test-namespace") + assert.NoError(t, err) + + if testCase.networkPolicyExists { + assert.Len(t, networkPolicyList, 1) + } else { + assert.Nil(t, networkPolicyList) + } + } +} From 103b444f1e5dcebb752ae4ee43d4e07df0feb06c Mon Sep 17 00:00:00 2001 From: Brandon Palm Date: Thu, 19 Sep 2024 11:53:57 -0500 Subject: [PATCH 2/2] Add more unit test cases --- pkg/networkpolicy/list_test.go | 55 ++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/pkg/networkpolicy/list_test.go b/pkg/networkpolicy/list_test.go index 3d5b429d4..352b70eb5 100644 --- a/pkg/networkpolicy/list_test.go +++ b/pkg/networkpolicy/list_test.go @@ -1,6 +1,7 @@ package networkpolicy import ( + "errors" "testing" "github.com/openshift-kni/eco-goinfra/pkg/clients" @@ -22,13 +23,46 @@ func TestList(t *testing.T) { } testCases := []struct { - networkPolicyExists bool + networkPolicyExists bool + testNamespace string + listOptions []metav1.ListOptions + expetedError error + expectedNumNetworkPolicies int }{ - { - networkPolicyExists: true, + { // NetworkPolicy does exist + networkPolicyExists: true, + testNamespace: "test-namespace", + expetedError: nil, + listOptions: []metav1.ListOptions{}, + expectedNumNetworkPolicies: 1, }, - { - networkPolicyExists: false, + { // NetworkPolicy does not exist + networkPolicyExists: false, + testNamespace: "test-namespace", + expetedError: nil, + listOptions: []metav1.ListOptions{}, + expectedNumNetworkPolicies: 0, + }, + { // Missing namespace parameter + networkPolicyExists: true, + testNamespace: "", + expetedError: errors.New("failed to list networkpolicies, 'nsname' parameter is empty"), + listOptions: []metav1.ListOptions{}, + expectedNumNetworkPolicies: 0, + }, + { // More than one ListOptions was passed + networkPolicyExists: true, + testNamespace: "test-namespace", + expetedError: errors.New("error: more than one ListOptions was passed"), + listOptions: []metav1.ListOptions{{}, {}}, + expectedNumNetworkPolicies: 0, + }, + { // Valid number of list options + networkPolicyExists: true, + testNamespace: "test-namespace", + expetedError: nil, + listOptions: []metav1.ListOptions{{}}, + expectedNumNetworkPolicies: 1, }, } @@ -43,13 +77,8 @@ func TestList(t *testing.T) { K8sMockObjects: runtimeObjects, }) - networkPolicyList, err := List(testSettings, "test-namespace") - assert.NoError(t, err) - - if testCase.networkPolicyExists { - assert.Len(t, networkPolicyList, 1) - } else { - assert.Nil(t, networkPolicyList) - } + networkPolicyList, err := List(testSettings, testCase.testNamespace, testCase.listOptions...) + assert.Equal(t, testCase.expetedError, err) + assert.Equal(t, testCase.expectedNumNetworkPolicies, len(networkPolicyList)) } }