package control import ( "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap" "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststub" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" "github.com/stretchr/testify/assert" "testing" "time" ) func initMock() *Control { var payload = []byte{0, 8, 0, 50, 0, 0, 3, 0, 29, 0, 5, 0, 0, 3, 0, 159, 0, 5, 0, 2, 0, 2, 0, 30, 0, 28, 0, 7, 8, 0, 0, 5, 0, 0, 0, 0, 0, 19, 64, 14, 64, 122, 32, 10, 0, 1, 4, 64, 0, 0, 0, 0, 0, 23} var payload1 = []byte{0, 8, 0, 50, 0, 0, 3, 0, 29, 0, 5, 0, 0, 3, 0, 160, 0, 5, 0, 2, 0, 2, 0, 30, 0, 28, 0, 7, 8, 0, 0, 5, 0, 0, 0, 0, 0, 19, 64, 14, 64, 122, 32, 10, 0, 2, 4, 64, 0, 0, 0, 0, 0, 23} meid := &xapp.RMRMeid{} meid.RanName = "RAN_NAME_20" var params = &xapp.RMRParams{ Mtype: 12023, Payload: payload, PayloadLen: len(payload), Meid: meid, Xid: "457945551669", SubId: -1, Src: "service-ricplt-e2term-rmr-alpha.ricplt:38000", Mbuf: nil, Whid: 0, Callid: 0, Timeout: 0, } C1 := &Control{ RMRClient: mainCtrl.c.RMRClient, e2ap: mainCtrl.c.e2ap, registry: mainCtrl.c.registry, tracker: mainCtrl.c.tracker, restDuplicateCtrl: mainCtrl.c.restDuplicateCtrl, e2IfState: mainCtrl.c.e2IfState, e2IfStateDb: mainCtrl.c.e2IfStateDb, e2SubsDb: mainCtrl.c.e2SubsDb, restSubsDb: mainCtrl.c.restSubsDb, CntRecvMsg: mainCtrl.c.CntRecvMsg, ResetTestFlag: mainCtrl.c.ResetTestFlag, Counters: mainCtrl.c.Counters, LoggerLevel: mainCtrl.c.LoggerLevel, UTTesting: mainCtrl.c.UTTesting, } subReqMsg, _ := C1.e2ap.UnpackSubscriptionRequest(params.Payload) subReqMsg1, _ := C1.e2ap.UnpackSubscriptionRequest(payload1) trans := C1.tracker.NewXappTransaction(xapp.NewRmrEndpoint(params.Src), params.Xid, subReqMsg.RequestId, params.Meid) trans1 := C1.tracker.NewXappTransaction(xapp.NewRmrEndpoint(params.Src), params.Xid, subReqMsg1.RequestId, params.Meid) for _, acts := range subReqMsg.ActionSetups { acts.ActionType = e2ap.E2AP_ActionTypeInsert } for _, acts := range subReqMsg1.ActionSetups { acts.ActionType = e2ap.E2AP_ActionTypeInsert } _, _, _ = C1.registry.AssignToSubscription(trans, subReqMsg, C1.ResetTestFlag, C1, true) _, _, _ = C1.registry.AssignToSubscription(trans1, subReqMsg1, C1.ResetTestFlag, C1, true) controlObj := testingSubmgrControl{ RmrControl: teststub.RmrControl{}, c: C1, } handler := controlObj.c return handler } func TestControl_handleE2TSubscriptionDeleteRequired(t *testing.T) { handler := initMock() var payload = []byte{0, 12, 64, 20, 0, 0, 1, 0, 50, 64, 13, 1, 0, 51, 64, 8, 0, 0, 123, 0, 1, 0, 2, 86} meid := &xapp.RMRMeid{} meid.RanName = "RAN_NAME_20" var params = &xapp.RMRParams{ Mtype: 12023, Payload: payload, PayloadLen: len(payload), Meid: meid, Xid: "457945551669", SubId: -1, Src: "service-ricplt-e2term-rmr-alpha.ricplt:38000", Mbuf: nil, Whid: 0, Callid: 0, Timeout: 0, } type fields struct { RMRClient *xapp.RMRClient e2ap *E2ap registry *Registry tracker *Tracker restDuplicateCtrl *DuplicateCtrl e2IfState *E2IfState e2IfStateDb XappRnibInterface e2SubsDb Sdlnterface restSubsDb Sdlnterface CntRecvMsg uint64 ResetTestFlag bool Counters map[string]xapp.Counter LoggerLevel int UTTesting bool } type args struct { params *xapp.RMRParams } tests := []struct { name string fields fields args args }{ { name: "abc", fields: fields{ RMRClient: handler.RMRClient, e2ap: handler.e2ap, registry: handler.registry, tracker: handler.tracker, restDuplicateCtrl: handler.restDuplicateCtrl, e2IfState: handler.e2IfState, e2IfStateDb: handler.e2IfStateDb, e2SubsDb: handler.e2SubsDb, restSubsDb: handler.restSubsDb, CntRecvMsg: handler.CntRecvMsg, ResetTestFlag: handler.ResetTestFlag, Counters: handler.Counters, LoggerLevel: handler.LoggerLevel, UTTesting: handler.UTTesting, }, args: args{params: params}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { c := &Control{ RMRClient: tt.fields.RMRClient, e2ap: tt.fields.e2ap, registry: tt.fields.registry, tracker: tt.fields.tracker, restDuplicateCtrl: tt.fields.restDuplicateCtrl, e2IfState: tt.fields.e2IfState, e2IfStateDb: tt.fields.e2IfStateDb, e2SubsDb: tt.fields.e2SubsDb, restSubsDb: tt.fields.restSubsDb, CntRecvMsg: tt.fields.CntRecvMsg, ResetTestFlag: tt.fields.ResetTestFlag, Counters: tt.fields.Counters, LoggerLevel: tt.fields.LoggerLevel, UTTesting: tt.fields.UTTesting, } c.e2IfState.NbIdMap[params.Meid.RanName] = "_CONNECTED" c.handleE2TSubscriptionDeleteRequired(tt.args.params) subs, _ := c.registry.GetSubscriptionFirstMatch([]uint32{uint32(1)}) subs1, _ := c.registry.GetSubscriptionFirstMatch([]uint32{uint32(2)}) assert.Nil(t, subs) assert.NotNil(t, subs1) time.Sleep(1 * time.Second) }) } } func TestE2ap_UnpackSubscriptionDeleteRequired(t *testing.T) { var payload = []byte{0, 12, 64, 20, 0, 0, 1, 0, 50, 64, 13, 1, 0, 51, 64, 8, 0, 0, 123, 0, 1, 0, 2, 86} var e2ap1 = E2ap{} list, _ := e2ap1.UnpackSubscriptionDeleteRequired(payload) expectedList := &e2ap.SubscriptionDeleteRequiredList{E2APSubscriptionDeleteRequiredRequests: []e2ap.E2APSubscriptionDeleteRequired{{ RequestId: e2ap.RequestId{ Id: 123, InstanceId: 1, }, FunctionId: 2, Cause: e2ap.Cause{ Content: 6, Value: 3, }, }}} assert.Equal(t, expectedList, list) } func TestE2ap_UnpackSubscriptionDeleteRequiredForWrongPayload(t *testing.T) { var payload = []byte{12, 64, 20, 0, 0, 1, 0, 50, 64, 13, 1, 0, 51, 64, 8, 0, 0, 123, 0, 1, 0, 2, 86} var e2ap1 = E2ap{} _, err := e2ap1.UnpackSubscriptionDeleteRequired(payload) assert.NotNil(t, err) } func TestE2ap_PackSubscriptionDeleteRequired(t *testing.T) { list := &e2ap.SubscriptionDeleteRequiredList{E2APSubscriptionDeleteRequiredRequests: []e2ap.E2APSubscriptionDeleteRequired{{ RequestId: e2ap.RequestId{ Id: 123, InstanceId: 1, }, FunctionId: 2, Cause: e2ap.Cause{ Content: 6, Value: 3, }, }}} e2ap1 := E2ap{} payload1 := []byte{0, 12, 64, 20, 0, 0, 1, 0, 50, 64, 13, 1, 0, 51, 64, 8, 0, 0, 123, 0, 1, 0, 2, 86} payload := &e2ap.PackedData{Buf: payload1} _, packedata, _ := e2ap1.PackSubscriptionDeleteRequired(list) assert.Equal(t, payload, packedata) }