Adding scope of RICPlatform that are under Apache License
[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    This source code is part of the near-RT RIC (RAN Intelligent Controller)
19    platform project (RICP).
20
21 ==================================================================================
22 */
23 /*
24         Mnemonic:       nngpush_test.go
25         Abstract:
26         Date:           3 May 2019
27 */
28 package sbi
29
30 import (
31         "errors"
32         "routing-manager/pkg/rtmgr"
33         "routing-manager/pkg/stub"
34         "testing"
35 )
36
37 /*
38 Returns an error free Socket instance
39 */
40 func createNewStubPushSocket() (NngSocket, error) {
41         socket := stub.MangosSocket{}
42         return socket, nil
43 }
44
45 /*
46 Returns a SocketError
47 */
48 func createNewStubPushSocketError() (NngSocket, error) {
49         return nil, errors.New("stub generated Create Socket error")
50 }
51
52 /*
53 Returns a Socket which always generates error on Close()
54 */
55 func createNewStubPushSocketCloseError() (NngSocket, error) {
56         socket := stub.MangosSocket{}
57         socket.GenerateSocketCloseError = true
58         return socket, nil
59 }
60
61 /*
62 Returns a Socket which always generates error on Send()
63 */
64 func createNewStubPushSocketSendError() (NngSocket, error) {
65         socket := stub.MangosSocket{}
66         socket.GenerateSocketSendError = true
67         return socket, nil
68 }
69
70 /*
71 Returns a Socket which always generates error on Dial()
72 */
73 func createNewStubPushSocketDialError() (NngSocket, error) {
74         socket := stub.MangosSocket{}
75         socket.GenerateSocketDialError = true
76         return socket, nil
77 }
78
79 /*
80 Resets the EndpointList according to argumnets
81 */
82 func resetTestPushDataset(instance NngPush, testdata []rtmgr.Endpoint) {
83         rtmgr.Eps = make(map[string]*rtmgr.Endpoint)
84         for _, endpoint := range testdata {
85                 ep := endpoint
86                 ep.Socket, _ = instance.NewSocket()
87                 rtmgr.Eps[ep.Uuid] = &ep
88         }
89 }
90
91 /*
92 nngpush.Initialize() method is empty, nothing to be tested
93 */
94 func TestNngPushInitialize(t *testing.T) {
95         var nngpush = NngPush{}
96         nngpush.NewSocket = createNewStubPushSocket
97
98         _ = nngpush.Initialize("")
99 }
100
101 /*
102 nngpush.Terminate() method is empty, nothing to be tested
103 */
104 func TestNngPushTerminate(t *testing.T) {
105         var nngpush = NngPush{}
106         nngpush.NewSocket = createNewStubPushSocket
107
108         _ = nngpush.Terminate()
109 }
110
111 /*
112 nngpush.UpdateEndpoints() is testd against stub.ValidXApps dataset
113 */
114 func TestNngPushUpdateEndpoints(t *testing.T) {
115         var nngpush = NngPush{}
116         nngpush.NewSocket = createNewStubPushSocket
117         rtmgr.Eps = make(rtmgr.Endpoints)
118
119         nngpush.UpdateEndpoints(&stub.ValidRicComponents)
120         if rtmgr.Eps == nil {
121                 t.Errorf("nngpush.UpdateEndpoints() result was incorrect, got: %v, want: %v.", nil, "rtmgr.Endpoints")
122         }
123 }
124
125 /*
126 nngpush.AddEndpoint() is tested for happy path case
127 */
128 func TestNngPushAddEndpoint(t *testing.T) {
129         var err error
130         var nngpush = NngPush{}
131         nngpush.NewSocket = createNewStubPushSocket
132         resetTestPushDataset(nngpush, stub.ValidEndpoints)
133
134         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
135         if err != nil {
136                 t.Errorf("nngpush.AddEndpoint() return was incorrect, got: %v, want: %v.", err, "nil")
137         }
138         if rtmgr.Eps["10.0.0.1:0"].Socket == nil {
139                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "Socket")
140         }
141 }
142
143 /*
144 nngpush.AddEndpoint() is tested for Socket creating error case
145 */
146 func TestNngPushAddEndpointWithSocketError(t *testing.T) {
147         var err error
148         var nngpush = NngPush{}
149         nngpush.NewSocket = createNewStubPushSocketError
150         resetTestPushDataset(nngpush, stub.ValidEndpoints)
151
152         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
153         if err == nil {
154                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
155         }
156         if rtmgr.Eps["10.0.0.1:0"].Socket != nil {
157                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", rtmgr.Eps["10.0.0.1:0"].Socket, nil)
158         }
159 }
160
161 /*
162 nngpush.AddEndpoint() is tested for Dialing error case
163 */
164 func TestNngPushAddEndpointWithSocketDialError(t *testing.T) {
165         var err error
166         var nngpush = NngPush{}
167         nngpush.NewSocket = createNewStubPushSocketDialError
168         resetTestPushDataset(nngpush, stub.ValidEndpoints)
169
170         err = nngpush.AddEndpoint(rtmgr.Eps["10.0.0.1:0"])
171         if err == nil {
172                 t.Errorf("nngpush.AddEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
173         }
174 }
175
176 /*
177 nngpush.DistributeAll() is tested for happy path case
178 */
179 func TestNngPushDistributeAll(t *testing.T) {
180         var err error
181         var nngpush = NngPush{}
182         nngpush.NewSocket = createNewStubPushSocket
183         resetTestPushDataset(nngpush, stub.ValidEndpoints)
184
185         err = nngpush.DistributeAll(stub.ValidPolicies)
186         if err != nil {
187                 t.Errorf("nngpush.DistributeAll(policies) was incorrect, got: %v, want: %v.", err, "nil")
188         }
189 }
190
191 /*
192 nngpush.DistributeAll() is tested for Sending error case
193 */
194 func TestNngPushDistributeAllSocketSendError(t *testing.T) {
195         var err error
196         var nngpush = NngPush{}
197         nngpush.NewSocket = createNewStubPushSocketSendError
198         resetTestPushDataset(nngpush, stub.ValidEndpoints)
199
200         err = nngpush.DistributeAll(stub.ValidPolicies)
201         if err != nil {
202                 t.Errorf("nngpush.DistributeAll(policies) was incorrect, got: %v, want: %v.", err, "nil")
203         }
204 }
205
206 func TestNngPushDeleteEndpoint(t *testing.T) {
207         var err error
208         var nngpush = NngPush{}
209         nngpush.NewSocket = createNewStubPushSocket
210         resetTestPushDataset(nngpush, stub.ValidEndpoints)
211
212         err = nngpush.DeleteEndpoint(rtmgr.Eps["10.0.0.1:0"])
213         if err != nil {
214                 t.Errorf("nngpush.DeleteEndpoint() was incorrect, got: %v, want: %v.", err, "nil")
215         }
216 }
217
218 func TestNngPushDeleteEndpointWithSocketCloseError(t *testing.T) {
219         var err error
220         var nngpush = NngPush{}
221         nngpush.NewSocket = createNewStubPushSocketCloseError
222         resetTestPushDataset(nngpush, stub.ValidEndpoints)
223
224         err = nngpush.DeleteEndpoint(rtmgr.Eps["10.1.1.1:0"])
225         if err == nil {
226                 t.Errorf("nngpush.DeleteEndpoint() was incorrect, got: %v, want: %v.", nil, "error")
227         }
228 }