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"
)
//-----------------------------------------------------------------------------
//
// stub stub
// +-------+ +---------+ +---------+
-// | xapp | | submgr | | rtmgr |
+// | xapp | | submgr | | rtmgr |
// +-------+ +---------+ +---------+
// | | |
// | SubReq | |
func TestSubReqAndRouteNok(t *testing.T) {
CaseBegin("TestSubReqAndRouteNok")
+ // Init counter check
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cRouteCreateFail, 1)
+ mainCtrl.GetCounterValuesBefore(t)
+
waiter := rtmgrHttp.AllocNextEvent(false)
newSubsId := mainCtrl.get_registry_next_subid(t)
xappConn1.SendSubsReq(t, nil, nil)
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.SetTimesCounterWillBeAdded(cSubReqFromXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cRouteCreateUpdateFail, 1)
+
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
+
+ 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].Endpoint, []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.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 1)
+
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cRouteDeleteFail, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
+
+ 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].Endpoint, []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.SetTimesCounterWillBeAdded(cSubReqFromXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 2)
+
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cRouteDeleteUpdateFail, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 2)
+ mainCtrl.GetCounterValuesBefore(t)
+
+ //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].Endpoint, []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
//
func TestSubReqAndSubDelOk(t *testing.T) {
CaseBegin("TestSubReqAndSubDelOk")
- cretrans := xappConn1.SendSubsReq(t, nil, nil)
+ // Init counter check
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 1)
+
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
+ cretrans := xappConn1.SendSubsReq(t, nil, nil)
crereq, cremsg := e2termConn1.RecvSubsReq(t)
e2termConn1.SendSubsResp(t, crereq, cremsg)
e2SubsId := xappConn1.RecvSubsResp(t, cretrans)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
func TestSubReqRetryInSubmgr(t *testing.T) {
CaseBegin("TestSubReqRetryInSubmgr start")
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
// Xapp: Send SubsReq
cretrans := xappConn1.SendSubsReq(t, nil, nil)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
// | | SubDelReq |
// | |------------->|
// | | |
-// | | |
-// | | SubDelReq |
-// | |------------->|
-// | | |
-// | | |
// | | SubDelResp |
// | |<-------------|
// | | |
func TestSubReqRetryNoRespSubDelRespInSubmgr(t *testing.T) {
CaseBegin("TestSubReqTwoRetriesNoRespSubDelRespInSubmgr start")
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqTimerExpiry, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.GetCounterValuesBefore(t)
// Xapp: Send SubsReq
xappConn1.SendSubsReq(t, nil, nil)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
func TestSubReqTwoRetriesNoRespAtAllInSubmgr(t *testing.T) {
CaseBegin("TestSubReqTwoRetriesNoRespAtAllInSubmgr start")
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqTimerExpiry, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqTimerExpiry, 2)
+ mainCtrl.GetCounterValuesBefore(t)
// Xapp: Send SubsReq
xappConn1.SendSubsReq(t, nil, nil)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
func TestSubReqSubFailRespInSubmgr(t *testing.T) {
CaseBegin("TestSubReqSubFailRespInSubmgr start")
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubFailFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubFailToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
// Xapp: Send SubsReq
cretrans := xappConn1.SendSubsReq(t, nil, nil)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
func TestSubDelReqSubDelFailRespInSubmgr(t *testing.T) {
CaseBegin("TestSubReqSubDelFailRespInSubmgr start")
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelFailFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 1)
+ mainCtrl.GetCounterValuesBefore(t)
// Subs Create
cretrans := xappConn1.SendSubsReq(t, nil, nil)
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------
func TestSubReqAndSubDelOkSameAction(t *testing.T) {
CaseBegin("TestSubReqAndSubDelOkSameAction")
+ // Init counter check
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqFromXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubRespToXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cMergedSubscriptions, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cUnmergedSubscriptions, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqFromXapp, 2)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelReqToE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespFromE2, 1)
+ mainCtrl.SetTimesCounterWillBeAdded(cSubDelRespToXapp, 2)
+ mainCtrl.GetCounterValuesBefore(t)
+
//Req1
rparams1 := &teststube2ap.E2StubSubsReqParams{}
rparams1.Init()
xappConn2.TestMsgChanEmpty(t)
e2termConn1.TestMsgChanEmpty(t)
mainCtrl.wait_registry_empty(t, 10)
+
+ mainCtrl.VerifyCounterValues(t)
}
//-----------------------------------------------------------------------------