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 ==================================================================================
23 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
24 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap_wrapper"
25 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/packer"
26 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
33 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
36 var xapp_e2asnpacker e2ap.E2APPackerIf = e2ap_wrapper.NewAsn1E2Packer()
38 //-----------------------------------------------------------------------------
40 //-----------------------------------------------------------------------------
41 type xappTransaction struct {
47 type testingXappStub struct {
52 //-----------------------------------------------------------------------------
54 //-----------------------------------------------------------------------------
55 func createNewXappStub(desc string, rtfile string, port string, stat string) *testingXappStub {
56 xappCtrl := &testingXappStub{}
57 xappCtrl.testingRmrStubControl.init(desc, rtfile, port, stat, xappCtrl)
62 //-----------------------------------------------------------------------------
64 //-----------------------------------------------------------------------------
65 func (tc *testingXappStub) newXid() string {
67 xid = tc.desc + "_XID_" + strconv.FormatUint(uint64(tc.xid_seq), 10)
72 //-----------------------------------------------------------------------------
74 //-----------------------------------------------------------------------------
75 func (tc *testingXappStub) newXappTransaction(xid *string, ranname string) *xappTransaction {
76 trans := &xappTransaction{}
79 trans.xid = tc.newXid()
83 trans.meid = &xapp.RMRMeid{RanName: ranname}
87 //-----------------------------------------------------------------------------
89 //-----------------------------------------------------------------------------
90 func (tc *testingXappStub) Consume(params *xapp.RMRParams) (err error) {
91 xapp.Rmr.Free(params.Mbuf)
93 msg := &RMRParams{params}
95 if params.Mtype == 55555 {
96 xapp.Logger.Info("(%s) Testing message ignore %s", tc.desc, msg.String())
101 if strings.Contains(msg.Xid, tc.desc) {
102 xapp.Logger.Info("(%s) Consume %s", tc.desc, msg.String())
106 xapp.Logger.Info("(%s) Ignore %s", tc.desc, msg.String())
111 //-----------------------------------------------------------------------------
113 //-----------------------------------------------------------------------------
114 type test_subs_req_params struct {
115 req *e2ap.E2APSubscriptionRequest
118 func (p *test_subs_req_params) Init() {
119 p.req = &e2ap.E2APSubscriptionRequest{}
121 p.req.RequestId.Id = 1
122 p.req.RequestId.Seq = 0
125 p.req.EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
126 p.req.EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.StringPut("310150")
127 p.req.EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 123
128 p.req.EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDHomeBits28
130 // gnb -> enb outgoing
131 // enb -> gnb incoming
133 p.req.EventTriggerDefinition.InterfaceDirection = e2ap.E2AP_InterfaceDirectionIncoming
134 p.req.EventTriggerDefinition.ProcedureCode = 5 //28 35
135 p.req.EventTriggerDefinition.TypeOfMessage = e2ap.E2AP_InitiatingMessage
137 p.req.ActionSetups = make([]e2ap.ActionToBeSetupItem, 1)
138 p.req.ActionSetups[0].ActionId = 0
139 p.req.ActionSetups[0].ActionType = e2ap.E2AP_ActionTypeReport
140 p.req.ActionSetups[0].ActionDefinition.Present = false
141 //p.req.ActionSetups[index].ActionDefinition.StyleId = 255
142 //p.req.ActionSetups[index].ActionDefinition.ParamId = 222
143 p.req.ActionSetups[0].SubsequentAction.Present = true
144 p.req.ActionSetups[0].SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeContinue
145 p.req.ActionSetups[0].SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitZero
149 func (xappConn *testingXappStub) handle_xapp_subs_req(t *testing.T, rparams *test_subs_req_params, oldTrans *xappTransaction) *xappTransaction {
150 xapp.Logger.Info("(%s) handle_xapp_subs_req", xappConn.desc)
151 e2SubsReq := xapp_e2asnpacker.NewPackerSubscriptionRequest()
153 //---------------------------------
154 // xapp activity: Send Subs Req
155 //---------------------------------
156 xapp.Logger.Info("(%s) Send Subs Req", xappConn.desc)
161 myparams = &test_subs_req_params{}
165 e2SubsReq.Set(myparams.req)
166 xapp.Logger.Debug("%s", e2SubsReq.String())
167 err, packedMsg := e2SubsReq.Pack(nil)
169 testError(t, "(%s) pack NOK %s", xappConn.desc, err.Error())
173 var trans *xappTransaction = oldTrans
175 trans = xappConn.newXappTransaction(nil, "RAN_NAME_1")
178 params := &RMRParams{&xapp.RMRParams{}}
179 params.Mtype = xapp.RIC_SUB_REQ
181 params.Payload = packedMsg.Buf
182 params.Meid = trans.meid
183 params.Xid = trans.xid
186 snderr := xappConn.RmrSend(params)
188 testError(t, "(%s) RMR SEND FAILED: %s", xappConn.desc, snderr.Error())
194 //-----------------------------------------------------------------------------
196 //-----------------------------------------------------------------------------
197 func (xappConn *testingXappStub) handle_xapp_subs_resp(t *testing.T, trans *xappTransaction) uint32 {
198 xapp.Logger.Info("(%s) handle_xapp_subs_resp", xappConn.desc)
199 e2SubsResp := xapp_e2asnpacker.NewPackerSubscriptionResponse()
202 //---------------------------------
203 // xapp activity: Recv Subs Resp
204 //---------------------------------
206 case msg := <-xappConn.rmrConChan:
208 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_RESP"] {
209 testError(t, "(%s) Received RIC_SUB_RESP wrong mtype expected %s got %s, error", xappConn.desc, "RIC_SUB_RESP", xapp.RicMessageTypeToName[msg.Mtype])
211 } else if msg.Xid != trans.xid {
212 testError(t, "(%s) Received RIC_SUB_RESP wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
215 packedData := &packer.PackedData{}
216 packedData.Buf = msg.Payload
218 e2SubsId = uint32(msg.SubId)
222 unpackerr := e2SubsResp.UnPack(packedData)
224 if unpackerr != nil {
225 testError(t, "(%s) RIC_SUB_RESP unpack failed err: %s", xappConn.desc, unpackerr.Error())
227 geterr, resp := e2SubsResp.Get()
229 testError(t, "(%s) RIC_SUB_RESP get failed err: %s", xappConn.desc, geterr.Error())
232 xapp.Logger.Info("(%s) Recv Subs Resp rmr: xid=%s subid=%d, asn: seqnro=%d", xappConn.desc, msg.Xid, msg.SubId, resp.RequestId.Seq)
235 case <-time.After(15 * time.Second):
236 testError(t, "(%s) Not Received RIC_SUB_RESP within 15 secs", xappConn.desc)
242 //-----------------------------------------------------------------------------
244 //-----------------------------------------------------------------------------
245 func (xappConn *testingXappStub) handle_xapp_subs_fail(t *testing.T, trans *xappTransaction) uint32 {
246 xapp.Logger.Info("(%s) handle_xapp_subs_fail", xappConn.desc)
247 e2SubsFail := xapp_e2asnpacker.NewPackerSubscriptionFailure()
250 //-------------------------------
251 // xapp activity: Recv Subs Fail
252 //-------------------------------
254 case msg := <-xappConn.rmrConChan:
256 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_FAILURE"] {
257 testError(t, "(%s) Received RIC_SUB_FAILURE wrong mtype expected %s got %s, error", xappConn.desc, "RIC_SUB_FAILURE", xapp.RicMessageTypeToName[msg.Mtype])
259 } else if msg.Xid != trans.xid {
260 testError(t, "(%s) Received RIC_SUB_FAILURE wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
263 packedData := &packer.PackedData{}
264 packedData.Buf = msg.Payload
266 e2SubsId = uint32(msg.SubId)
270 unpackerr := e2SubsFail.UnPack(packedData)
272 if unpackerr != nil {
273 testError(t, "(%s) RIC_SUB_FAILURE unpack failed err: %s", xappConn.desc, unpackerr.Error())
275 geterr, resp := e2SubsFail.Get()
277 testError(t, "(%s) RIC_SUB_FAILURE get failed err: %s", xappConn.desc, geterr.Error())
280 xapp.Logger.Info("(%s) Recv Subs Fail rmr: xid=%s subid=%d, asn: seqnro=%d", xappConn.desc, msg.Xid, msg.SubId, resp.RequestId.Seq)
283 case <-time.After(15 * time.Second):
284 testError(t, "(%s) Not Received RIC_SUB_FAILURE within 15 secs", xappConn.desc)
290 //-----------------------------------------------------------------------------
292 //-----------------------------------------------------------------------------
293 func (xappConn *testingXappStub) handle_xapp_subs_del_req(t *testing.T, oldTrans *xappTransaction, e2SubsId uint32) *xappTransaction {
294 xapp.Logger.Info("(%s) handle_xapp_subs_del_req", xappConn.desc)
295 e2SubsDelReq := xapp_e2asnpacker.NewPackerSubscriptionDeleteRequest()
297 //---------------------------------
298 // xapp activity: Send Subs Del Req
299 //---------------------------------
300 xapp.Logger.Info("(%s) Send Subs Del Req", xappConn.desc)
302 req := &e2ap.E2APSubscriptionDeleteRequest{}
304 req.RequestId.Seq = e2SubsId
307 e2SubsDelReq.Set(req)
308 xapp.Logger.Debug("%s", e2SubsDelReq.String())
309 err, packedMsg := e2SubsDelReq.Pack(nil)
311 testError(t, "(%s) pack NOK %s", xappConn.desc, err.Error())
315 var trans *xappTransaction = oldTrans
317 trans = xappConn.newXappTransaction(nil, "RAN_NAME_1")
320 params := &RMRParams{&xapp.RMRParams{}}
321 params.Mtype = xapp.RIC_SUB_DEL_REQ
322 params.SubId = int(e2SubsId)
323 params.Payload = packedMsg.Buf
324 params.Meid = trans.meid
325 params.Xid = trans.xid
328 snderr := xappConn.RmrSend(params)
330 testError(t, "(%s) RMR SEND FAILED: %s", xappConn.desc, snderr.Error())
336 //-----------------------------------------------------------------------------
338 //-----------------------------------------------------------------------------
339 func (xappConn *testingXappStub) handle_xapp_subs_del_resp(t *testing.T, trans *xappTransaction) {
340 xapp.Logger.Info("(%s) handle_xapp_subs_del_resp", xappConn.desc)
341 e2SubsDelResp := xapp_e2asnpacker.NewPackerSubscriptionDeleteResponse()
343 //---------------------------------
344 // xapp activity: Recv Subs Del Resp
345 //---------------------------------
347 case msg := <-xappConn.rmrConChan:
349 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_DEL_RESP"] {
350 testError(t, "(%s) Received RIC_SUB_DEL_RESP wrong mtype expected %s got %s, error", xappConn.desc, "RIC_SUB_DEL_RESP", xapp.RicMessageTypeToName[msg.Mtype])
352 } else if trans != nil && msg.Xid != trans.xid {
353 testError(t, "(%s) Received RIC_SUB_DEL_RESP wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
356 packedData := &packer.PackedData{}
357 packedData.Buf = msg.Payload
358 unpackerr := e2SubsDelResp.UnPack(packedData)
359 if unpackerr != nil {
360 testError(t, "(%s) RIC_SUB_DEL_RESP unpack failed err: %s", xappConn.desc, unpackerr.Error())
362 geterr, resp := e2SubsDelResp.Get()
364 testError(t, "(%s) RIC_SUB_DEL_RESP get failed err: %s", xappConn.desc, geterr.Error())
366 xapp.Logger.Info("(%s) Recv Subs Del Resp rmr: xid=%s subid=%d, asn: seqnro=%d", xappConn.desc, msg.Xid, msg.SubId, resp.RequestId.Seq)
369 case <-time.After(15 * time.Second):
370 testError(t, "(%s) Not Received RIC_SUB_DEL_RESP within 15 secs", xappConn.desc)