2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
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
10 http://www.apache.org/licenses/LICENSE-2.0
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 ==================================================================================
27 "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststub"
28 "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststubdummy"
29 "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststube2ap"
30 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
33 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
36 func CaseBegin(desc string) *teststub.TestWrapper {
37 tent := teststub.NewTestWrapper(desc)
42 //-----------------------------------------------------------------------------
44 //-----------------------------------------------------------------------------
45 const teststubPortSeed int = 55555
47 //-----------------------------------------------------------------------------
49 //-----------------------------------------------------------------------------
51 var xappConn1 *teststube2ap.E2Stub
52 var xappConn2 *teststube2ap.E2Stub
53 var e2termConn1 *teststube2ap.E2Stub
54 var e2termConn2 *teststube2ap.E2Stub
55 var rtmgrHttp *testingHttpRtmgrStub
56 var mainCtrl *testingSubmgrControl
58 var dummystub *teststubdummy.RmrDummyStub
60 func ut_test_init() func() {
61 tent := CaseBegin("ut_test_init")
63 //---------------------------------
65 //---------------------------------
66 rtmgrHttp = createNewHttpRtmgrStub("RTMGRSTUB", "8989")
69 //---------------------------------
71 //---------------------------------
74 //Cfg creation won't work like this as xapp-frame reads it during init.
85 "protPort": "tcp:14560",
88 "txMessages": ["RIC_SUB_REQ", "RIC_SUB_DEL_REQ"],
89 "rxMessages": ["RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE", "RIC_INDICATION"]
94 "namespaces": ["sdl", "rnib"]
97 "HostAddr" : "localhost",
103 cfgfilename,_ := testCreateTmpFile(cfgstr)
104 defer os.Remove(cfgfilename)
105 os.Setenv("CFG_FILE", cfgfilename)
107 tent.Info("Using cfg file %s", os.Getenv("CFG_FILE"))
109 //---------------------------------
110 // Static routetable for rmr
112 // NOTE: Routing table is configured so, that responses
113 // are duplicated to xapp1 and xapp2 instances.
114 // If XID is not matching xapp stub will just
115 // drop message. (Messages 12011, 12012, 12021, 12022)
117 // NOTE2: teststubPortSeed message type is for stub rmr connectivity probing
119 // NOTE3: Ports per entity:
122 // -------------------
124 mainsrc := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 14560}}
125 xapp1src := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 13560}}
126 xapp2src := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 13660}}
127 e2term1src := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 15560}}
128 e2term2src := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 15660}}
129 dummysrc := teststub.RmrSrcId{xapp.RmrEndpoint{"localhost", 16560}}
131 //---------------------------------
132 rt := &teststub.RmrRouteTable{}
133 rt.AddRoute(12010, "", -1, mainsrc.String())
134 rt.AddRoute(12010, mainsrc.String(), -1, "%meid")
135 rt.AddRoute(12011, e2term1src.String(), -1, mainsrc.String())
136 rt.AddRoute(12012, e2term1src.String(), -1, mainsrc.String())
137 rt.AddRoute(12011, e2term2src.String(), -1, mainsrc.String())
138 rt.AddRoute(12012, e2term2src.String(), -1, mainsrc.String())
139 rt.AddRoute(12011, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
140 rt.AddRoute(12012, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
141 rt.AddRoute(12020, "", -1, mainsrc.String())
142 rt.AddRoute(12020, mainsrc.String(), -1, "%meid")
143 rt.AddRoute(12021, e2term1src.String(), -1, mainsrc.String())
144 rt.AddRoute(12022, e2term1src.String(), -1, mainsrc.String())
145 rt.AddRoute(12021, e2term2src.String(), -1, mainsrc.String())
146 rt.AddRoute(12022, e2term2src.String(), -1, mainsrc.String())
147 rt.AddRoute(12021, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
148 rt.AddRoute(12022, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
149 rt.AddRoute(teststubPortSeed, "", -1, xapp2src.String()+";"+xapp1src.String()+";"+e2term1src.String()+";"+e2term2src.String()+";"+dummysrc.String())
151 rt.AddMeid(e2term1src.String(), []string{"RAN_NAME_1", "RAN_NAME_2"})
152 rt.AddMeid(e2term2src.String(), []string{"RAN_NAME_11", "RAN_NAME_12"})
155 tent.Info("rttable[%s]", rt.Table())
157 //---------------------------------
159 //---------------------------------
160 tent.Info("### submgr ctrl run ###")
161 mainCtrl = createSubmgrControl(mainsrc, teststub.RmrRtgSvc{})
164 // Tweak to get around with fact that alarm package alternates RMR_SEED_RT environment variable
166 //xapp-frame inits alarms when readycb is coming from xapps rmr
167 //alarm will make new rmr instance and overrides RMR_SEED_RT and RMR_RTG_SVC
168 //env variables. Re-create rt info.
169 for i := 0; i < int(10)*2; i++ {
170 if os.Getenv("RMR_SEED_RT") == rt.FileName() {
171 tent.Info("Waiting that alarm alternates RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
172 time.Sleep(500 * time.Millisecond)
174 tent.Info("Alarm has alternated RMR_SEED_RT=%s, so waiting 0.5 secs before restoring it", os.Getenv("RMR_SEED_RT"))
175 time.Sleep(500 * time.Millisecond)
177 tent.Info("rttable[%s]", rt.Table())
182 if os.Getenv("RMR_SEED_RT") != rt.FileName() {
183 tent.Error("Unittest timing issue with alarm RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
187 //---------------------------------
189 //---------------------------------
190 tent.Info("### xapp1 stub run ###")
191 xappConn1 = teststube2ap.CreateNewE2Stub("xappstub1", xapp1src, teststub.RmrRtgSvc{}, "RMRXAPP1STUB", teststubPortSeed, "RAN_NAME_1", "localhost", 13560, 8080)
193 //---------------------------------
195 //---------------------------------
196 tent.Info("### xapp2 stub run ###")
197 xappConn2 = teststube2ap.CreateNewE2Stub("xappstub2", xapp2src, teststub.RmrRtgSvc{}, "RMRXAPP2STUB", teststubPortSeed, "RAN_NAME_2", "localhost", 13660, 8080)
199 //---------------------------------
201 //---------------------------------
202 tent.Info("### e2term1 stub run ###")
203 e2termConn1 = teststube2ap.CreateNewE2termStub("e2termstub1", e2term1src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB1", teststubPortSeed)
205 //---------------------------------
207 //---------------------------------
208 tent.Info("### e2term2 stub run ###")
209 e2termConn2 = teststube2ap.CreateNewE2termStub("e2termstub2", e2term2src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB2", teststubPortSeed)
211 //---------------------------------
212 // Just to test dummy stub
213 //---------------------------------
214 tent.Info("### dummy stub run ###")
215 dummystub = teststubdummy.CreateNewRmrDummyStub("dummystub", dummysrc, teststub.RmrRtgSvc{}, "DUMMYSTUB", teststubPortSeed)
217 //---------------------------------
218 // Testing message sending
219 //---------------------------------
220 if teststub.RmrStubControlWaitAlive(10, teststubPortSeed, mainCtrl.c.RMRClient, tent) == false {
224 if os.Getenv("RMR_SEED_RT") != rt.FileName() {
225 tent.Error("Unittest timing issue with alarm RMR_SEED_RT=%s", os.Getenv("RMR_SEED_RT"))
229 return func() { rt.Disable() }
232 //-----------------------------------------------------------------------------
234 //-----------------------------------------------------------------------------
235 func TestMain(m *testing.M) {
236 CaseBegin("TestMain start")
237 cleanfn := ut_test_init()