RIC-208 - KA Decision: ask K8S to restart E2T instance
[ric-plt/e2mgr.git] / E2Manager / managers / kubernetes_manager_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 //  platform project (RICP).
20
21 package managers
22
23 import (
24         "e2mgr/configuration"
25         "e2mgr/logger"
26         "github.com/stretchr/testify/assert"
27         "k8s.io/api/core/v1"
28         metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29         "k8s.io/apimachinery/pkg/runtime"
30         "k8s.io/client-go/kubernetes/fake"
31         "testing"
32 )
33
34 type TestStruct struct {
35         description string
36         namespace   string
37         expected    []string
38         objs        []runtime.Object
39 }
40
41 func initKubernetesManagerTest(t *testing.T) *KubernetesManager {
42         logger, err := logger.InitLogger(logger.DebugLevel)
43         if err != nil {
44                 t.Errorf("#... - failed to initialize logger, error: %s", err)
45         }
46         config := &configuration.Configuration{}
47         config.Kubernetes.Namespace = "oran"
48         config.Kubernetes.ConfigPath = "somePath"
49
50         kubernetesManager := NewKubernetesManager(logger, config)
51
52         return kubernetesManager
53 }
54
55 func TestDelete_NoPodName(t *testing.T) {
56         test := TestStruct{
57                 description: "2 namespace, 2 pods in oran",
58                 namespace:   "oran",
59                 objs:        []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test_1")},
60         }
61
62         kubernetesManager := initKubernetesManagerTest(t)
63
64         t.Run(test.description, func(t *testing.T) {
65                 kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
66
67                 err := kubernetesManager.DeletePod("")
68                 assert.NotNil(t, err)
69         })
70 }
71
72 func TestDelete_NoPods(t *testing.T) {
73         test := TestStruct{
74                 description: "no pods",
75                 namespace:   "oran",
76                 expected:    nil,
77                 objs:        nil,
78         }
79
80         kubernetesManager := initKubernetesManagerTest(t)
81
82         t.Run(test.description, func(t *testing.T) {
83                 kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
84
85                 err := kubernetesManager.DeletePod("POD_Test")
86                 assert.NotNil(t, err)
87         })
88 }
89
90 func TestDelete_PodExists(t *testing.T) {
91         test := TestStruct{
92                 description: "2 namespace, 2 pods in oran",
93                 namespace:   "oran",
94                 objs:        []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test_1")},
95         }
96
97         kubernetesManager := initKubernetesManagerTest(t)
98
99         t.Run(test.description, func(t *testing.T) {
100                 kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
101
102                 err := kubernetesManager.DeletePod("POD_Test_1")
103                 assert.Nil(t, err)
104         })
105 }
106
107 func TestDelete_NoPodInNamespace(t *testing.T) {
108         test := TestStruct{
109                 description: "2 namespace, 2 pods in oran",
110                 namespace:   "oran",
111                 objs:        []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test")},
112         }
113
114         kubernetesManager := initKubernetesManagerTest(t)
115
116         t.Run(test.description, func(t *testing.T) {
117                 kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
118
119                 err := kubernetesManager.DeletePod("POD_Test")
120                 assert.NotNil(t, err)
121         })
122 }
123
124 func TestDelete_NoNamespace(t *testing.T) {
125         test := TestStruct{
126                 description: "No oran namespace",
127                 namespace:   "oran",
128                 objs:        []runtime.Object{pod("some-namespace", "POD_Test_1"), pod("some-namespace", "POD_Test_2"), pod("some-namespace", "POD_Test")},
129         }
130
131         kubernetesManager := initKubernetesManagerTest(t)
132
133         t.Run(test.description, func(t *testing.T) {
134                 kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
135
136                 err := kubernetesManager.DeletePod("POD_Test")
137                 assert.NotNil(t, err)
138         })
139 }
140
141 func pod(namespace, image string) *v1.Pod {
142
143         return &v1.Pod{
144                 ObjectMeta: metaV1.ObjectMeta{
145                         Name:        image,
146                         Namespace:   namespace,
147                         Annotations: map[string]string{},
148                 },
149         }
150 }