787dd197044c2d7f61fabbdec47e0ab8ba8de9dc
[ric-plt/e2mgr.git] / E2Manager / converters / x2setupFailureResponseToProtobuf_test.go
1 /*******************************************************************************
2  *
3  *   Copyright (c) 2019 AT&T Intellectual Property.
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  *
17  *******************************************************************************/
18 package converters
19
20 import (
21         "e2mgr/e2pdus"
22         "e2mgr/logger"
23         "fmt"
24         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
25         "strings"
26         "testing"
27 )
28
29 /*
30 Test permutations of x2 setup response to protobuf enb
31  */
32
33 func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
34         logger, _ := logger.InitLogger(logger.InfoLevel)
35
36         var testCases = []struct {
37                 response  string
38                 packedPdu string
39                 failure   error
40         }{
41                 {
42                         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 > > ",
43                         /*
44                         E2AP-PDU:
45                          unsuccessfulOutcome_t
46                           procedureCode_t = 0x6
47                           criticality_t = 0
48                           X2SetupFailure
49                            protocolIEs_t:
50                             ProtocolIE_Container_elm
51                              id_t = 0x5
52                              criticality_t = 0x1
53                              Cause:
54                               radioNetwork_t = 0
55                             ProtocolIE_Container_elm
56                              id_t = 0x16
57                              criticality_t = 0x1
58                              TimeToWait = 0
59                             ProtocolIE_Container_elm
60                              id_t = 0x11
61                              criticality_t = 0x1
62                              CriticalityDiagnostics
63                               procedureCode_t = 0x21
64                               triggeringMessage_t = 0x2
65                               procedureCriticality_t = 0x2
66                               iEsCriticalityDiagnostics_t:
67                                CriticalityDiagnostics_IE_List_elm
68                                 iECriticality_t = 0
69                                 iE_ID_t = 0x80
70                                 typeOfError_t = 0x1
71                         */
72                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
73                 {
74                         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 > > ",
75                         /*
76                         E2AP-PDU:
77                          unsuccessfulOutcome_t
78                           procedureCode_t = 0x6
79                           criticality_t = 0
80                           X2SetupFailure
81                            protocolIEs_t:
82                             ProtocolIE_Container_elm
83                              id_t = 0x5
84                              criticality_t = 0x1
85                              Cause:
86                               transport_t = 0
87                             ProtocolIE_Container_elm
88                              id_t = 0x11
89                              criticality_t = 0x1
90                              CriticalityDiagnostics
91                               procedureCode_t = 0x21
92                               triggeringMessage_t = 0x2
93                               procedureCriticality_t = 0x2
94                               iEsCriticalityDiagnostics_t:
95                                CriticalityDiagnostics_IE_List_elm
96                                 iECriticality_t = 0
97                                 iE_ID_t = 0x80
98                                 typeOfError_t = 0x1
99                         */
100                         packedPdu: "400600140000020005400120001140087821a00000008040"},
101                 {
102                         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 > > ",
103                         /*
104                         E2AP-PDU:
105                          unsuccessfulOutcome_t
106                           procedureCode_t = 0x6
107                           criticality_t = 0
108                           X2SetupFailure
109                            protocolIEs_t:
110                             ProtocolIE_Container_elm
111                              id_t = 0x5
112                              criticality_t = 0x1
113                              Cause:
114                               protocol_t = 0x2
115                             ProtocolIE_Container_elm
116                              id_t = 0x11
117                              criticality_t = 0x1
118                              CriticalityDiagnostics
119                               triggeringMessage_t = 0x2
120                               procedureCriticality_t = 0x2
121                               iEsCriticalityDiagnostics_t:
122                                CriticalityDiagnostics_IE_List_elm
123                                 iECriticality_t = 0
124                                 iE_ID_t = 0x80
125                                 typeOfError_t = 0x1
126                         */
127                         packedPdu: "400600130000020005400144001140073a800000008040"},
128
129                 {
130                         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 > > ",
131                         /*
132                         E2AP-PDU:
133                          unsuccessfulOutcome_t
134                           procedureCode_t = 0x6
135                           criticality_t = 0
136                           X2SetupFailure
137                            protocolIEs_t:
138                             ProtocolIE_Container_elm
139                              id_t = 0x5
140                              criticality_t = 0x1
141                              Cause:
142                               misc_t = 0x4
143                             ProtocolIE_Container_elm
144                              id_t = 0x11
145                              criticality_t = 0x1
146                              CriticalityDiagnostics
147                               procedureCriticality_t = 0x2
148                               iEsCriticalityDiagnostics_t:
149                                CriticalityDiagnostics_IE_List_elm
150                                 iECriticality_t = 0
151                                 iE_ID_t = 0x80
152                                 typeOfError_t = 0x1
153                         */
154                         packedPdu: "400600120000020005400168001140061a0000008040"},
155
156                 {
157                         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 > > ",
158                         /*
159                         E2AP-PDU:
160                          unsuccessfulOutcome_t
161                           procedureCode_t = 0x6
162                           criticality_t = 0
163                           X2SetupFailure
164                            protocolIEs_t:
165                             ProtocolIE_Container_elm
166                              id_t = 0x5
167                              criticality_t = 0x1
168                              Cause:
169                               misc_t = 0x4
170                             ProtocolIE_Container_elm
171                              id_t = 0x11
172                              criticality_t = 0x1
173                              CriticalityDiagnostics
174                               iEsCriticalityDiagnostics_t:
175                                CriticalityDiagnostics_IE_List_elm
176                                 iECriticality_t = 0
177                                 iE_ID_t = 0x80
178                                 typeOfError_t = 0x1
179                                CriticalityDiagnostics_IE_List_elm
180                                 iECriticality_t = 0x2
181                                 iE_ID_t = 0xff
182                                 typeOfError_t = 0
183                         */
184                         packedPdu: "4006001500000200054001680011400908010000804800ff00"},
185
186
187                 {
188                         response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
189                         /*
190                         E2AP-PDU:
191                          unsuccessfulOutcome_t
192                           procedureCode_t = 0x6
193                           criticality_t = 0
194                           X2SetupFailure
195                            protocolIEs_t:
196                             ProtocolIE_Container_elm
197                              id_t = 0x5
198                              criticality_t = 0x1
199                              Cause:
200                               misc_t = 0x4
201                             ProtocolIE_Container_elm
202                              id_t = 0x11
203                              criticality_t = 0x1
204                              CriticalityDiagnostics
205                               procedureCode_t = 0x21
206                         */
207                         packedPdu: "4006000e0000020005400168001140024021"},
208
209                 {
210                         response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
211                         /*
212                         E2AP-PDU:
213                          unsuccessfulOutcome_t
214                           procedureCode_t = 0x6
215                           criticality_t = 0
216                           X2SetupFailure
217                            protocolIEs_t:
218                             ProtocolIE_Container_elm
219                              id_t = 0x5
220                              criticality_t = 0x1
221                              Cause:
222                               misc_t = 0x4
223                         */
224                         packedPdu: "400600080000010005400168"},
225                 {
226                         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 > > ",
227                         /*
228                                 E2AP-PDU:
229                                  unsuccessfulOutcome_t
230                                   procedureCode_t = 0x6
231                                   criticality_t = 0
232                                   X2SetupFailure
233                                    protocolIEs_t:
234                                     ProtocolIE_Container_elm
235                                      id_t = 0x5
236                                      criticality_t = 0x1
237                                      Cause:
238                                       radioNetwork_t = 0
239                                     ProtocolIE_Container_elm
240                                      id_t = 0x16
241                                      criticality_t = 0x1
242                                      TimeToWait = 0
243                                     ProtocolIE_Container_elm
244                                      id_t = 0x11
245                                      criticality_t = 0x1
246                                      CriticalityDiagnostics
247                                       procedureCode_t = 0x21
248                                       triggeringMessage_t = 0x2
249                                       procedureCriticality_t = 0x2
250                                       iEsCriticalityDiagnostics_t:
251                                        CriticalityDiagnostics_IE_List_elm
252                                         iECriticality_t = 0
253                                         iE_ID_t = 0x80
254                                         typeOfError_t = 0x1
255                         */
256                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040",
257                         //failure: fmt.Errorf("getAtom for path [unsuccessfulOutcome_t X2SetupFailure protocolIEs_t ProtocolIE_Container_elm Cause radioNetwork_t] failed, rc = 2" /*NO_SPACE_LEFT*/),
258                 },
259         }
260
261         for _, tc := range testCases {
262                 t.Run(tc.packedPdu, func(t *testing.T) {
263
264                         var payload []byte
265                         _, err := fmt.Sscanf(tc.packedPdu, "%x", &payload)
266                         if err != nil {
267                                 t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
268                         }
269
270                         response, err := UnpackX2SetupFailureResponseAndExtract(logger, e2pdus.MaxAsn1CodecAllocationBufferSize /*allocation buffer*/, len(payload), payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
271
272                         if err != nil {
273                                 if tc.failure == nil {
274                                         t.Errorf("want: success, got: error: %v\n", err)
275                                 } else {
276                                         if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
277                                                 t.Errorf("want: %s, got: %s", tc.failure, err)
278                                         }
279                                 }
280                         }
281
282                         if response == nil {
283                                 if tc.failure == nil {
284                                         t.Errorf("want: response=%s, got: empty response", tc.response)
285                                 }
286                         } else {
287                                 nb := &entities.NodebInfo{}
288                                 nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
289                                 nb.SetupFailure = response
290                                 nb.FailureType = entities.Failure_X2_SETUP_FAILURE
291                                 respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
292                                 if !strings.EqualFold(respStr, tc.response) {
293                                         t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
294                                 }
295
296                         }
297                 })
298         }
299 }