Sync from Azure to LF
[ric-plt/resource-status-manager.git] / RSM / e2pdus / resource_status_request_test.go
diff --git a/RSM/e2pdus/resource_status_request_test.go b/RSM/e2pdus/resource_status_request_test.go
new file mode 100644 (file)
index 0000000..6aa4d45
--- /dev/null
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ *
+ *   Copyright (c) 2019 AT&T Intellectual Property.
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ *******************************************************************************/
+package e2pdus
+
+import (
+       "fmt"
+       "rsm/enums"
+       "strings"
+       "testing"
+)
+
+/*
+ * Create and pack an x2ap setup request.
+ * Verify the packed representation matches the want value.
+ */
+func TestBuildPackedResourceStatusRequest(t *testing.T) {
+       var testCases = []struct {
+               request   ResourceStatusRequestData
+               packedPdu string
+       }{
+               {
+                       request: ResourceStatusRequestData{
+                               CellID:                                           "0a0b0c:abcd8000",
+                               MeasurementID:                15,
+                               MeasurementID2:               0,
+                               PartialSuccessAllowed:        true,
+                               PrbPeriodic:                  true,
+                               TnlLoadIndPeriodic:           true,
+                               HwLoadIndPeriodic:            true,
+                               AbsStatusPeriodic:            true,
+                               RsrpMeasurementPeriodic:      true,
+                               CsiPeriodic:                  true,
+                               PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
+                               PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
+                               PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
+                       },
+                       packedPdu: "0009003c0000080027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd8000001e4001000040400100006d4001000091400100",
+               },
+               {
+                       request: ResourceStatusRequestData{
+                               CellID:                                           "0a0b0c:abcd8000",
+                               MeasurementID:                15,
+                               MeasurementID2:               0,
+                               PartialSuccessAllowed:        true,
+                               PrbPeriodic:                  true,
+                               TnlLoadIndPeriodic:           true,
+                               HwLoadIndPeriodic:            true,
+                               AbsStatusPeriodic:            true,
+                               RsrpMeasurementPeriodic:      true,
+                               CsiPeriodic:                  true,
+                               PeriodicityMS:                0,
+                               PeriodicityRsrpMeasurementMS: 0,
+                               PeriodicityCsiMS:             0,
+                       },
+                       packedPdu: "0009002d0000050027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd80000040400100",
+               },
+               {
+                       request: ResourceStatusRequestData{
+                               CellID:                                           "0a0b0c:abcd8000",
+                               MeasurementID:                15,
+                               MeasurementID2:               0,
+                               PartialSuccessAllowed:        true,
+                               PrbPeriodic:                  false,
+                               TnlLoadIndPeriodic:           false,
+                               HwLoadIndPeriodic:            false,
+                               AbsStatusPeriodic:            true,
+                               RsrpMeasurementPeriodic:      true,
+                               CsiPeriodic:                  true,
+                               PeriodicityMS:                0,
+                               PeriodicityRsrpMeasurementMS: 0,
+                               PeriodicityCsiMS:             0,
+                       },
+                       packedPdu: "0009002d0000050027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd80000040400100",
+               },
+               {
+                       request: ResourceStatusRequestData{
+                               CellID:                                           "0a0b0c:abcd8000",
+                               MeasurementID:                15,
+                               MeasurementID2:               0,
+                               PartialSuccessAllowed:        false,
+                               PrbPeriodic:                  false,
+                               TnlLoadIndPeriodic:           false,
+                               HwLoadIndPeriodic:            false,
+                               AbsStatusPeriodic:            true,
+                               RsrpMeasurementPeriodic:      true,
+                               CsiPeriodic:                  true,
+                               PeriodicityMS:                enums.ReportingPeriodicity_ten_thousand_ms,
+                               PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_six_hundred_40_ms,
+                               PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms80,
+                       },
+                       packedPdu: "000900370000070027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd8000001e400160006d4001600091400140",
+               },
+       }
+
+       for _, tc := range testCases {
+               t.Run(tc.packedPdu, func(t *testing.T) {
+
+                       payload, asString, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &tc.request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
+                       if err != nil {
+                               t.Errorf("want: success, got: pack failed. Error: %v\n", err)
+                       } else {
+                               t.Logf("packed resource status request (size=%d): %x\n\n%s", len(payload), payload,asString)
+                               tmp := fmt.Sprintf("%x", payload)
+                               if len(tmp) != len(tc.packedPdu) {
+                                       t.Errorf("want packed len:%d, got: %d\n", len(tc.packedPdu)/2, len(payload)/2)
+                               }
+
+                               if strings.Compare(tmp, tc.packedPdu) != 0 {
+                                       t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", tc.packedPdu, tmp)
+                               }
+                       }
+               })
+       }
+}
+
+/*Packing error*/
+
+func TestBuildPackedResourceStatusRequestError(t *testing.T) {
+       request := ResourceStatusRequestData{
+               CellID:                                           "0a0b0c:abcd8000",
+               MeasurementID:                15,
+               MeasurementID2:               0,
+               PrbPeriodic:                  true,
+               TnlLoadIndPeriodic:           true,
+               HwLoadIndPeriodic:            true,
+               AbsStatusPeriodic:            true,
+               RsrpMeasurementPeriodic:      true,
+               CsiPeriodic:                  true,
+               PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
+               PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
+               PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
+       }
+       expected:= "packing error: #src/asn1codec_utils.c.pack_pdu_aux - Encoded output of E2AP-PDU, is too big"
+       _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, 40 /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
+       if err != nil {
+               if !strings.Contains(err.Error(), expected) {
+                       t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
+               }
+       } else {
+               t.Errorf("want failure: ...%s..., got: success", expected)
+
+       }
+}
+
+func TestBuildPackedResourceStatusInvalidCellID(t *testing.T) {
+       request := ResourceStatusRequestData{
+               CellID:                                           "0a0b0cabcd8000",
+               MeasurementID:                15,
+               MeasurementID2:               0,
+               PrbPeriodic:                  true,
+               TnlLoadIndPeriodic:           true,
+               HwLoadIndPeriodic:            true,
+               AbsStatusPeriodic:            true,
+               RsrpMeasurementPeriodic:      true,
+               CsiPeriodic:                  true,
+               PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
+               PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
+               PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
+       }
+       expected:= "BuildPackedResourceStatusRequest() - unexpected CellID value [0a0b0cabcd8000] (want: \"<PLMNIdentifier>:<eUTRANCellIdentifier>\"), err: unexpected EOF"
+       _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
+       if err != nil {
+               if !strings.Contains(err.Error(), expected) {
+                       t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
+               }
+       } else {
+               t.Errorf("want failure: ...%s..., got: success", expected)
+
+       }
+}
+
+func TestBuildPackedResourceStatusInvalidPeriodicity(t *testing.T) {
+       request := ResourceStatusRequestData{
+               CellID:                                           "0a0b0c:abcd8000",
+               MeasurementID:                15,
+               MeasurementID2:               0,
+               PrbPeriodic:                  true,
+               TnlLoadIndPeriodic:           true,
+               HwLoadIndPeriodic:            true,
+               AbsStatusPeriodic:            true,
+               RsrpMeasurementPeriodic:      true,
+               CsiPeriodic:                  true,
+               PeriodicityMS:                22,
+               PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
+               PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
+       }
+       expected:= "BuildPackedResourceStatusRequest - packing error: #src/asn1codec_utils.c.pack_pdu_aux - Failed to encode E2AP-PDU, error = 9 Bad file descriptor"
+       _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
+       if err != nil {
+               if !strings.Contains(err.Error(), expected) {
+                       t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
+               }
+       } else {
+               t.Errorf("want failure: ...%s..., got: success", expected)
+
+       }
+}