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 func (xappConn *testingXappStub) handle_xapp_subs_req(t *testing.T, oldTrans *xappTransaction) *xappTransaction {
115 xapp.Logger.Info("(%s) handle_xapp_subs_req", xappConn.desc)
116 e2SubsReq := xapp_e2asnpacker.NewPackerSubscriptionRequest()
118 //---------------------------------
119 // xapp activity: Send Subs Req
120 //---------------------------------
121 xapp.Logger.Info("(%s) Send Subs Req", xappConn.desc)
123 req := &e2ap.E2APSubscriptionRequest{}
126 req.RequestId.Seq = 0
129 req.EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
130 req.EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.StringPut("310150")
131 req.EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 123
132 req.EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDHomeBits28
134 // gnb -> enb outgoing
135 // enb -> gnb incoming
137 req.EventTriggerDefinition.InterfaceDirection = e2ap.E2AP_InterfaceDirectionIncoming
138 req.EventTriggerDefinition.ProcedureCode = 5 //28 35
139 req.EventTriggerDefinition.TypeOfMessage = e2ap.E2AP_InitiatingMessage
141 req.ActionSetups = make([]e2ap.ActionToBeSetupItem, 1)
142 req.ActionSetups[0].ActionId = 0
143 req.ActionSetups[0].ActionType = e2ap.E2AP_ActionTypeReport
144 req.ActionSetups[0].ActionDefinition.Present = false
145 //req.ActionSetups[index].ActionDefinition.StyleId = 255
146 //req.ActionSetups[index].ActionDefinition.ParamId = 222
147 req.ActionSetups[0].SubsequentAction.Present = true
148 req.ActionSetups[0].SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeContinue
149 req.ActionSetups[0].SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitZero
152 xapp.Logger.Debug("%s", e2SubsReq.String())
153 err, packedMsg := e2SubsReq.Pack(nil)
155 testError(t, "(%s) pack NOK %s", xappConn.desc, err.Error())
159 var trans *xappTransaction = oldTrans
161 trans = xappConn.newXappTransaction(nil, "RAN_NAME_1")
164 params := &RMRParams{&xapp.RMRParams{}}
165 params.Mtype = xapp.RIC_SUB_REQ
167 params.Payload = packedMsg.Buf
168 params.Meid = trans.meid
169 params.Xid = trans.xid
172 snderr := xappConn.RmrSend(params)
174 testError(t, "(%s) RMR SEND FAILED: %s", xappConn.desc, snderr.Error())
180 //-----------------------------------------------------------------------------
182 //-----------------------------------------------------------------------------
183 func (xappConn *testingXappStub) handle_xapp_subs_resp(t *testing.T, trans *xappTransaction) int {
184 xapp.Logger.Info("(%s) handle_xapp_subs_resp", xappConn.desc)
185 e2SubsResp := xapp_e2asnpacker.NewPackerSubscriptionResponse()
188 //---------------------------------
189 // xapp activity: Recv Subs Resp
190 //---------------------------------
192 case msg := <-xappConn.rmrConChan:
194 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_RESP"] {
195 testError(t, "(%s) Received RIC_SUB_RESP wrong mtype expected %s got %s, error", xappConn.desc, "RIC_SUB_RESP", xapp.RicMessageTypeToName[msg.Mtype])
197 } else if msg.Xid != trans.xid {
198 testError(t, "(%s) Received RIC_SUB_RESP wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
201 packedData := &packer.PackedData{}
202 packedData.Buf = msg.Payload
204 unpackerr := e2SubsResp.UnPack(packedData)
206 if unpackerr != nil {
207 testError(t, "(%s) RIC_SUB_RESP unpack failed err: %s", xappConn.desc, unpackerr.Error())
209 geterr, resp := e2SubsResp.Get()
211 testError(t, "(%s) RIC_SUB_RESP get failed err: %s", xappConn.desc, geterr.Error())
214 xapp.Logger.Info("(%s) Recv Subs Resp rmr: xid=%s subid=%d, asn: seqnro=%d", xappConn.desc, msg.Xid, msg.SubId, resp.RequestId.Seq)
217 case <-time.After(15 * time.Second):
218 testError(t, "(%s) Not Received RIC_SUB_RESP within 15 secs", xappConn.desc)
224 //-----------------------------------------------------------------------------
226 //-----------------------------------------------------------------------------
227 func (xappConn *testingXappStub) handle_xapp_subs_fail(t *testing.T, trans *xappTransaction) int {
228 xapp.Logger.Info("(%s) handle_xapp_subs_fail", xappConn.desc)
229 e2SubsFail := xapp_e2asnpacker.NewPackerSubscriptionFailure()
232 //-------------------------------
233 // xapp activity: Recv Subs Fail
234 //-------------------------------
236 case msg := <-xappConn.rmrConChan:
238 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_FAILURE"] {
239 testError(t, "(%s) Received RIC_SUB_FAILURE wrong mtype expected %s got %s, error", xappConn.desc, "RIC_SUB_FAILURE", xapp.RicMessageTypeToName[msg.Mtype])
241 } else if msg.Xid != trans.xid {
242 testError(t, "(%s) Received RIC_SUB_FAILURE wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
245 packedData := &packer.PackedData{}
246 packedData.Buf = msg.Payload
248 unpackerr := e2SubsFail.UnPack(packedData)
250 if unpackerr != nil {
251 testError(t, "(%s) RIC_SUB_FAILURE unpack failed err: %s", xappConn.desc, unpackerr.Error())
253 geterr, resp := e2SubsFail.Get()
255 testError(t, "(%s) RIC_SUB_FAILURE get failed err: %s", xappConn.desc, geterr.Error())
258 xapp.Logger.Info("(%s) Recv Subs Fail rmr: xid=%s subid=%d, asn: seqnro=%d", xappConn.desc, msg.Xid, msg.SubId, resp.RequestId.Seq)
261 case <-time.After(15 * time.Second):
262 testError(t, "(%s) Not Received RIC_SUB_FAILURE within 15 secs", xappConn.desc)
268 //-----------------------------------------------------------------------------
270 //-----------------------------------------------------------------------------
271 func (xappConn *testingXappStub) handle_xapp_subs_del_req(t *testing.T, oldTrans *xappTransaction, e2SubsId int) *xappTransaction {
272 xapp.Logger.Info("(%s) handle_xapp_subs_del_req", xappConn.desc)
273 e2SubsDelReq := xapp_e2asnpacker.NewPackerSubscriptionDeleteRequest()
275 //---------------------------------
276 // xapp activity: Send Subs Del Req
277 //---------------------------------
278 xapp.Logger.Info("(%s) Send Subs Del Req", xappConn.desc)
280 req := &e2ap.E2APSubscriptionDeleteRequest{}
282 req.RequestId.Seq = uint32(e2SubsId)
285 e2SubsDelReq.Set(req)
286 xapp.Logger.Debug("%s", e2SubsDelReq.String())
287 err, packedMsg := e2SubsDelReq.Pack(nil)
289 testError(t, "(%s) pack NOK %s", xappConn.desc, err.Error())
293 var trans *xappTransaction = oldTrans
295 trans = xappConn.newXappTransaction(nil, "RAN_NAME_1")
298 params := &RMRParams{&xapp.RMRParams{}}
299 params.Mtype = xapp.RIC_SUB_DEL_REQ
300 params.SubId = e2SubsId
301 params.Payload = packedMsg.Buf
302 params.Meid = trans.meid
303 params.Xid = trans.xid
306 snderr := xappConn.RmrSend(params)
308 testError(t, "(%s) RMR SEND FAILED: %s", xappConn.desc, snderr.Error())
314 //-----------------------------------------------------------------------------
316 //-----------------------------------------------------------------------------
317 func (xappConn *testingXappStub) handle_xapp_subs_del_resp(t *testing.T, trans *xappTransaction) {
318 xapp.Logger.Info("(%s) handle_xapp_subs_del_resp", xappConn.desc)
319 e2SubsDelResp := xapp_e2asnpacker.NewPackerSubscriptionDeleteResponse()
321 //---------------------------------
322 // xapp activity: Recv Subs Del Resp
323 //---------------------------------
325 case msg := <-xappConn.rmrConChan:
327 if msg.Mtype != xapp.RICMessageTypes["RIC_SUB_DEL_RESP"] {
328 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])
330 } else if msg.Xid != trans.xid {
331 testError(t, "(%s) Received RIC_SUB_DEL_RESP wrong xid expected %s got %s, error", xappConn.desc, trans.xid, msg.Xid)
334 packedData := &packer.PackedData{}
335 packedData.Buf = msg.Payload
336 unpackerr := e2SubsDelResp.UnPack(packedData)
337 if unpackerr != nil {
338 testError(t, "(%s) RIC_SUB_DEL_RESP unpack failed err: %s", xappConn.desc, unpackerr.Error())
340 geterr, resp := e2SubsDelResp.Get()
342 testError(t, "(%s) RIC_SUB_DEL_RESP get failed err: %s", xappConn.desc, geterr.Error())
344 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)
347 case <-time.After(15 * time.Second):
348 testError(t, "(%s) Not Received RIC_SUB_DEL_RESP within 15 secs", xappConn.desc)