X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fut_messaging_test.go;h=81464b8cb68c8cc93ef177c0c19fc550ac64f5a6;hb=47518ae7612cbfb1562fa1f74b9023389d8cfd61;hp=548950a29b1bea47ee208595b14f0a799b84c7aa;hpb=cdc35bff0dd4c41d1e764d3f48efa70d9f33a8f7;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/ut_messaging_test.go b/pkg/control/ut_messaging_test.go index 548950a..81464b8 100644 --- a/pkg/control/ut_messaging_test.go +++ b/pkg/control/ut_messaging_test.go @@ -20,12 +20,13 @@ package control import ( + "testing" + "time" + "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap" "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/teststube2ap" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" "github.com/stretchr/testify/assert" - "testing" - "time" ) //----------------------------------------------------------------------------- @@ -33,7 +34,7 @@ import ( // // stub stub // +-------+ +---------+ +---------+ -// | xapp | | submgr | | rtmgr | +// | xapp | | submgr | | rtmgr | // +-------+ +---------+ +---------+ // | | | // | SubReq | | @@ -54,6 +55,12 @@ import ( func TestSubReqAndRouteNok(t *testing.T) { CaseBegin("TestSubReqAndRouteNok") + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cRouteCreateFail, 1}, + }) + waiter := rtmgrHttp.AllocNextEvent(false) newSubsId := mainCtrl.get_registry_next_subid(t) xappConn1.SendSubsReq(t, nil, nil) @@ -66,8 +73,270 @@ func TestSubReqAndRouteNok(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + <-time.After(1 * time.Second) + mainCtrl.VerifyCounterValues(t) +} + +//----------------------------------------------------------------------------- +// TestSubReqAndRouteUpdateNok + +// stub stub +// +-------+ +-------+ +---------+ +---------+ +// | xapp2 | | xapp1 | | submgr | | rtmgr | +// +-------+ +-------+ +---------+ +---------+ +// | | | | +// | [SUBS CREATE] | | +// | | | | +// | | | | +// | | | | +// | SubReq (mergeable) | | +// |--------------------------->| | | +// | | | | +// | | | RouteUpdate | +// | | |------------->| +// | | | | +// | | | RouteUpdate | +// | | | status:400 | +// | | |<-------------| +// | | | | +// | [SUBS INT DELETE] | | +// | | | | +// | | | | +// | [SUBS DELETE] | | +// | | | | +func TestSubReqAndRouteUpdateNok(t *testing.T) { + CaseBegin("TestSubReqAndRouteUpdateNok") + + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 2}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 1}, + Counter{cRouteCreateUpdateFail, 1}, + Counter{cSubDelReqFromXapp, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 1}, + }) + + cretrans := xappConn1.SendSubsReq(t, nil, nil) + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) + + resp, _ := xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) + + waiter := rtmgrHttp.AllocNextEvent(false) + newSubsId := mainCtrl.get_registry_next_subid(t) + xappConn2.SendSubsReq(t, nil, nil) + waiter.WaitResult(t) + + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + xappConn1.RecvSubsDelResp(t, deltrans) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, newSubsId, 10) + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) +} + +//----------------------------------------------------------------------------- +// TestSubDelReqAndRouteDeleteNok +// +// stub stub +// +-------+ +---------+ +---------+ +---------+ +// | xapp | | submgr | | e2term | | rtmgr | +// +-------+ +---------+ +---------+ +---------+ +// | | | | +// | [SUBS CREATE] | | +// | | | | +// | | | | +// | | | | +// | SubDelReq | | | +// |------------->| | | +// | | SubDelReq | | +// | |------------->| | +// | | SubDelRsp | | +// | |<-------------| | +// | SubDelRsp | | | +// |<-------------| | | +// | | RouteDelete | | +// | |---------------------------->| +// | | | | +// | | RouteDelete | | +// | | status:400 | | +// | |<----------------------------| +// | | | | +func TestSubDelReqAndRouteDeleteNok(t *testing.T) { + CaseBegin("TestSubDelReqAndRouteDeleteNok") + + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 1}, + Counter{cSubDelReqFromXapp, 1}, + Counter{cRouteDeleteFail, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 1}, + }) + + cretrans := xappConn1.SendSubsReq(t, nil, nil) + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) + + resp, _ := xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) + + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + + waiter := rtmgrHttp.AllocNextEvent(false) + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + waiter.WaitResult(t) + + xappConn1.RecvSubsDelResp(t, deltrans) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) +} + +//----------------------------------------------------------------------------- +// TestSubMergeDelAndRouteUpdateNok +// stub stub +// +-------+ +-------+ +---------+ +---------+ +// | xapp2 | | xapp1 | | submgr | | e2term | +// +-------+ +-------+ +---------+ +---------+ +// | | | | +// | | | | +// | | | | +// | | SubReq1 | | +// | |------------->| | +// | | | | +// | | | SubReq1 | +// | | |------------->| +// | | | SubResp1 | +// | | |<-------------| +// | | SubResp1 | | +// | |<-------------| | +// | | | | +// | SubReq2 | | +// |--------------------------->| | +// | | | | +// | SubResp2 | | +// |<---------------------------| | +// | | | | +// | | SubDelReq 1 | | +// | |------------->| | +// | | | RouteUpdate | +// | | |-----> rtmgr | +// | | | | +// | | | RouteUpdate | +// | | | status:400 | +// | | |<----- rtmgr | +// | | | | +// | | SubDelResp 1 | | +// | |<-------------| | +// | | | | +// | SubDelReq 2 | | +// |--------------------------->| | +// | | | | +// | | | SubDelReq 2 | +// | | |------------->| +// | | | | +// | | | SubDelReq 2 | +// | | |------------->| +// | | | | +// | SubDelResp 2 | | +// |<---------------------------| | +// +//----------------------------------------------------------------------------- +func TestSubMergeDelAndRouteUpdateNok(t *testing.T) { + CaseBegin("TestSubMergeDelAndRouteUpdateNok") + + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 2}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 2}, + Counter{cSubDelReqFromXapp, 2}, + Counter{cRouteDeleteUpdateFail, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 2}, + }) + + //Req1 + rparams1 := &teststube2ap.E2StubSubsReqParams{} + rparams1.Init() + cretrans1 := xappConn1.SendSubsReq(t, rparams1, nil) + crereq1, cremsg1 := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq1, cremsg1) + e2SubsId1 := xappConn1.RecvSubsResp(t, cretrans1) + + //Req2 + rparams2 := &teststube2ap.E2StubSubsReqParams{} + rparams2.Init() + cretrans2 := xappConn2.SendSubsReq(t, rparams2, nil) + e2SubsId2 := xappConn2.RecvSubsResp(t, cretrans2) + + resp, _ := xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId1)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560", "localhost:13660"}) + + //Del1 + waiter := rtmgrHttp.AllocNextEvent(false) + deltrans1 := xappConn1.SendSubsDelReq(t, nil, e2SubsId1) + waiter.WaitResult(t) + + xappConn1.RecvSubsDelResp(t, deltrans1) + + //Del2 + deltrans2 := xappConn2.SendSubsDelReq(t, nil, e2SubsId2) + delreq2, delmsg2 := e2termConn1.RecvSubsDelReq(t) + e2termConn1.SendSubsDelResp(t, delreq2, delmsg2) + xappConn2.RecvSubsDelResp(t, deltrans2) + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId2, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } +//----------------------------------------------------------------------------- + //----------------------------------------------------------------------------- // TestSubReqAndSubDelOk // @@ -105,8 +374,19 @@ func TestSubReqAndRouteNok(t *testing.T) { func TestSubReqAndSubDelOk(t *testing.T) { CaseBegin("TestSubReqAndSubDelOk") - cretrans := xappConn1.SendSubsReq(t, nil, nil) + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 1}, + Counter{cSubDelReqFromXapp, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 1}, + }) + cretrans := xappConn1.SendSubsReq(t, nil, nil) crereq, cremsg := e2termConn1.RecvSubsReq(t) e2termConn1.SendSubsResp(t, crereq, cremsg) e2SubsId := xappConn1.RecvSubsResp(t, cretrans) @@ -114,7 +394,7 @@ func TestSubReqAndSubDelOk(t *testing.T) { resp, _ := xapp.Subscription.QuerySubscriptions() assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId)) assert.Equal(t, resp[0].Meid, "RAN_NAME_1") - assert.Equal(t, resp[0].Endpoint, []string{"localhost:13560"}) + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) delreq, delmsg := e2termConn1.RecvSubsDelReq(t) @@ -129,6 +409,8 @@ func TestSubReqAndSubDelOk(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -528,9 +810,21 @@ func TestSameSubsDiffRan(t *testing.T) { //----------------------------------------------------------------------------- func TestSubReqRetryInSubmgr(t *testing.T) { - CaseBegin("TestSubReqRetryInSubmgr start") + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubReReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 1}, + Counter{cSubDelReqFromXapp, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 1}, + }) + // Xapp: Send SubsReq cretrans := xappConn1.SendSubsReq(t, nil, nil) @@ -556,6 +850,8 @@ func TestSubReqRetryInSubmgr(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -579,11 +875,6 @@ func TestSubReqRetryInSubmgr(t *testing.T) { // | | SubDelReq | // | |------------->| // | | | -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | | // | | SubDelResp | // | |<-------------| // | | | @@ -591,9 +882,18 @@ func TestSubReqRetryInSubmgr(t *testing.T) { //----------------------------------------------------------------------------- func TestSubReqRetryNoRespSubDelRespInSubmgr(t *testing.T) { - CaseBegin("TestSubReqTwoRetriesNoRespSubDelRespInSubmgr start") + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubReReqToE2, 1}, + Counter{cSubReqTimerExpiry, 2}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + }) + // Xapp: Send SubsReq xappConn1.SendSubsReq(t, nil, nil) @@ -614,6 +914,8 @@ func TestSubReqRetryNoRespSubDelRespInSubmgr(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -646,9 +948,18 @@ func TestSubReqRetryNoRespSubDelRespInSubmgr(t *testing.T) { //----------------------------------------------------------------------------- func TestSubReqTwoRetriesNoRespAtAllInSubmgr(t *testing.T) { - CaseBegin("TestSubReqTwoRetriesNoRespAtAllInSubmgr start") + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubReReqToE2, 1}, + Counter{cSubReqTimerExpiry, 2}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelReReqToE2, 1}, + Counter{cSubDelReqTimerExpiry, 2}, + }) + // Xapp: Send SubsReq xappConn1.SendSubsReq(t, nil, nil) @@ -671,6 +982,8 @@ func TestSubReqTwoRetriesNoRespAtAllInSubmgr(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -690,12 +1003,6 @@ func TestSubReqTwoRetriesNoRespAtAllInSubmgr(t *testing.T) { // | | SubFail | // | |<-------------| // | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelResp | -// | |<-------------| -// | | | // | SubFail | | // |<-------------| | // | | | @@ -703,9 +1010,15 @@ func TestSubReqTwoRetriesNoRespAtAllInSubmgr(t *testing.T) { //----------------------------------------------------------------------------- func TestSubReqSubFailRespInSubmgr(t *testing.T) { - CaseBegin("TestSubReqSubFailRespInSubmgr start") + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubFailFromE2, 1}, + Counter{cSubFailToXapp, 1}, + }) + // Xapp: Send SubsReq cretrans := xappConn1.SendSubsReq(t, nil, nil) @@ -715,10 +1028,6 @@ func TestSubReqSubFailRespInSubmgr(t *testing.T) { fparams1.Set(crereq1) e2termConn1.SendSubsFail(t, fparams1, cremsg1) - // E2t: Receive SubsDelReq and send SubsDelResp (internal first) - delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - // Xapp: Receive SubsFail e2SubsId := xappConn1.RecvSubsFail(t, cretrans) @@ -729,207 +1038,51 @@ func TestSubReqSubFailRespInSubmgr(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- -// TestSubReqSubFailRespInSubmgrWithDuplicate +// TestSubDelReqRetryInSubmgr // // stub stub // +-------+ +---------+ +---------+ // | xapp | | submgr | | e2term | // +-------+ +---------+ +---------+ // | | | -// | SubReq | | -// |------------->| | +// | [SUBS CREATE] | // | | | -// | | SubReq | -// | |------------->| // | | | -// | | SubFail | -// | |<-------------| +// | SubDelReq | | +// |------------->| | // | | | // | | SubDelReq | // | |------------->| // | | | -// | | SubDelResp | -// | |<-------------| -// | | | -// | | SubReq | +// | | SubDelReq | // | |------------->| // | | | -// | | SubResp | +// | | SubDelResp | // | |<-------------| // | | | -// | SubResp | | +// | SubDelResp | | // |<-------------| | -// | | | -// | [SUBS DELETE] | -// | | | // //----------------------------------------------------------------------------- -func TestSubReqSubFailRespInSubmgrWithDuplicate(t *testing.T) { +func TestSubDelReqRetryInSubmgr(t *testing.T) { - CaseBegin("TestSubReqSubFailRespInSubmgrWithDuplicate start") + CaseBegin("TestSubDelReqRetryInSubmgr start") - // Xapp: Send SubsReq + // Subs Create cretrans := xappConn1.SendSubsReq(t, nil, nil) + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) - // E2t: Receive SubsReq and send SubsFail (first) - crereq1, cremsg1 := e2termConn1.RecvSubsReq(t) - fparams1 := &teststube2ap.E2StubSubsFailParams{} - fparams1.Set(crereq1) - fparams1.SetCauseVal(-1, 5, 3) - e2termConn1.SendSubsFail(t, fparams1, cremsg1) - - // E2t: Receive SubsDelReq and send SubsDelResp (internal) - delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - - // E2t: Receive SubsReq and send SubsResp (second) - crereq2, cremsg2 := e2termConn1.RecvSubsReq(t) - e2termConn1.SendSubsResp(t, crereq2, cremsg2) - - // XAPP: Receive SubsResp - e2SubsId := xappConn1.RecvSubsResp(t, cretrans) - - // Delete - deltrans2 := xappConn1.SendSubsDelReq(t, nil, e2SubsId) - delreq2, delmsg2 := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq2, delmsg2) - xappConn1.RecvSubsDelResp(t, deltrans2) - - // Wait that subs is cleaned - mainCtrl.wait_subs_clean(t, e2SubsId, 10) - - xappConn1.TestMsgChanEmpty(t) - xappConn2.TestMsgChanEmpty(t) - e2termConn1.TestMsgChanEmpty(t) - mainCtrl.wait_registry_empty(t, 10) -} - -//----------------------------------------------------------------------------- -// TestSubReqSubFailRespInSubmgrWithDuplicateFail -// -// stub stub -// +-------+ +---------+ +---------+ -// | xapp | | submgr | | e2term | -// +-------+ +---------+ +---------+ -// | | | -// | SubReq | | -// |------------->| | -// | | | -// | | SubReq | -// | |------------->| -// | | | -// | | SubFail | -// | |<-------------| -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelResp | -// | |<-------------| -// | | | -// | | SubReq | -// | |------------->| -// | | | -// | | SubFail | -// | |<-------------| -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelResp | -// | |<-------------| -// | SubFail | | -// |<-------------| | -// | | | -// -//----------------------------------------------------------------------------- - -func TestSubReqSubFailRespInSubmgrWithDuplicateFail(t *testing.T) { - - CaseBegin("TestSubReqSubFailRespInSubmgrWithDuplicateFail start") - - // Xapp: Send SubsReq - cretrans := xappConn1.SendSubsReq(t, nil, nil) - - // E2t: Receive SubsReq and send SubsFail (first) - crereq1, cremsg1 := e2termConn1.RecvSubsReq(t) - fparams1 := &teststube2ap.E2StubSubsFailParams{} - fparams1.Set(crereq1) - fparams1.SetCauseVal(-1, 5, 3) - e2termConn1.SendSubsFail(t, fparams1, cremsg1) - - // E2t: Receive SubsDelReq and send SubsDelResp (internal first) - delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - - // E2t: Receive SubsReq and send SubsFail (second) - crereq2, cremsg2 := e2termConn1.RecvSubsReq(t) - fparams2 := &teststube2ap.E2StubSubsFailParams{} - fparams2.Set(crereq2) - fparams2.SetCauseVal(-1, 5, 3) - e2termConn1.SendSubsFail(t, fparams2, cremsg2) - - // E2t: Receive SubsDelReq and send SubsDelResp (internal second) - delreq2, delmsg2 := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq2, delmsg2) - - // Xapp: Receive SubsFail - e2SubsId := xappConn1.RecvSubsFail(t, cretrans) - - // Wait that subs is cleaned - mainCtrl.wait_subs_clean(t, e2SubsId, 10) - - xappConn1.TestMsgChanEmpty(t) - xappConn2.TestMsgChanEmpty(t) - e2termConn1.TestMsgChanEmpty(t) - mainCtrl.wait_registry_empty(t, 10) -} - -//----------------------------------------------------------------------------- -// TestSubDelReqRetryInSubmgr -// -// stub stub -// +-------+ +---------+ +---------+ -// | xapp | | submgr | | e2term | -// +-------+ +---------+ +---------+ -// | | | -// | [SUBS CREATE] | -// | | | -// | | | -// | SubDelReq | | -// |------------->| | -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelResp | -// | |<-------------| -// | | | -// | SubDelResp | | -// |<-------------| | -// -//----------------------------------------------------------------------------- - -func TestSubDelReqRetryInSubmgr(t *testing.T) { - - CaseBegin("TestSubDelReqRetryInSubmgr start") - - // Subs Create - cretrans := xappConn1.SendSubsReq(t, nil, nil) - crereq, cremsg := e2termConn1.RecvSubsReq(t) - e2termConn1.SendSubsResp(t, crereq, cremsg) - e2SubsId := xappConn1.RecvSubsResp(t, cretrans) - - // Subs Delete - // Xapp: Send SubsDelReq - deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + // Subs Delete + // Xapp: Send SubsDelReq + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) // E2t: Receive 1st SubsDelReq e2termConn1.RecvSubsDelReq(t) @@ -1035,9 +1188,19 @@ func TestSubDelReqTwoRetriesNoRespInSubmgr(t *testing.T) { //----------------------------------------------------------------------------- func TestSubDelReqSubDelFailRespInSubmgr(t *testing.T) { - CaseBegin("TestSubReqSubDelFailRespInSubmgr start") + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 1}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 1}, + Counter{cSubDelReqFromXapp, 1}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelFailFromE2, 1}, + Counter{cSubDelRespToXapp, 1}, + }) + // Subs Create cretrans := xappConn1.SendSubsReq(t, nil, nil) crereq, cremsg := e2termConn1.RecvSubsReq(t) @@ -1061,6 +1224,8 @@ func TestSubDelReqSubDelFailRespInSubmgr(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -1111,6 +1276,20 @@ func TestSubDelReqSubDelFailRespInSubmgr(t *testing.T) { func TestSubReqAndSubDelOkSameAction(t *testing.T) { CaseBegin("TestSubReqAndSubDelOkSameAction") + // Init counter check + mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{ + Counter{cSubReqFromXapp, 2}, + Counter{cSubReqToE2, 1}, + Counter{cSubRespFromE2, 1}, + Counter{cSubRespToXapp, 2}, + Counter{cMergedSubscriptions, 1}, + Counter{cUnmergedSubscriptions, 1}, + Counter{cSubDelReqFromXapp, 2}, + Counter{cSubDelReqToE2, 1}, + Counter{cSubDelRespFromE2, 1}, + Counter{cSubDelRespToXapp, 2}, + }) + //Req1 rparams1 := &teststube2ap.E2StubSubsReqParams{} rparams1.Init() @@ -1130,7 +1309,7 @@ func TestSubReqAndSubDelOkSameAction(t *testing.T) { resp, _ := xapp.Subscription.QuerySubscriptions() assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId1)) assert.Equal(t, resp[0].Meid, "RAN_NAME_1") - assert.Equal(t, resp[0].Endpoint, []string{"localhost:13560", "localhost:13660"}) + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560", "localhost:13660"}) //Del1 deltrans1 := xappConn1.SendSubsDelReq(t, nil, e2SubsId1) @@ -1152,6 +1331,8 @@ func TestSubReqAndSubDelOkSameAction(t *testing.T) { xappConn2.TestMsgChanEmpty(t) e2termConn1.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) + + mainCtrl.VerifyCounterValues(t) } //----------------------------------------------------------------------------- @@ -1258,11 +1439,6 @@ func TestSubReqAndSubDelOkSameActionParallel(t *testing.T) { // | | | SubFail1 | // | | |<-------------| // | | | | -// | | | SubDelReq | -// | | |------------->| -// | | | SubDelResp | -// | | |<-------------| -// | | | | // | | SubFail1 | | // | |<-------------| | // | | | | @@ -1293,10 +1469,6 @@ func TestSubReqAndSubDelNokSameActionParallel(t *testing.T) { fparams1.Set(crereq1) e2termConn1.SendSubsFail(t, fparams1, cremsg1) - // E2t: internal delete - delreq, delmsg := e2termConn1.RecvSubsDelReq(t) - e2termConn1.SendSubsDelResp(t, delreq, delmsg) - //Fail1 e2SubsId1 := xappConn1.RecvSubsFail(t, cretrans1) //Fail2 @@ -1593,3 +1765,410 @@ func TestSubReqAndSubDelOkTwoE2termParallel(t *testing.T) { e2termConn2.TestMsgChanEmpty(t) mainCtrl.wait_registry_empty(t, 10) } + +//----------------------------------------------------------------------------- +// TestSubReqInsertAndSubDelOk +// +// stub stub +// +-------+ +---------+ +---------+ +// | xapp | | submgr | | e2term | +// +-------+ +---------+ +---------+ +// | | | +// | SubReq | | +// |------------->| | +// | | | +// | | SubReq | +// | |------------->| +// | | | +// | | SubResp | +// | |<-------------| +// | | | +// | SubResp | | +// |<-------------| | +// | | | +// | | | +// | SubDelReq | | +// |------------->| | +// | | | +// | | SubDelReq | +// | |------------->| +// | | | +// | | SubDelResp | +// | |<-------------| +// | | | +// | SubDelResp | | +// |<-------------| | +// +//----------------------------------------------------------------------------- +func TestSubReqInsertAndSubDelOk(t *testing.T) { + CaseBegin("TestInsertSubReqAndSubDelOk") + + rparams1 := &teststube2ap.E2StubSubsReqParams{} + rparams1.Init() + rparams1.Req.ActionSetups[0].ActionType = e2ap.E2AP_ActionTypeInsert + cretrans := xappConn1.SendSubsReq(t, rparams1, nil) + + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + xappConn1.RecvSubsDelResp(t, deltrans) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) +} + +//----------------------------------------------------------------------------- +// TestSubReqRetransmissionWithSameSubIdDiffXid +// +// This case simulates case where xApp restarts and starts sending same +// subscription requests which have already subscribed successfully + +// stub stub +// +-------+ +---------+ +---------+ +// | xapp | | submgr | | e2term | +// +-------+ +---------+ +---------+ +// | | | +// | SubReq | | +// |------------->| | +// | | | +// | | SubReq | +// | |------------->| +// | | | +// | | SubResp | +// | |<-------------| +// | | | +// | SubResp | | +// |<-------------| | +// | | | +// | xApp restart | | +// | | | +// | SubReq | | +// | (retrans with same xApp generated subid but diff xid) +// |------------->| | +// | | | +// | SubResp | | +// |<-------------| | +// | | | +// | [SUBS DELETE] | +// | | | +// +//----------------------------------------------------------------------------- +func TestSubReqRetransmissionWithSameSubIdDiffXid(t *testing.T) { + CaseBegin("TestSubReqRetransmissionWithSameSubIdDiffXid") + + //Subs Create + cretrans := xappConn1.SendSubsReq(t, nil, nil) + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) + + // xApp restart here + // --> artificial delay + <-time.After(1 * time.Second) + + //Subs Create + cretrans = xappConn1.SendSubsReq(t, nil, nil) //Retransmitted SubReq + e2SubsId = xappConn1.RecvSubsResp(t, cretrans) + + //Subs Delete + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + xappConn1.RecvSubsDelResp(t, deltrans) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) +} + +//----------------------------------------------------------------------------- +// TestSubReqNokAndSubDelOkWithRestartInMiddle +// +// stub stub +// +-------+ +---------+ +---------+ +// | xapp | | submgr | | e2term | +// +-------+ +---------+ +---------+ +// | | | +// | SubReq | | +// |------------->| | +// | | | +// | | SubReq | +// | |------------->| +// | | | +// | | SubResp | +// | <----| +// | | +// | Submgr restart | +// | | +// | | | +// | | SubDelReq | +// | |------------->| +// | | | +// | | SubDelResp | +// | |<-------------| +// | | | +// +//----------------------------------------------------------------------------- + +func TestSubReqNokAndSubDelOkWithRestartInMiddle(t *testing.T) { + CaseBegin("TestSubReqNokAndSubDelOkWithRestartInMiddle") + + // Remove possible existing subscrition + mainCtrl.removeExistingSubscriptions(t) + + mainCtrl.SetResetTestFlag(t, true) // subs.DoNotWaitSubResp will be set TRUE for the subscription + xappConn1.SendSubsReq(t, nil, nil) + e2termConn1.RecvSubsReq(t) + mainCtrl.SetResetTestFlag(t, false) + + resp, _ := xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) + e2SubsId := uint32(resp[0].SubscriptionID) + t.Logf("e2SubsId = %v", e2SubsId) + + mainCtrl.SimulateRestart(t) // This will trigger sending of SubDelReq + + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + + // Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) +} + +//----------------------------------------------------------------------------- +// TestSubReqAndSubDelOkWithRestartInMiddle +// +// stub stub +// +-------+ +---------+ +---------+ +// | xapp | | submgr | | e2term | +// +-------+ +---------+ +---------+ +// | | | +// | SubReq | | +// |------------->| | +// | | | +// | | SubReq | +// | |------------->| +// | | | +// | | SubResp | +// | |<-------------| +// | | | +// | SubResp | | +// |<-------------| | +// | | | +// | | +// | Submgr restart | +// | | +// | SubDelReq | | +// |------------->| | +// | | | +// | | SubDelReq | +// | |------------->| +// | | | +// | | SubDelResp | +// | |<-------------| +// | | | +// | SubDelResp | | +// |<-------------| | +// +//----------------------------------------------------------------------------- + +func TestSubReqAndSubDelOkWithRestartInMiddle(t *testing.T) { + CaseBegin("TestSubReqAndSubDelOkWithRestartInMiddle") + + cretrans := xappConn1.SendSubsReq(t, nil, nil) + crereq, cremsg := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq, cremsg) + e2SubsId := xappConn1.RecvSubsResp(t, cretrans) + + // Check subscription + resp, _ := xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) + + mainCtrl.SimulateRestart(t) + + // Check that subscription is restored correctly after restart + resp, _ = xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560"}) + + deltrans := xappConn1.SendSubsDelReq(t, nil, e2SubsId) + delreq, delmsg := e2termConn1.RecvSubsDelReq(t) + e2termConn1.SendSubsDelResp(t, delreq, delmsg) + xappConn1.RecvSubsDelResp(t, deltrans) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) +} + +//----------------------------------------------------------------------------- +// TestSubReqAndSubDelOkSameActionWithRestartsInMiddle +// +// stub stub +// +-------+ +-------+ +---------+ +---------+ +// | xapp2 | | xapp1 | | submgr | | e2term | +// +-------+ +-------+ +---------+ +---------+ +// | | | | +// | | | | +// | | | | +// | | SubReq1 | | +// | |------------->| | +// | | | | +// | | | SubReq1 | +// | | |------------->| +// | | | SubResp1 | +// | | |<-------------| +// | | SubResp1 | | +// | |<-------------| | +// | | | | +// | | +// | submgr restart | +// | | +// | | | | +// | | | | +// | SubReq2 | | +// |--------------------------->| | +// | | | | +// | SubResp2 | | +// |<---------------------------| | +// | | | | +// | | SubDelReq 1 | | +// | |------------->| | +// | | | | +// | | SubDelResp 1 | | +// | |<-------------| | +// | | | | +// | | | | +// | | +// | submgr restart | +// | | +// | | | | +// | SubDelReq 2 | | +// |--------------------------->| | +// | | | | +// | | | SubDelReq 2 | +// | | |------------->| +// | | | | +// | | | SubDelReq 2 | +// | | |------------->| +// | | | | +// | SubDelResp 2 | | +// |<---------------------------| | +// +//----------------------------------------------------------------------------- + +func TestSubReqAndSubDelOkSameActionWithRestartsInMiddle(t *testing.T) { + CaseBegin("TestSubReqAndSubDelOkSameActionWithRestartsInMiddle") + + //Req1 + rparams1 := &teststube2ap.E2StubSubsReqParams{} + rparams1.Init() + cretrans1 := xappConn1.SendSubsReq(t, rparams1, nil) + crereq1, cremsg1 := e2termConn1.RecvSubsReq(t) + e2termConn1.SendSubsResp(t, crereq1, cremsg1) + e2SubsId1 := xappConn1.RecvSubsResp(t, cretrans1) + + //Req2 + rparams2 := &teststube2ap.E2StubSubsReqParams{} + rparams2.Init() + cretrans2 := xappConn2.SendSubsReq(t, rparams2, nil) + e2SubsId2 := xappConn2.RecvSubsResp(t, cretrans2) + + // Check subscription + resp, _ := xapp.Subscription.QuerySubscriptions() //////////////////////////////// + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId1)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560", "localhost:13660"}) + + mainCtrl.SimulateRestart(t) + + // Check that subscription is restored correctly after restart + resp, _ = xapp.Subscription.QuerySubscriptions() + assert.Equal(t, resp[0].SubscriptionID, int64(e2SubsId1)) + assert.Equal(t, resp[0].Meid, "RAN_NAME_1") + assert.Equal(t, resp[0].ClientEndpoint, []string{"localhost:13560", "localhost:13660"}) + + //Del1 + deltrans1 := xappConn1.SendSubsDelReq(t, nil, e2SubsId1) + xapp.Logger.Debug("xappConn1.RecvSubsDelResp") + xappConn1.RecvSubsDelResp(t, deltrans1) + xapp.Logger.Debug("xappConn1.RecvSubsDelResp received") + + mainCtrl.SimulateRestart(t) + xapp.Logger.Debug("mainCtrl.SimulateRestart done") + + //Del2 + deltrans2 := xappConn2.SendSubsDelReq(t, nil, e2SubsId2) + delreq2, delmsg2 := e2termConn1.RecvSubsDelReq(t) + + e2termConn1.SendSubsDelResp(t, delreq2, delmsg2) + xappConn2.RecvSubsDelResp(t, deltrans2) + + //Wait that subs is cleaned + mainCtrl.wait_subs_clean(t, e2SubsId2, 10) + + xappConn1.TestMsgChanEmpty(t) + xappConn2.TestMsgChanEmpty(t) + e2termConn1.TestMsgChanEmpty(t) + mainCtrl.wait_registry_empty(t, 10) +} + +//----------------------------------------------------------------------------- +// Test debug GET and POST requests +// +// curl +// +-------+ +---------+ +// | user | | submgr | +// +-------+ +---------+ +// | | +// | GET/POST Req | +// |------------->| +// | Resp | +// |<-------------| +// | | + +func TestGetSubscriptions(t *testing.T) { + + mainCtrl.sendGetRequest(t, "localhost:8088", "/ric/v1/subscriptions") +} + +func TestGetSymptomData(t *testing.T) { + + mainCtrl.sendGetRequest(t, "localhost:8080", "/ric/v1/symptomdata") +} + +func TestPostdeleteSubId(t *testing.T) { + + mainCtrl.sendPostRequest(t, "localhost:8080", "/ric/v1/test/deletesubid=1") +} + +func TestPostEmptyDb(t *testing.T) { + + mainCtrl.sendPostRequest(t, "localhost:8080", "/ric/v1/test/emptydb") +}