Added duplicate detection changes
[ric-plt/submgr.git] / pkg / teststube2ap / stubE2.go
index 5604393..f20afed 100644 (file)
@@ -48,6 +48,7 @@ type RmrTransactionId struct {
 type E2RestIds struct {
        RestSubsId string
        E2SubsId   uint32
+       ErrorCause string
 }
 
 func (trans *RmrTransactionId) String() string {
@@ -324,6 +325,38 @@ func (tc *E2Stub) SendSubsResp(t *testing.T, req *e2ap.E2APSubscriptionRequest,
        }
 }
 
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+func (tc *E2Stub) SendInvalidE2Asn1Resp(t *testing.T, msg *xapp.RMRParams, msgType int) {
+
+       params := &xapp.RMRParams{}
+       params.Mtype = msgType
+       params.SubId = -1
+       params.Payload = []byte{1, 2, 3, 4, 5}
+       params.PayloadLen = 5
+       params.Meid = msg.Meid
+       params.Xid = ""
+       params.Mbuf = nil
+
+       if params.Mtype == xapp.RIC_SUB_RESP {
+               tc.Info("SEND INVALID ASN.1 SUB RESP")
+
+       } else if params.Mtype == xapp.RIC_SUB_FAILURE {
+               tc.Info("SEND INVALID ASN.1 SUB FAILURE")
+
+       } else if params.Mtype == xapp.RIC_SUB_DEL_RESP {
+               tc.Info("SEND INVALID ASN.1 SUB DEL RESP")
+
+       } else if params.Mtype == xapp.RIC_SUB_DEL_FAILURE {
+               tc.Info("SEND INVALID ASN.1 SUB DEL FAILURE")
+       }
+       snderr := tc.SendWithRetry(params, false, 5)
+       if snderr != nil {
+               tc.TestError(t, "RMR SEND FAILED: %s", snderr.Error())
+       }
+}
+
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
@@ -597,7 +630,7 @@ func (tc *E2Stub) SendSubsDelFail(t *testing.T, req *e2ap.E2APSubscriptionDelete
        resp.RequestId.Id = req.RequestId.Id
        resp.RequestId.InstanceId = req.RequestId.InstanceId
        resp.FunctionId = req.FunctionId
-       resp.Cause.Content = 4 // CauseMisc
+       resp.Cause.Content = 5 // CauseMisc
        resp.Cause.Value = 3   // unspecified
 
        packerr, packedMsg := e2SubsDelFail.Pack(resp)
@@ -631,20 +664,38 @@ func (tc *E2Stub) SendSubsDelFail(t *testing.T, req *e2ap.E2APSubscriptionDelete
 // Callback handler for subscription response notifications
 //-----------------------------------------------------------------------------
 func (tc *E2Stub) SubscriptionRespHandler(resp *clientmodel.SubscriptionResponse) {
-       if tc.subscriptionId == *resp.SubscriptionID {
-               tc.Info("REST notification received SubscriptionID=%s, InstanceID=%v, RequestorID=%v (%v)",
-                       *resp.SubscriptionID, *resp.SubscriptionInstances[0].InstanceID, *resp.SubscriptionInstances[0].RequestorID, tc)
-               tc.CallBackNotification <- *resp.SubscriptionInstances[0].InstanceID
+
+       if tc.subscriptionId == "SUBSCRIPTIONID NOT SET" {
+               tc.Info("REST notification received for %v while no SubscriptionID was not set for E2EventInstanceID=%v, XappEventInstanceID=%v (%v)",
+                       *resp.SubscriptionID, *resp.SubscriptionInstances[0].E2EventInstanceID, *resp.SubscriptionInstances[0].XappEventInstanceID, tc)
+               tc.CallBackNotification <- *resp.SubscriptionInstances[0].E2EventInstanceID
+       } else if tc.subscriptionId == *resp.SubscriptionID {
+               tc.Info("REST notification received SubscriptionID=%s, E2EventInstanceID=%v, RequestorID=%v (%v)",
+                       *resp.SubscriptionID, *resp.SubscriptionInstances[0].E2EventInstanceID, *resp.SubscriptionInstances[0].XappEventInstanceID, tc)
+               tc.CallBackNotification <- *resp.SubscriptionInstances[0].E2EventInstanceID
        } else {
-               tc.Info("MISMATCHING REST notification received SubscriptionID=%s<>%s, InstanceID=%v, RequestorID=%v (%v)",
-                       tc.subscriptionId, *resp.SubscriptionID, *resp.SubscriptionInstances[0].InstanceID, *resp.SubscriptionInstances[0].RequestorID, tc)
+               tc.Info("MISMATCHING REST notification received SubscriptionID=%s<>%s, E2EventInstanceID=%v, XappEventInstanceID=%v (%v)",
+                       tc.subscriptionId, *resp.SubscriptionID, *resp.SubscriptionInstances[0].E2EventInstanceID, *resp.SubscriptionInstances[0].XappEventInstanceID, tc)
        }
 }
 
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
+
 func (tc *E2Stub) ExpectRESTNotification(t *testing.T, restSubsId string) {
+       tc.expectNotification(t, restSubsId, "")
+}
+
+func (tc *E2Stub) ExpectRESTNotificationOk(t *testing.T, restSubsId string) {
+       tc.expectNotification(t, restSubsId, "allOk")
+}
+
+func (tc *E2Stub) ExpectRESTNotificationNok(t *testing.T, restSubsId string, expectError string) {
+       tc.expectNotification(t, restSubsId, expectError)
+}
+
+func (tc *E2Stub) expectNotification(t *testing.T, restSubsId string, expectError string) {
 
        tc.Info("### Started to wait REST notification for %v on port %v f(RMR port %v), %v responses expected", restSubsId, *tc.clientEndpoint.HTTPPort, *tc.clientEndpoint.RMRPort, tc.requestCount)
        tc.restSubsIdList = []string{restSubsId}
@@ -659,6 +710,10 @@ func (tc *E2Stub) ExpectRESTNotification(t *testing.T, restSubsId string) {
                                tc.TestError(t, "### REST notification count unexpectedly ZERO for %s (%v)", restSubsId, tc)
                        } else if e2Ids.RestSubsId != restSubsId {
                                tc.TestError(t, "### Unexpected REST notifications received |%s:%s| (%v)", e2Ids.RestSubsId, restSubsId, tc)
+                       } else if e2Ids.ErrorCause == "" && expectError == "allFail" {
+                               tc.TestError(t, "### Unexpected ok cause received from REST notifications |%s:%s| (%v)", e2Ids.RestSubsId, restSubsId, tc)
+                       } else if e2Ids.ErrorCause != "" && expectError == "allOk" {
+                               tc.TestError(t, "### Unexpected error cause (%s) received from REST notifications |%s:%s| (%v)", e2Ids.ErrorCause, e2Ids.RestSubsId, restSubsId, tc)
                        } else {
                                tc.requestCount--
                                if tc.requestCount == 0 {
@@ -666,6 +721,9 @@ func (tc *E2Stub) ExpectRESTNotification(t *testing.T, restSubsId string) {
                                } else {
                                        tc.Info("### Expected REST notifications received for %s, (%v)", e2Ids.RestSubsId, tc)
                                }
+                               if e2Ids.ErrorCause != "" && expectError == "allFail" {
+                                       tc.Info("### REST Notification: %s, ErrorCause: %v", e2Ids.RestSubsId, e2Ids.ErrorCause)
+                               }
                                tc.Info("### REST Notification received Notif for %s : %v", e2Ids.RestSubsId, e2Ids.E2SubsId)
                                tc.ListedRESTNotifications <- e2Ids
                        }
@@ -716,13 +774,17 @@ func (tc *E2Stub) ListedRestNotifHandler(resp *clientmodel.SubscriptionResponse)
        } else {
                for i, subsId := range tc.restSubsIdList {
                        if *resp.SubscriptionID == subsId {
-                               //tc.Info("Listed REST notifications received SubscriptionID=%s, InstanceID=%v, RequestorID=%v",
-                               //      *resp.SubscriptionID, *resp.SubscriptionInstances[0].InstanceID, *resp.SubscriptionInstances[0].RequestorID)
+                               //tc.Info("Listed REST notifications received SubscriptionID=%s, InstanceID=%v, XappEventInstanceID=%v",
+                               //      *resp.SubscriptionID, *resp.SubscriptionInstances[0].InstanceID, *resp.SubscriptionInstances[0].XappEventInstanceID)
 
                                tc.restSubsIdList = append(tc.restSubsIdList[:i], tc.restSubsIdList[i+1:]...)
                                //tc.Info("Removed %s from Listed REST notifications, %v entries left", *resp.SubscriptionID, len(tc.restSubsIdList))
 
-                               tc.CallBackListedNotifications <- E2RestIds{*resp.SubscriptionID, uint32(*resp.SubscriptionInstances[0].InstanceID)}
+                               if resp.SubscriptionInstances[0].ErrorCause != nil {
+                                       tc.CallBackListedNotifications <- E2RestIds{*resp.SubscriptionID, uint32(*resp.SubscriptionInstances[0].E2EventInstanceID), *resp.SubscriptionInstances[0].ErrorCause}
+                               } else {
+                                       tc.CallBackListedNotifications <- E2RestIds{*resp.SubscriptionID, uint32(*resp.SubscriptionInstances[0].E2EventInstanceID), ""}
+                               }
 
                                if len(tc.restSubsIdList) == 0 {
                                        //tc.Info("All listed REST notifications received for endpoint=%s", tc.clientEndpoint)
@@ -731,8 +793,8 @@ func (tc *E2Stub) ListedRestNotifHandler(resp *clientmodel.SubscriptionResponse)
                                return
                        }
                }
-               tc.Error("UNKONWN REST notification received SubscriptionID=%s<>%s, InstanceID=%v, RequestorID=%v (%v)",
-                       tc.subscriptionId, *resp.SubscriptionID, *resp.SubscriptionInstances[0].InstanceID, *resp.SubscriptionInstances[0].RequestorID, tc)
+               tc.Error("UNKONWN REST notification received SubscriptionID=%s<>%s, InstanceID=%v, XappEventInstanceID=%v (%v)",
+                       tc.subscriptionId, *resp.SubscriptionID, *resp.SubscriptionInstances[0].E2EventInstanceID, *resp.SubscriptionInstances[0].XappEventInstanceID, tc)
        }
 }
 
@@ -771,6 +833,8 @@ func (tc *E2Stub) SendRESTSubsReq(t *testing.T, params *RESTSubsReqParams) strin
                return ""
        }
 
+       tc.subscriptionId = "SUBSCRIPTIONID NOT SET"
+
        resp, err := xapp.Subscription.Subscribe(&params.SubsReqParams)
        if err != nil {
                // Swagger generated code makes checks for the values that are inserted the subscription function
@@ -786,27 +850,10 @@ func (tc *E2Stub) SendRESTSubsReq(t *testing.T, params *RESTSubsReqParams) strin
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
-func (tc *E2Stub) GetRESTSubsReqReportParams(subReqCount int, parameterSet int, actionDefinitionPresent bool, actionParamCount int) *RESTSubsReqParams {
-
-       reportParams := RESTSubsReqParams{}
-       if parameterSet == 1 {
-               reportParams.GetRESTSubsReqReportParams1(subReqCount, actionDefinitionPresent, actionParamCount, &tc.clientEndpoint, &tc.meid)
-       } else if parameterSet == 2 {
-
-       } else {
-               tc.Error("Invalid parameterSet=%v", parameterSet)
-       }
-       tc.requestCount = subReqCount
-       return &reportParams
-}
-
-//-----------------------------------------------------------------------------
-//
-//-----------------------------------------------------------------------------
-func (tc *E2Stub) GetRESTSubsReqReportParams1(subReqCount int, actionDefinitionPresent bool, actionParamCount int) *RESTSubsReqParams {
+func (tc *E2Stub) GetRESTSubsReqReportParams(subReqCount int) *RESTSubsReqParams {
 
        reportParams := RESTSubsReqParams{}
-       reportParams.GetRESTSubsReqReportParams1(subReqCount, actionDefinitionPresent, actionParamCount, &tc.clientEndpoint, &tc.meid)
+       reportParams.GetRESTSubsReqReportParams(subReqCount, &tc.clientEndpoint, &tc.meid)
        tc.requestCount = subReqCount
        return &reportParams
 }
@@ -818,7 +865,7 @@ type RESTSubsReqParams struct {
        SubsReqParams clientmodel.SubscriptionParams
 }
 
-func (p *RESTSubsReqParams) GetRESTSubsReqReportParams1(subReqCount int, actionDefinitionPresent bool, actionParamCount int, clientEndpoint *clientmodel.SubscriptionParamsClientEndpoint, meid *string) {
+func (p *RESTSubsReqParams) GetRESTSubsReqReportParams(subReqCount int, clientEndpoint *clientmodel.SubscriptionParamsClientEndpoint, meid *string) {
 
        // E2SM-gNB-X2
        p.SubsReqParams.ClientEndpoint = clientEndpoint
@@ -835,19 +882,17 @@ func (p *RESTSubsReqParams) GetRESTSubsReqReportParams1(subReqCount int, actionD
 
        for requestCount := 0; requestCount < subReqCount; requestCount++ {
                reqId := int64(requestCount) + 1
-               seqId := int64(requestCount) + 1
                subscriptionDetail := &clientmodel.SubscriptionDetail{
-                       RequestorID: &reqId,
-                       InstanceID:  &seqId,
-                       EventTriggers: &clientmodel.EventTriggerDefinition{
-                               OctetString: "1234" + strconv.Itoa(requestCount),
+                       XappEventInstanceID: &reqId,
+                       EventTriggers: clientmodel.EventTriggerDefinition{
+                               int64(1234 + requestCount),
                        },
                        ActionToBeSetupList: clientmodel.ActionsToBeSetup{
                                &clientmodel.ActionToBeSetup{
                                        ActionID:   &actionId,
                                        ActionType: &actionType,
-                                       ActionDefinition: &clientmodel.ActionDefinition{
-                                               OctetString: "5678" + strconv.Itoa(requestCount),
+                                       ActionDefinition: clientmodel.ActionDefinition{
+                                               int64(5678 + requestCount),
                                        },
                                        SubsequentAction: &clientmodel.SubsequentAction{
                                                SubsequentActionType: &subsequestActioType,
@@ -919,34 +964,32 @@ func (p *RESTSubsReqParams) SetSubActionIDs(actionId int64) {
        }
 }
 
-func (p *RESTSubsReqParams) SetSubActionDefinition(actionDefinition string) {
+func (p *RESTSubsReqParams) SetSubActionDefinition(actionDefinition []int64) {
 
        for _, subDetail := range p.SubsReqParams.SubscriptionDetails {
                for _, action := range subDetail.ActionToBeSetupList {
                        if action != nil {
-                               action.ActionDefinition.OctetString = actionDefinition
+                               action.ActionDefinition = actionDefinition
                        }
                }
        }
 }
 
-func (p *RESTSubsReqParams) SetSubEventTriggerDefinition(eventTriggerDefinition string) {
+func (p *RESTSubsReqParams) SetSubEventTriggerDefinition(eventTriggerDefinition []int64) {
 
        for _, subDetail := range p.SubsReqParams.SubscriptionDetails {
                if subDetail != nil {
-                       subDetail.EventTriggers.OctetString = eventTriggerDefinition
+                       subDetail.EventTriggers = eventTriggerDefinition
                }
        }
 }
 
-func (p *RESTSubsReqParams) AppendActionToActionToBeSetupList(actionId int64, actionType string, actionDefinition string, subsequentActionType string, timeToWait string) {
+func (p *RESTSubsReqParams) AppendActionToActionToBeSetupList(actionId int64, actionType string, actionDefinition []int64, subsequentActionType string, timeToWait string) {
 
        actionToBeSetup := &clientmodel.ActionToBeSetup{
-               ActionID:   &actionId,
-               ActionType: &actionType,
-               ActionDefinition: &clientmodel.ActionDefinition{
-                       OctetString: actionDefinition,
-               },
+               ActionID:         &actionId,
+               ActionType:       &actionType,
+               ActionDefinition: clientmodel.ActionDefinition(actionDefinition),
                SubsequentAction: &clientmodel.SubsequentAction{
                        SubsequentActionType: &subsequentActionType,
                        TimeToWait:           &timeToWait,
@@ -983,6 +1026,14 @@ func (p *RESTSubsReqParams) SetTimeToWait(timeToWait string) {
        }
 }
 
+func (p *RESTSubsReqParams) SetSubscriptionID(SubscriptionID *string) {
+
+       if *SubscriptionID == "" {
+               return
+       }
+       p.SubsReqParams.SubscriptionID = *SubscriptionID
+}
+
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
@@ -1003,10 +1054,10 @@ func (tc *E2Stub) SendRESTSubsDelReq(t *testing.T, subscriptionID *string) {
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
-func (tc *E2Stub) GetRESTSubsReqPolicyParams(subReqCount int, actionDefinitionPresent bool, policyParamCount int) *RESTSubsReqParams {
+func (tc *E2Stub) GetRESTSubsReqPolicyParams(subReqCount int) *RESTSubsReqParams {
 
        policyParams := RESTSubsReqParams{}
-       policyParams.GetRESTSubsReqPolicyParams(subReqCount, actionDefinitionPresent, policyParamCount, &tc.clientEndpoint, &tc.meid)
+       policyParams.GetRESTSubsReqPolicyParams(subReqCount, &tc.clientEndpoint, &tc.meid)
        tc.requestCount = subReqCount
        return &policyParams
 }
@@ -1014,7 +1065,7 @@ func (tc *E2Stub) GetRESTSubsReqPolicyParams(subReqCount int, actionDefinitionPr
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
-func (p *RESTSubsReqParams) GetRESTSubsReqPolicyParams(subReqCount int, actionDefinitionPresent bool, policyParamCount int, clientEndpoint *clientmodel.SubscriptionParamsClientEndpoint, meid *string) {
+func (p *RESTSubsReqParams) GetRESTSubsReqPolicyParams(subReqCount int, clientEndpoint *clientmodel.SubscriptionParamsClientEndpoint, meid *string) {
 
        p.SubsReqParams.ClientEndpoint = clientEndpoint
        p.SubsReqParams.Meid = meid
@@ -1030,19 +1081,17 @@ func (p *RESTSubsReqParams) GetRESTSubsReqPolicyParams(subReqCount int, actionDe
 
        for requestCount := 0; requestCount < subReqCount; requestCount++ {
                reqId := int64(requestCount) + 1
-               seqId := int64(0)
                subscriptionDetail := &clientmodel.SubscriptionDetail{
-                       RequestorID: &reqId,
-                       InstanceID:  &seqId,
-                       EventTriggers: &clientmodel.EventTriggerDefinition{
-                               OctetString: "1234" + strconv.Itoa(requestCount),
+                       XappEventInstanceID: &reqId,
+                       EventTriggers: clientmodel.EventTriggerDefinition{
+                               int64(1234 + requestCount),
                        },
                        ActionToBeSetupList: clientmodel.ActionsToBeSetup{
                                &clientmodel.ActionToBeSetup{
                                        ActionID:   &actionId,
                                        ActionType: &actionType,
-                                       ActionDefinition: &clientmodel.ActionDefinition{
-                                               OctetString: "5678" + strconv.Itoa(requestCount),
+                                       ActionDefinition: clientmodel.ActionDefinition{
+                                               int64(5678 + requestCount),
                                        },
                                        SubsequentAction: &clientmodel.SubsequentAction{
                                                SubsequentActionType: &subsequestActioType,