c0c3b72060efd5618be0e8d6b1cfe4a095967b71
[ric-plt/submgr.git] / pkg / control / ut_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 package control
21
22 import (
23         "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststub"
24         "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststubdummy"
25         "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststube2ap"
26         "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/xapptweaks"
27         "os"
28         "testing"
29         "time"
30 )
31
32 //-----------------------------------------------------------------------------
33 //
34 //-----------------------------------------------------------------------------
35 func CaseBegin(desc string) *teststub.TestWrapper {
36         tent := teststub.NewTestWrapper(desc)
37         tent.Logger.Info(desc)
38         return tent
39 }
40
41 //-----------------------------------------------------------------------------
42 //
43 //-----------------------------------------------------------------------------
44
45 var xappConn1 *teststube2ap.E2Stub
46 var xappConn2 *teststube2ap.E2Stub
47 var e2termConn1 *teststube2ap.E2Stub
48 var e2termConn2 *teststube2ap.E2Stub
49 var rtmgrHttp *testingHttpRtmgrStub
50 var mainCtrl *testingSubmgrControl
51
52 var dummystub *teststubdummy.RmrDummyStub
53
54 func ut_test_init() {
55         tent := CaseBegin("ut_test_init")
56
57         //---------------------------------
58         //
59         //---------------------------------
60         rtmgrHttp = createNewHttpRtmgrStub("RTMGRSTUB", "8989")
61         go rtmgrHttp.run()
62
63         //---------------------------------
64         //
65         //---------------------------------
66
67         //
68         //Cfg creation won't work like this as xapp-frame reads it during init.
69         //
70         /*
71             cfgstr:=`{
72               "local": {
73                   "host": ":8080"
74               },
75               "logger": {
76                   "level": 4
77               },
78               "rmr": {
79                  "protPort": "tcp:14560",
80                  "maxSize": 4096,
81                  "numWorkers": 1,
82                  "txMessages": ["RIC_SUB_REQ", "RIC_SUB_DEL_REQ"],
83                  "rxMessages": ["RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE", "RIC_INDICATION"]
84               },
85               "db": {
86                   "host": "localhost",
87                   "port": 6379,
88                   "namespaces": ["sdl", "rnib"]
89               },
90                  "rtmgr" : {
91                    "HostAddr" : "localhost",
92                    "port" : "8989",
93                    "baseUrl" : "/"
94                  }
95            `
96
97            cfgfilename,_ := testCreateTmpFile(cfgstr)
98            defer os.Remove(cfgfilename)
99            os.Setenv("CFG_FILE", cfgfilename)
100         */
101         tent.Logger.Info("Using cfg file %s", os.Getenv("CFG_FILE"))
102
103         //---------------------------------
104         // Static routetable for rmr
105         //
106         // NOTE: Routing table is configured so, that responses
107         //       are duplicated to xapp1 and xapp2 instances.
108         //       If XID is not matching xapp stub will just
109         //       drop message. (Messages 12011, 12012, 12021, 12022)
110         //
111         // NOTE2: 55555 message type is for stub rmr connectivity probing
112         //
113         // NOTE3: Ports per entity:
114         //
115         // Entity
116         // -------------------
117
118         mainsrc := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 14560}}
119         xapp1src := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 13560}}
120         xapp2src := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 13660}}
121         e2term1src := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 15560}}
122         e2term2src := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 15660}}
123         dummysrc := teststub.RmrSrcId{xapptweaks.RmrEndpoint{"localhost", 16560}}
124
125         //---------------------------------
126         rt := &teststub.RmrRouteTable{}
127         rt.AddRoute(12010, "", -1, mainsrc.String())
128         rt.AddRoute(12010, mainsrc.String(), -1, "%meid")
129         rt.AddRoute(12011, e2term1src.String(), -1, mainsrc.String())
130         rt.AddRoute(12012, e2term1src.String(), -1, mainsrc.String())
131         rt.AddRoute(12011, e2term2src.String(), -1, mainsrc.String())
132         rt.AddRoute(12012, e2term2src.String(), -1, mainsrc.String())
133         rt.AddRoute(12011, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
134         rt.AddRoute(12012, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
135         rt.AddRoute(12020, "", -1, mainsrc.String())
136         rt.AddRoute(12020, mainsrc.String(), -1, "%meid")
137         rt.AddRoute(12021, e2term1src.String(), -1, mainsrc.String())
138         rt.AddRoute(12022, e2term1src.String(), -1, mainsrc.String())
139         rt.AddRoute(12021, e2term2src.String(), -1, mainsrc.String())
140         rt.AddRoute(12022, e2term2src.String(), -1, mainsrc.String())
141         rt.AddRoute(12021, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
142         rt.AddRoute(12022, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
143         rt.AddRoute(55555, "", -1, xapp2src.String()+";"+xapp1src.String()+";"+e2term1src.String()+";"+e2term2src.String()+";"+dummysrc.String())
144
145         rt.AddMeid(e2term1src.String(), []string{"RAN_NAME_1", "RAN_NAME_2"})
146         rt.AddMeid(e2term2src.String(), []string{"RAN_NAME_11", "RAN_NAME_12"})
147
148         rt.Enable()
149         defer rt.Disable()
150         tent.Logger.Info("rttable[%s]", rt.Table())
151
152         //---------------------------------
153         //
154         //---------------------------------
155         tent.Logger.Info("### submgr ctrl run ###")
156         mainCtrl = createSubmgrControl(mainsrc, teststub.RmrRtgSvc{})
157
158         //
159         // Tweak to get around with fact that alarm package alternates RMR_SEED_RT environment variable
160         //
161         //xapp-frame inits alarms when readycb is coming from xapps rmr
162         //alarm will make new rmr instance and overrides RMR_SEED_RT and RMR_RTG_SVC
163         //env variables. Re-create rt info.
164         for i := 0; i < int(10)*2; i++ {
165                 if os.Getenv("RMR_SEED_RT") == rt.FileName() {
166                         tent.Logger.Info("Waiting that alarm alternates RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
167                         time.Sleep(500 * time.Millisecond)
168                 } else {
169                         tent.Logger.Info("Alarm has alternated RMR_SEED_RT=%s, so waiting 0.5 secs before restoring it", os.Getenv("RMR_SEED_RT"))
170                         time.Sleep(500 * time.Millisecond)
171                         rt.Disable()
172                         rt.Enable()
173                         break
174                 }
175         }
176
177         if os.Getenv("RMR_SEED_RT") != rt.FileName() {
178                 tent.Logger.Error("Unittest timing issue with alarm RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
179                 os.Exit(1)
180         }
181
182         //---------------------------------
183         //
184         //---------------------------------
185         tent.Logger.Info("### xapp1 stub run ###")
186         xappConn1 = teststube2ap.CreateNewE2Stub("xappstub1", xapp1src, teststub.RmrRtgSvc{}, "RMRXAPP1STUB", 55555)
187
188         //---------------------------------
189         //
190         //---------------------------------
191         tent.Logger.Info("### xapp2 stub run ###")
192         xappConn2 = teststube2ap.CreateNewE2Stub("xappstub2", xapp2src, teststub.RmrRtgSvc{}, "RMRXAPP2STUB", 55555)
193
194         //---------------------------------
195         //
196         //---------------------------------
197         tent.Logger.Info("### e2term1 stub run ###")
198         e2termConn1 = teststube2ap.CreateNewE2termStub("e2termstub1", e2term1src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB1", 55555)
199
200         //---------------------------------
201         //
202         //---------------------------------
203         tent.Logger.Info("### e2term2 stub run ###")
204         e2termConn2 = teststube2ap.CreateNewE2termStub("e2termstub2", e2term2src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB2", 55555)
205
206         //---------------------------------
207         // Just to test dummy stub
208         //---------------------------------
209         tent.Logger.Info("### dummy stub run ###")
210         dummystub = teststubdummy.CreateNewRmrDummyStub("dummystub", dummysrc, teststub.RmrRtgSvc{}, "DUMMYSTUB", 55555)
211
212         //---------------------------------
213         // Testing message sending
214         //---------------------------------
215         if teststub.RmrStubControlWaitAlive(10, 55555, mainCtrl.c) == false {
216                 os.Exit(1)
217         }
218
219         if os.Getenv("RMR_SEED_RT") != rt.FileName() {
220                 tent.Logger.Error("Unittest timing issue with alarm RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
221                 os.Exit(1)
222         }
223
224 }
225
226 //-----------------------------------------------------------------------------
227 //
228 //-----------------------------------------------------------------------------
229 func TestMain(m *testing.M) {
230         CaseBegin("TestMain start")
231         ut_test_init()
232         code := m.Run()
233         os.Exit(code)
234 }