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"
27 //-----------------------------------------------------------------------------
29 //-----------------------------------------------------------------------------
31 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionRequestWithData(t *testing.T, areqenc *e2ap.E2APSubscriptionRequest) {
33 e2SubsReq := testCtxt.packerif.NewPackerSubscriptionRequest()
35 testCtxt.testPrint("########## ##########")
36 testCtxt.testPrint("init")
37 testCtxt.testPrint("pack")
39 err, packedMsg := e2SubsReq.Pack(areqenc)
41 testCtxt.testError(t, "Pack failed: %s", err.Error())
44 testCtxt.testPrint("print:\n%s", e2SubsReq.String())
45 testCtxt.testPrint("unpack")
47 err, areqdec := e2SubsReq.UnPack(packedMsg)
49 testCtxt.testError(t, "UnPack failed: %s", err.Error())
52 testCtxt.testPrint("print:\n%s", e2SubsReq.String())
53 testCtxt.testValueEquality(t, "msg", areqenc, areqdec)
54 testCtxt.testValueEquality(t, "EventTriggerDefinition", &areqenc.EventTriggerDefinition, &areqdec.EventTriggerDefinition)
56 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionRequest(t *testing.T, msgContent *SubscriptionTestMsgContent) {
58 areqenc := e2ap.E2APSubscriptionRequest{}
59 areqenc.RequestId.Id = 1
60 areqenc.RequestId.InstanceId = 22
61 areqenc.FunctionId = 33
63 areqenc.EventTriggerDefinition.NBX2EventTriggerDefinitionPresent = msgContent.NBX2EventTriggerDefinitionPresent
64 areqenc.EventTriggerDefinition.NBNRTEventTriggerDefinitionPresent = msgContent.NBNRTEventTriggerDefinitionPresent
66 if areqenc.EventTriggerDefinition.NBX2EventTriggerDefinitionPresent {
67 //Bits 20, 28(works), 18, 21 (asn1 problems)
69 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
70 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.Set("310150")
71 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDHomeBits28
72 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 202251
73 testCtxt.SetDesc("SubsReq-28bit")
75 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
76 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.Set("310150")
77 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDShortMacroits18
78 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 55
79 //testCtxt.SetDesc("SubsReq-18bit")
81 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
82 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.Set("310150")
83 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDMacroPBits20
84 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 55
85 //testCtxt.SetDesc("SubsReq-20bit")
87 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.Present = true
88 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.PlmnIdentity.Set("310150")
89 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Bits = e2ap.E2AP_ENBIDlongMacroBits21
90 //areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceId.GlobalEnbId.NodeId.Id = 55
91 //testCtxt.SetDesc("SubsReq-21bit")
93 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.InterfaceDirection = e2ap.E2AP_InterfaceDirectionIncoming
94 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.ProcedureCode = 35
95 areqenc.EventTriggerDefinition.X2EventTriggerDefinition.TypeOfMessage = e2ap.E2AP_InitiatingMessage
96 } else if areqenc.EventTriggerDefinition.NBNRTEventTriggerDefinitionPresent == true {
97 areqenc.EventTriggerDefinition.NBNRTEventTriggerDefinition.TriggerNature = e2ap.NRTTriggerNature_now
100 for index := 0; index < 1; /*16*/ index++ {
101 item := e2ap.ActionToBeSetupItem{}
102 item.ActionId = uint64(index)
103 item.ActionType = e2ap.E2AP_ActionTypeInsert
105 item.RicActionDefinitionPresent = true
106 item.ActionDefinitionChoice.ActionDefinitionX2Format1Present = msgContent.ActionDefinitionX2Format1Present
107 item.ActionDefinitionChoice.ActionDefinitionX2Format2Present = msgContent.ActionDefinitionX2Format2Present
108 item.ActionDefinitionChoice.ActionDefinitionNRTFormat1Present = msgContent.ActionDefinitionNRTFormat1Present
110 if item.RicActionDefinitionPresent {
111 if item.ActionDefinitionChoice.ActionDefinitionX2Format1Present {
112 item.ActionDefinitionChoice.ActionDefinitionX2Format1.StyleID = 99
114 for index2 := 0; index2 < 1; index2++ {
115 actionParameterItem := e2ap.ActionParameterItem{}
116 actionParameterItem.ParameterID = 11
117 if msgContent.ActionParameterValueIntPresent {
118 actionParameterItem.ActionParameterValue.ValueIntPresent = true
119 actionParameterItem.ActionParameterValue.ValueInt = 100
120 } else if msgContent.ActionParameterValueEnumPresent {
121 actionParameterItem.ActionParameterValue.ValueEnumPresent = true
122 actionParameterItem.ActionParameterValue.ValueEnum = 100
123 } else if msgContent.ActionParameterValueBoolPresent {
124 actionParameterItem.ActionParameterValue.ValueBoolPresent = true
125 actionParameterItem.ActionParameterValue.ValueBool = true
126 } else if msgContent.ActionParameterValueBitSPresent {
127 actionParameterItem.ActionParameterValue.ValueBitSPresent = true
128 actionParameterItem.ActionParameterValue.ValueBitS.UnusedBits = 0
129 actionParameterItem.ActionParameterValue.ValueBitS.Length = 3
130 actionParameterItem.ActionParameterValue.ValueBitS.Data =
131 append(actionParameterItem.ActionParameterValue.ValueBitS.Data, 1, 2, 3)
132 } else if msgContent.ActionParameterValueOctSPresent {
133 actionParameterItem.ActionParameterValue.ValueOctSPresent = true
134 actionParameterItem.ActionParameterValue.ValueOctS.Length = 3
135 actionParameterItem.ActionParameterValue.ValueOctS.Data =
136 append(actionParameterItem.ActionParameterValue.ValueOctS.Data, 1, 2, 3)
137 } else if msgContent.ActionParameterValuePrtSPresent {
138 actionParameterItem.ActionParameterValue.ValuePrtSPresent = true
139 actionParameterItem.ActionParameterValue.ValuePrtS.Length = 3
140 actionParameterItem.ActionParameterValue.ValuePrtS.Data =
141 append(actionParameterItem.ActionParameterValue.ValuePrtS.Data, 1, 2, 3)
143 item.ActionDefinitionChoice.ActionDefinitionX2Format1.ActionParameterItems =
144 append(item.ActionDefinitionChoice.ActionDefinitionX2Format1.ActionParameterItems, actionParameterItem)
146 } else if item.ActionDefinitionChoice.ActionDefinitionX2Format2Present {
148 for index2 := 0; index2 < 1; index2++ {
149 ranUEgroupItem := e2ap.RANueGroupItem{}
151 for index3 := 0; index3 < 1; index3++ {
152 ranUEGroupDefItem := e2ap.RANueGroupDefItem{}
153 ranUEGroupDefItem.RanParameterID = 22
154 ranUEGroupDefItem.RanParameterTest = e2ap.RANParameterTest_equal
155 if msgContent.RANParameterValueIntPresent {
156 ranUEGroupDefItem.RanParameterValue.ValueIntPresent = true
157 ranUEGroupDefItem.RanParameterValue.ValueInt = 100
158 } else if msgContent.RANParameterValueEnumPresent {
159 ranUEGroupDefItem.RanParameterValue.ValueEnumPresent = true
160 ranUEGroupDefItem.RanParameterValue.ValueEnum = 100
161 } else if msgContent.RANParameterValueBoolPresent {
162 ranUEGroupDefItem.RanParameterValue.ValueBoolPresent = true
163 ranUEGroupDefItem.RanParameterValue.ValueBool = true
164 } else if msgContent.RANParameterValueBitSPresent {
165 ranUEGroupDefItem.RanParameterValue.ValueBitSPresent = true
166 ranUEGroupDefItem.RanParameterValue.ValueBitS.UnusedBits = 0
167 ranUEGroupDefItem.RanParameterValue.ValueBitS.Length = 3
168 ranUEGroupDefItem.RanParameterValue.ValueBitS.Data =
169 append(ranUEGroupDefItem.RanParameterValue.ValueBitS.Data, 1, 2, 3)
170 } else if msgContent.RANParameterValueOctSPresent {
171 ranUEGroupDefItem.RanParameterValue.ValueOctSPresent = true
172 ranUEGroupDefItem.RanParameterValue.ValueOctS.Length = 3
173 ranUEGroupDefItem.RanParameterValue.ValueOctS.Data =
174 append(ranUEGroupDefItem.RanParameterValue.ValueOctS.Data, 1, 2, 3)
175 } else if msgContent.RANParameterValuePrtSPresent {
176 ranUEGroupDefItem.RanParameterValue.ValuePrtSPresent = true
177 ranUEGroupDefItem.RanParameterValue.ValuePrtS.Length = 3
178 ranUEGroupDefItem.RanParameterValue.ValuePrtS.Data =
179 append(ranUEGroupDefItem.RanParameterValue.ValuePrtS.Data, 1, 2, 3)
181 ranUEgroupItem.RanUEgroupDefinition.RanUEGroupDefItems =
182 append(ranUEgroupItem.RanUEgroupDefinition.RanUEGroupDefItems, ranUEGroupDefItem)
185 for index4 := 0; index4 < 1; index4++ {
186 ranParameterItem := e2ap.RANParameterItem{}
187 ranParameterItem.RanParameterID = 33
188 if msgContent.RANParameterValueIntPresent {
189 ranParameterItem.RanParameterValue.ValueIntPresent = true
190 ranParameterItem.RanParameterValue.ValueInt = 100
191 } else if msgContent.RANParameterValueEnumPresent {
192 ranParameterItem.RanParameterValue.ValueEnumPresent = true
193 ranParameterItem.RanParameterValue.ValueEnum = 100
194 } else if msgContent.RANParameterValueBoolPresent {
195 ranParameterItem.RanParameterValue.ValueBoolPresent = true
196 ranParameterItem.RanParameterValue.ValueBool = true
197 } else if msgContent.RANParameterValueBitSPresent {
198 ranParameterItem.RanParameterValue.ValueBitSPresent = true
199 ranParameterItem.RanParameterValue.ValueBitS.UnusedBits = 0
200 ranParameterItem.RanParameterValue.ValueBitS.Length = 3
201 ranParameterItem.RanParameterValue.ValueBitS.Data =
202 append(ranParameterItem.RanParameterValue.ValueBitS.Data, 1, 2, 3)
203 } else if msgContent.RANParameterValueOctSPresent {
204 ranParameterItem.RanParameterValue.ValueOctSPresent = true
205 ranParameterItem.RanParameterValue.ValueOctS.Length = 3
206 ranParameterItem.RanParameterValue.ValueOctS.Data =
207 append(ranParameterItem.RanParameterValue.ValueOctS.Data, 1, 2, 3)
208 } else if msgContent.RANParameterValuePrtSPresent {
209 ranParameterItem.RanParameterValue.ValuePrtSPresent = true
210 ranParameterItem.RanParameterValue.ValuePrtS.Length = 3
211 ranParameterItem.RanParameterValue.ValuePrtS.Data =
212 append(ranParameterItem.RanParameterValue.ValuePrtS.Data, 1, 2, 3)
214 ranUEgroupItem.RanPolicy.RanParameterItems =
215 append(ranUEgroupItem.RanPolicy.RanParameterItems, ranParameterItem)
217 ranUEgroupItem.RanUEgroupID = 2
218 item.ActionDefinitionChoice.ActionDefinitionX2Format2.RanUEgroupItems =
219 append(item.ActionDefinitionChoice.ActionDefinitionX2Format2.RanUEgroupItems, ranUEgroupItem)
221 } else if item.ActionDefinitionChoice.ActionDefinitionNRTFormat1Present {
223 for index2 := 0; index2 < 1; index2++ {
224 ranParameterItem := e2ap.RANParameterItem{}
225 ranParameterItem.RanParameterID = 33
226 if msgContent.RANParameterValueIntPresent {
227 ranParameterItem.RanParameterValue.ValueIntPresent = true
228 ranParameterItem.RanParameterValue.ValueInt = 100
229 } else if msgContent.RANParameterValueEnumPresent {
230 ranParameterItem.RanParameterValue.ValueEnumPresent = true
231 ranParameterItem.RanParameterValue.ValueEnum = 100
232 } else if msgContent.RANParameterValueBoolPresent {
233 ranParameterItem.RanParameterValue.ValueBoolPresent = true
234 ranParameterItem.RanParameterValue.ValueBool = true
235 } else if msgContent.RANParameterValueBitSPresent {
236 ranParameterItem.RanParameterValue.ValueBitSPresent = true
237 ranParameterItem.RanParameterValue.ValueBitS.UnusedBits = 0
238 ranParameterItem.RanParameterValue.ValueBitS.Length = 3
239 ranParameterItem.RanParameterValue.ValueBitS.Data =
240 append(ranParameterItem.RanParameterValue.ValueBitS.Data, 1, 2, 3)
241 } else if msgContent.RANParameterValueOctSPresent {
242 ranParameterItem.RanParameterValue.ValueOctSPresent = true
243 ranParameterItem.RanParameterValue.ValueOctS.Length = 3
244 ranParameterItem.RanParameterValue.ValueOctS.Data =
245 append(ranParameterItem.RanParameterValue.ValueOctS.Data, 1, 2, 3)
246 } else if msgContent.RANParameterValuePrtSPresent {
247 ranParameterItem.RanParameterValue.ValuePrtSPresent = true
248 ranParameterItem.RanParameterValue.ValuePrtS.Length = 3
249 ranParameterItem.RanParameterValue.ValuePrtS.Data =
250 append(ranParameterItem.RanParameterValue.ValuePrtS.Data, 1, 2, 3)
252 item.ActionDefinitionChoice.ActionDefinitionNRTFormat1.RanParameterList =
253 append(item.ActionDefinitionChoice.ActionDefinitionNRTFormat1.RanParameterList, ranParameterItem)
257 item.SubsequentAction.Present = true
258 item.SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeContinue
259 item.SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitW100ms
260 areqenc.ActionSetups = append(areqenc.ActionSetups, item)
262 testCtxt.E2ApTestMsgSubscriptionRequestWithData(t, &areqenc)
265 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionResponse(t *testing.T) {
267 testCtxt.SetDesc("SubsResp")
269 e2SubsResp := testCtxt.packerif.NewPackerSubscriptionResponse()
271 testCtxt.testPrint("########## ##########")
272 testCtxt.testPrint("init")
274 arespenc := e2ap.E2APSubscriptionResponse{}
275 arespenc.RequestId.Id = 1
276 arespenc.RequestId.InstanceId = 22
277 arespenc.FunctionId = 33
278 for index := uint64(0); index < 16; index++ {
279 item := e2ap.ActionAdmittedItem{}
280 item.ActionId = index
281 arespenc.ActionAdmittedList.Items = append(arespenc.ActionAdmittedList.Items, item)
283 for index := uint64(0); index < 16; index++ {
284 item := e2ap.ActionNotAdmittedItem{}
285 item.ActionId = index
286 item.Cause.Content = 1
288 arespenc.ActionNotAdmittedList.Items = append(arespenc.ActionNotAdmittedList.Items, item)
291 testCtxt.testPrint("pack")
292 err, packedMsg := e2SubsResp.Pack(&arespenc)
294 testCtxt.testError(t, "Pack failed: %s", err.Error())
297 testCtxt.testPrint("print:\n%s", e2SubsResp.String())
298 testCtxt.testPrint("unpack")
299 err, arespdec := e2SubsResp.UnPack(packedMsg)
301 testCtxt.testError(t, "UnPack failed: %s", err.Error())
304 testCtxt.testPrint("print:\n%s", e2SubsResp.String())
305 testCtxt.testValueEquality(t, "msg", &arespenc, arespdec)
308 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionFailure(t *testing.T) {
310 testCtxt.SetDesc("SubsFail")
312 e2SubsFail := testCtxt.packerif.NewPackerSubscriptionFailure()
314 testCtxt.testPrint("########## ##########")
315 testCtxt.testPrint("init")
317 afailenc := e2ap.E2APSubscriptionFailure{}
318 afailenc.RequestId.Id = 1
319 afailenc.RequestId.InstanceId = 22
320 afailenc.FunctionId = 33
321 for index := uint64(0); index < 16; index++ {
322 item := e2ap.ActionNotAdmittedItem{}
323 item.ActionId = index
324 item.Cause.Content = 1
326 afailenc.ActionNotAdmittedList.Items = append(afailenc.ActionNotAdmittedList.Items, item)
328 // NOT SUPPORTED CURRENTLY
329 afailenc.CriticalityDiagnostics.Present = false
330 // afailenc.CriticalityDiagnostics.ProcCodePresent = true
331 // afailenc.CriticalityDiagnostics.ProcCode = 1
332 // afailenc.CriticalityDiagnostics.TrigMsgPresent = true
333 // afailenc.CriticalityDiagnostics.TrigMsg = 2
334 // afailenc.CriticalityDiagnostics.ProcCritPresent = true
335 // afailenc.CriticalityDiagnostics.ProcCrit = e2ap.E2AP_CriticalityReject
336 // for index := uint32(0); index < 256; index++ {
337 // ieitem := e2ap.CriticalityDiagnosticsIEListItem{}
338 // ieitem.IeCriticality = e2ap.E2AP_CriticalityReject
339 // ieitem.IeID = index
340 // ieitem.TypeOfError = 1
341 // afailenc.CriticalityDiagnostics.CriticalityDiagnosticsIEList.Items = append(afailenc.CriticalityDiagnostics.CriticalityDiagnosticsIEList.Items, ieitem)
344 testCtxt.testPrint("pack")
345 err, packedMsg := e2SubsFail.Pack(&afailenc)
347 testCtxt.testError(t, "Pack failed: %s", err.Error())
350 testCtxt.testPrint("print:\n%s", e2SubsFail.String())
351 testCtxt.testPrint("unpack")
352 err, afaildec := e2SubsFail.UnPack(packedMsg)
354 testCtxt.testError(t, "UnPack failed: %s", err.Error())
357 testCtxt.testPrint("print:\n%s", e2SubsFail.String())
358 testCtxt.testValueEquality(t, "msg", &afailenc, afaildec)
361 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionRequestBuffers(t *testing.T) {
363 testfunc := func(buffer string) {
364 packedData := testCtxt.toPackedData(t, buffer)
365 if packedData == nil {
368 e2SubResp := testCtxt.packerif.NewPackerSubscriptionRequest()
369 err, _ := e2SubResp.UnPack(packedData)
371 testCtxt.testError(t, "UnPack() Failed: %s [%s]", err.Error(), buffer)
374 testCtxt.testPrint("OK [%s]", buffer)
377 testCtxt.SetDesc("SubReqBuffer")
378 testfunc("00c9402c000003ea7e00050000010000ea6300020001ea810016000b00130051407b000000054000ea6b000420000000")
381 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionResponseBuffers(t *testing.T) {
383 testfunc := func(buffer string) {
384 packedData := testCtxt.toPackedData(t, buffer)
385 if packedData == nil {
388 e2SubResp := testCtxt.packerif.NewPackerSubscriptionResponse()
389 err, _ := e2SubResp.UnPack(packedData)
391 testCtxt.testError(t, "UnPack() Failed: %s [%s]", err.Error(), buffer)
394 testCtxt.testPrint("OK [%s]", buffer)
397 testCtxt.SetDesc("SubRespBuffer")
398 testfunc("20c9402a000004ea7e00050000018009ea6300020001ea6c000700ea6d00020000ea6e000908ea6f000400000040")
399 testfunc("20c9401d000003ea7e0005004eec0004ea6300020001ea6c000700ea6d40020000")
403 func (testCtxt *E2ApTests) E2ApTestMsgSubscriptionFailureBuffers(t *testing.T) {
405 testfunc := func(buffer string) {
406 packedData := testCtxt.toPackedData(t, buffer)
407 if packedData == nil {
410 e2SubResp := testCtxt.packerif.NewPackerSubscriptionFailure()
411 err, _ := e2SubResp.UnPack(packedData)
413 testCtxt.testError(t, "UnPack() Failed: %s [%s]", err.Error(), buffer)
416 testCtxt.testPrint("OK [%s]", buffer)
419 testCtxt.SetDesc("SubFailBuffer")
420 testfunc("40c94017000003ea7e000500000106f3ea6300020001ea6e000100")