X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fut_messaging_test.go;h=5b5112616cb7e68ddff010308060d0b23203f766;hb=refs%2Fchanges%2F00%2F5500%2F1;hp=36e4f29e668289cc76ce17891167bdbb05d7ea71;hpb=f0d95262aba5c1d3770bd173d8ce054334b8a162;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/ut_messaging_test.go b/pkg/control/ut_messaging_test.go index 36e4f29..5b51126 100644 --- a/pkg/control/ut_messaging_test.go +++ b/pkg/control/ut_messaging_test.go @@ -731,164 +731,6 @@ func TestSubReqSubFailRespInSubmgr(t *testing.T) { mainCtrl.wait_registry_empty(t, 10) } -//----------------------------------------------------------------------------- -// TestSubReqSubFailRespInSubmgrWithDuplicate -// -// stub stub -// +-------+ +---------+ +---------+ -// | xapp | | submgr | | e2term | -// +-------+ +---------+ +---------+ -// | | | -// | SubReq | | -// |------------->| | -// | | | -// | | SubReq | -// | |------------->| -// | | | -// | | SubFail | -// | |<-------------| -// | | | -// | | SubDelReq | -// | |------------->| -// | | | -// | | SubDelResp | -// | |<-------------| -// | | | -// | | SubReq | -// | |------------->| -// | | | -// | | SubResp | -// | |<-------------| -// | | | -// | SubResp | | -// |<-------------| | -// | | | -// | [SUBS DELETE] | -// | | | -// -//----------------------------------------------------------------------------- - -func TestSubReqSubFailRespInSubmgrWithDuplicate(t *testing.T) { - - CaseBegin("TestSubReqSubFailRespInSubmgrWithDuplicate 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) - 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 // @@ -1653,3 +1495,316 @@ func TestSubReqInsertAndSubDelOk(t *testing.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].Endpoint, []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].Endpoint, []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].Endpoint, []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].Endpoint, []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].Endpoint, []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) +}