Release of Routing Manager v0.3.0
[ric-plt/rtmgr.git] / pkg / sbi / nngpush_test.go
1 /*
2 ==================================================================================
3    Copyright (c) 2019 AT&T Intellectual Property.
4    Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19 /*
20         Mnemonic:       nngpush_test.go
21         Abstract:
22         Date:           3 May 2019
23 */
24 package sbi
25
26 import (
27         "errors"
28         "routing-manager/pkg/rtmgr"
29         "routing-manager/pkg/stub"
30         "testing"
31 )
32
33 /*
34 Returns an error free Socket instance
35 */
36 func createNewStubPushSocket() (NngSocket, error) {
37         socket := stub.MangosSocket{}
38         return socket, nil
39 }
40
41 /*
42 Returns a SocketError
43 */
44 func createNewStubPushSocketError() (NngSocket, error) {
45         return nil, errors.New("stub generated Create Socket error")
46 }
47
48 /*
49 Returns a Socket which always generates error on Close()
50 */
51 func createNewStubPushSocketCloseError() (NngSocket, error) {
52         socket := stub.MangosSocket{}
53         socket.GenerateSocketCloseError = true
54         return socket, nil
55 }
56
57 /*
58 Returns a Socket which always generates error on Send()
59 */
60 func createNewStubPushSocketSendError() (NngSocket, error) {
61         socket := stub.MangosSocket{}
62         socket.GenerateSocketSendError = true
63         return socket, nil
64 }
65
66 /*
67 Returns a Socket which always generates error on Dial()
68 */
69 func createNewStubPushSocketDialError() (NngSocket, error) {
70         socket := stub.MangosSocket{}
71         socket.GenerateSocketDialError = true
72         return socket, nil
73 }
74
75 /*
76 Resets the EndpointList according to argumnets
77 */
78 func resetTestPushDataset(instance NngPush, testdata []rtmgr.Endpoint) {
79         rtmgr.Eps = make(map[string]*rtmgr.Endpoint)
80         for _, endpoint := range testdata {
81                 ep := endpoint
82                 ep.Socket, _ = instance.NewSocket()
83                 rtmgr.Eps[ep.Uuid] = &ep
84         }
85 }
86
87 /*
88 nngpush.Initialize() method is empty, nothing to be tested
89 */
90 func TestNngPushInitialize(t *testing.T) {
91         var nngpush = NngPush{}
92         nngpush.NewSocket = createNewStubPushSocket
93
94         _ = nngpush.Initialize("")
95 }
96
97 /*
98 nngpush.Terminate() method is empty, nothing to be tested
99 */
100 func TestNngPushTerminate(t *testing.T) {
101         var nngpush = NngPush{}
102         nngpush.NewSocket = createNewStubPushSocket
103
104         _ = nngpush.Terminate()
105 }
106
107 /*
108 nngpush.UpdateEndpoints() is testd against stub.ValidXapps dataset
109 */
110 func TestNngPushUpdateEndpoints(t *testing.T) {
111         var nngpush = NngPush{}
112         nngpush.NewSocket = createNewStubPushSocket
113         rtmgr.Eps = make(rtmgr.Endpoints)
114
115         nngpush.UpdateEndpoints(&stub.ValidRicComponents)
116         if rtmgr.Eps == nil {
117                 t.Errorf("nngpush.UpdateEndpoints() result was incorrect, got: %v, want: %v.", nil, "rtmgr.Endpoints")
118         }
119 }
120
121 /*
122 nngpush.AddEndpoint() is tested for happy path case
123 */
124 func TestNngPushAddEndpoint(t *testing.T) {
125         var err error
126         var nngpush = NngPush{}
127         nngpush.NewSocket = createNewStubPushSocket
128         resetTestPushDataset(nngpush, stub.ValidEndpoints)
129
130         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
131         if err != nil {
132                 t.Errorf("nngpush.AddEndpoint() return was incorrect, got: %v, want: %v.", err, "nil")
133         }
134         if rtmgr.Eps["10.0.0.1:0"].Socket == nil {
135                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "Socket")
136         }
137 }
138
139 /*
140 nngpush.AddEndpoint() is tested for Socket creating error case
141 */
142 func TestNngPushAddEndpointWithSocketError(t *testing.T) {
143         var err error
144         var nngpush = NngPush{}
145         nngpush.NewSocket = createNewStubPushSocketError
146         resetTestPushDataset(nngpush, stub.ValidEndpoints)
147
148         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
149         if err == nil {
150                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
151         }
152         if rtmgr.Eps["10.0.0.1:0"].Socket != nil {
153                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", rtmgr.Eps["10.0.0.1:0"].Socket, nil)
154         }
155 }
156
157 /*
158 nngpush.AddEndpoint() is tested for Dialing error case
159 */
160 func TestNngPushAddEndpointWithSocketDialError(t *testing.T) {
161         var err error
162         var nngpush = NngPush{}
163         nngpush.NewSocket = createNewStubPushSocketDialError
164         resetTestPushDataset(nngpush, stub.ValidEndpoints)
165
166         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
167         if err == nil {
168                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
169         }
170 }
171
172 /*
173 nngpush.DistributeAll() is tested for happy path case
174 */
175 func TestNngPushDistributeAll(t *testing.T) {
176         var err error
177         var nngpush = NngPush{}
178         nngpush.NewSocket = createNewStubPushSocket
179         resetTestPushDataset(nngpush, stub.ValidEndpoints)
180
181         err = nngpush.DistributeAll(stub.ValidPolicies)
182         if err != nil {
183                 t.Errorf("nngpush.DistributeAll(policies) was incorrect, got: %v, want: %v.", err, "nil")
184         }
185 }
186
187 /*
188 nngpush.DistributeAll() is tested for Sending error case
189 */
190 func TestNngPushDistributeAllSocketSendError(t *testing.T) {
191         var err error
192         var nngpush = NngPush{}
193         nngpush.NewSocket = createNewStubPushSocketSendError
194         resetTestPushDataset(nngpush, stub.ValidEndpoints)
195
196         err = nngpush.DistributeAll(stub.ValidPolicies)
197         if err != nil {
198                 t.Errorf("nngpush.DistributeAll(policies) was incorrect, got: %v, want: %v.", err, "nil")
199         }
200 }
201
202 func TestNngPushDeleteEndpoint(t *testing.T) {
203         var err error
204         var nngpush = NngPush{}
205         nngpush.NewSocket = createNewStubPushSocket
206         resetTestPushDataset(nngpush, stub.ValidEndpoints)
207
208         err = nngpush.DeleteEndpoint(rtmgr.Eps["10.0.0.1:0"])
209         if err != nil {
210                 t.Errorf("nngpush.DeleteEndpoint() was incorrect, got: %v, want: %v.", err, "nil")
211         }
212 }
213
214 func TestNngPushDeleteEndpointWithSocketCloseError(t *testing.T) {
215         var err error
216         var nngpush = NngPush{}
217         nngpush.NewSocket = createNewStubPushSocketCloseError
218         resetTestPushDataset(nngpush, stub.ValidEndpoints)
219
220         err = nngpush.DeleteEndpoint(rtmgr.Eps["10.1.1.1:0"])
221         if err == nil {
222                 t.Errorf("nngpush.DeleteEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
223         }
224 }