2 * Copyright (c) 2019 AT&T Intellectual Property.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 * platform project (RICP).
27 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
34 Test permutations of x2 setup response to protobuf enb
37 func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
38 logger, _ := logger.InitLogger(logger.InfoLevel)
40 var testCases = []struct {
46 response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:{procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING}}",
54 ProtocolIE_Container_elm
59 ProtocolIE_Container_elm
63 ProtocolIE_Container_elm
66 CriticalityDiagnostics
67 procedureCode_t = 0x21
68 triggeringMessage_t = 0x2
69 procedureCriticality_t = 0x2
70 iEsCriticalityDiagnostics_t:
71 CriticalityDiagnostics_IE_List_elm
76 packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
78 response: "CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:{procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING}}",
86 ProtocolIE_Container_elm
91 ProtocolIE_Container_elm
94 CriticalityDiagnostics
95 procedureCode_t = 0x21
96 triggeringMessage_t = 0x2
97 procedureCriticality_t = 0x2
98 iEsCriticalityDiagnostics_t:
99 CriticalityDiagnostics_IE_List_elm
104 packedPdu: "400600140000020005400120001140087821a00000008040"},
106 response: "CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:{triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING}}",
109 unsuccessfulOutcome_t
110 procedureCode_t = 0x6
114 ProtocolIE_Container_elm
119 ProtocolIE_Container_elm
122 CriticalityDiagnostics
123 triggeringMessage_t = 0x2
124 procedureCriticality_t = 0x2
125 iEsCriticalityDiagnostics_t:
126 CriticalityDiagnostics_IE_List_elm
131 packedPdu: "400600130000020005400144001140073a800000008040"},
134 response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:{procedure_criticality:NOTIFY information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING}}",
137 unsuccessfulOutcome_t
138 procedureCode_t = 0x6
142 ProtocolIE_Container_elm
147 ProtocolIE_Container_elm
150 CriticalityDiagnostics
151 procedureCriticality_t = 0x2
152 iEsCriticalityDiagnostics_t:
153 CriticalityDiagnostics_IE_List_elm
158 packedPdu: "400600120000020005400168001140061a0000008040"},
161 response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:{information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING} information_element_criticality_diagnostics:{ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD}}",
164 unsuccessfulOutcome_t
165 procedureCode_t = 0x6
169 ProtocolIE_Container_elm
174 ProtocolIE_Container_elm
177 CriticalityDiagnostics
178 iEsCriticalityDiagnostics_t:
179 CriticalityDiagnostics_IE_List_elm
183 CriticalityDiagnostics_IE_List_elm
184 iECriticality_t = 0x2
188 packedPdu: "4006001500000200054001680011400908010000804800ff00"},
192 response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:{procedure_code:33}",
195 unsuccessfulOutcome_t
196 procedureCode_t = 0x6
200 ProtocolIE_Container_elm
205 ProtocolIE_Container_elm
208 CriticalityDiagnostics
209 procedureCode_t = 0x21
211 packedPdu: "4006000e0000020005400168001140024021"},
214 response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED",
217 unsuccessfulOutcome_t
218 procedureCode_t = 0x6
222 ProtocolIE_Container_elm
228 packedPdu: "400600080000010005400168"},
230 response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:{procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:{ie_criticality:REJECT ie_id:128 type_of_error:MISSING}}",
233 unsuccessfulOutcome_t
234 procedureCode_t = 0x6
238 ProtocolIE_Container_elm
243 ProtocolIE_Container_elm
247 ProtocolIE_Container_elm
250 CriticalityDiagnostics
251 procedureCode_t = 0x21
252 triggeringMessage_t = 0x2
253 procedureCriticality_t = 0x2
254 iEsCriticalityDiagnostics_t:
255 CriticalityDiagnostics_IE_List_elm
260 packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040",
261 //failure: fmt.Errorf("getAtom for path [unsuccessfulOutcome_t X2SetupFailure protocolIEs_t ProtocolIE_Container_elm Cause radioNetwork_t] failed, rc = 2" /*NO_SPACE_LEFT*/),
265 converter := NewX2SetupFailureResponseConverter(logger)
267 for _, tc := range testCases {
268 t.Run(tc.packedPdu, func(t *testing.T) {
271 _, err := fmt.Sscanf(tc.packedPdu, "%x", &payload)
273 t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
276 response, err := converter.UnpackX2SetupFailureResponseAndExtract(payload)
279 if tc.failure == nil {
280 t.Errorf("want: success, got: error: %v\n", err)
282 if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
283 t.Errorf("want: %s, got: %s", tc.failure, err)
289 if tc.failure == nil {
290 t.Errorf("want: response=%s, got: empty response", tc.response)
293 nb := &entities.NodebInfo{}
294 nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
295 nb.SetupFailure = response
296 nb.FailureType = entities.Failure_X2_SETUP_FAILURE
297 respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
299 space := regexp.MustCompile(`\s+`)
300 s1 := space.ReplaceAllString(respStr, " ")
301 s2 := space.ReplaceAllString(tc.response," ")
303 if !strings.EqualFold(s1, s2) {
304 t.Errorf("want: [%s], got: [%s]", tc.response, respStr)