+//-----------------------------------------------------------------------------
+// TestRESTSubDelReqAndRouteDeleteNok
+//
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | rtmgr | | e2term |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | | | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | SubReq | |
+// | |---------------------------->|
+// | | SubResp | |
+// | |<----------------------------|
+// | RESTNotif | | |
+// |<----------------| | |
+// | | | |
+// | | | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | RESTSubDelResp | | |
+// |<----------------| | |
+// | | SubSelReq | |
+// | |---------------------------->|
+// | | SubSelResp | |
+// | |<----------------------------|
+// | | RouteDelete | |
+// | |------------->| |
+// | | Routedelete | |
+// | | status:400 | |
+// | |(Bad request) | |
+// | |<-------------| |
+//
+//-----------------------------------------------------------------------------
+
+func TestRESTSubDelReqAndRouteDeleteNok(t *testing.T) {
+
+ // Init counter check
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 1},
+ Counter{cRestSubRespToXapp, 1},
+ Counter{cSubReqToE2, 1},
+ Counter{cSubRespFromE2, 1},
+ Counter{cRestSubNotifToXapp, 1},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cRouteDeleteFail, 1},
+ Counter{cSubDelReqToE2, 1},
+ Counter{cSubDelRespFromE2, 1},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+
+ var params *teststube2ap.RESTSubsReqParams = nil
+
+ //Subs Create
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13560"})
+
+ waiter := rtmgrHttp.AllocNextEvent(false)
+ xappConn1.SendRESTSubsDelReq(t, &restSubId)
+ delreq, delmsg := e2termConn1.RecvSubsDelReq(t)
+ e2termConn1.SendSubsDelResp(t, delreq, delmsg)
+ waiter.WaitResult(t)
+
+ waitSubsCleanup(t, e2SubsId, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// TestRESTSubMergeDelAndRouteUpdateNok
+//
+// stub stub stub stub
+// +-------+ +-------+ +---------+ +---------+ +---------+
+// | xapp1 | | xapp2 | | submgr | | rtmgr | | e2term |
+// +-------+ +-------+ +---------+ +---------+ +---------+
+// | | | | |
+// | RESTSubReq1 | | |
+// |------------------------>| | |
+// | RESTSubResp2 | | |
+// |<------------------------| | |
+// | | | | |
+// | | | RouteCreate | |
+// | | |------------->| |
+// | | | CreateResp | |
+// | | |<-------------| |
+// | | | SubReq | |
+// | | |---------------------------->|
+// | | | SubResp | |
+// | | |<----------------------------|
+// | RESTNotif1 | | |
+// |<------------------------| | |
+// | | | | |
+// | | RESTSubReq2 | | |
+// | |------------>| | |
+// | | RESTSubResp2| | |
+// | |<------------| | |
+// | | | RouteCreate | |
+// | | |------------->| |
+// | | | CreateResp | |
+// | | |<-------------| |
+// | | | SubReq | |
+// | | |---------------------------->|
+// | | | SubResp | |
+// | | |<----------------------------|
+// | | RESTNotif2 | | |
+// | |<------------| | |
+// | | | | |
+// | [SUBS INT DELETE] | |
+// | | | | |
+// | RESTSubDelReq1 | | |
+// |------------------------>| | |
+// | RESTSubDelResp1 | | |
+// |<------------------------| | |
+// | | | SubDelReq | |
+// | | |---------------------------->|
+// | | | SubDelResp | |
+// | | |<----------------------------|
+// | | | RouteUpdate | |
+// | | |------------->| |
+// | | | RouteUpdate | |
+// | | | status:400 | |
+// | | |(Bad request) | |
+// | | |<-------------| |
+// | | | | |
+// | | RESTSubDelReq2 | |
+// | |------------>| | |
+// | | RESTSubDelResp2 | |
+// | |<------------| | |
+// | | | SubDelReq | |
+// | | |---------------------------->|
+// | | | SubdelResp | |
+// | | |<----------------------------|
+// | | | RouteDelete | |
+// | | |------------->| |
+// | | | Deleteresp | |
+// | | |<-------------| |
+
+//-----------------------------------------------------------------------------
+
+func TestRESTSubMergeDelAndRouteUpdateNok(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 2},
+ Counter{cMergedSubscriptions, 1},
+ Counter{cRestSubRespToXapp, 2},
+ Counter{cSubReqToE2, 1},
+ Counter{cSubRespFromE2, 1},
+ Counter{cRestSubNotifToXapp, 2},
+ Counter{cRestSubDelReqFromXapp, 2},
+ Counter{cRouteDeleteUpdateFail, 1},
+ Counter{cSubDelReqToE2, 1},
+ Counter{cSubDelRespFromE2, 1},
+ Counter{cRestSubDelRespToXapp, 2},
+ Counter{cUnmergedSubscriptions, 1},
+ })
+
+ var params *teststube2ap.RESTSubsReqParams = nil
+
+ //Subs Create
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13560"})
+ restSubId2, e2SubsId2 := createXapp2MergedSubscription(t, "RAN_NAME_1")
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13560", "localhost:13660"})
+
+ //Del1, this shall fail on rtmgr side
+ waiter := rtmgrHttp.AllocNextEvent(false)
+ xappConn1.SendRESTSubsDelReq(t, &restSubId)
+ waiter.WaitResult(t)
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13660"})
+
+ //Del2
+ deleteXapp2Subscription(t, &restSubId2)
+
+ waitSubsCleanup(t, e2SubsId2, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// TestRESTSubReqRetransmission
+//
+// stub stub
+// +-------+ +---------+ +---------+
+// | xapp | | submgr | | e2term |
+// +-------+ +---------+ +---------+
+// | | |
+// | RESTSubReq1 | |
+// |---------------->| |
+// | | |
+// | RESTSubResp | |
+// |<----------------| |
+// | | SubReq1 |
+// | |------------->|
+// | | |
+// | RESTSubReq2 | |
+// | (retrans) | |
+// |---------------->| |
+// | RESTSubResp(201)| |
+// |<----------------| |
+// | | |
+// | | SubResp1 |
+// | |<-------------|
+// | RESTNotif1 | |
+// |<----------------| |
+// | | |
+// | [SUBS DELETE] |
+// | | |
+//
+//-----------------------------------------------------------------------------
+
+func TestRESTSubReqRetransmission(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 2},
+ Counter{cRestSubRespToXapp, 2},
+ Counter{cSubReqToE2, 1},
+ Counter{cSubRespFromE2, 1},
+ Counter{cRestSubNotifToXapp, 1},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cSubDelReqToE2, 1},
+ Counter{cSubDelRespFromE2, 1},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+ // Retry/duplicate will get the same way as the first request.
+ // Contianed duplicate messages from same xapp will not be merged. Here we use xappConn2 to simulate sending
+ // second request from same xapp as doing it from xappConn1 would not work as notification would not be received
+
+ // Subs Create
+ const subReqCount int = 1
+
+ params := xappConn1.GetRESTSubsReqReportParams(subReqCount)
+ restSubId := xappConn1.SendRESTSubsReq(t, params)
+
+ xappConn1.SendRESTSubsReq(t, params)
+ <-time.After(time.Second * 1)
+
+ xappConn1.WaitListedRestNotifications(t, []string{restSubId})
+
+ // Depending one goroutine scheduling order, we cannot say for sure which xapp reaches e2term first. Thus
+ // the order is not significant here.
+ crereq, cremsg := e2termConn1.RecvSubsReq(t)
+ e2termConn1.SendSubsResp(t, crereq, cremsg)
+
+ e2SubsId := <-xappConn1.ListedRESTNotifications
+
+ xapp.Logger.Debug("TEST: XAPP notification received e2SubsId=%v", e2SubsId)
+
+ // Del1
+ xappConn1.SendRESTSubsDelReq(t, &restSubId)
+ delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t)
+ e2termConn1.SendSubsDelResp(t, delreq1, delmsg1)
+
+ mainCtrl.wait_multi_subs_clean(t, []uint32{e2SubsId.E2SubsId}, 10)
+
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | e2term | | rtmgr |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------| // The order of these events may vary
+// | | SubReq | |
+// | |------------->| | // The order of these events may vary
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [RETRANS1] | | |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [RETRANS2] | | |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | | SubDelReq | |
+// | |------------->| |
+// | RESTSubDelResp| | |
+// |<----------------| | |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | | |
+//
+//-----------------------------------------------------------------------------
+
+func TestRESTSubReqRetransmissionV2(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 3},
+ Counter{cDuplicateE2SubReq, 2},
+ Counter{cRestSubRespToXapp, 3},
+ Counter{cSubReqToE2, 1},
+ Counter{cSubRespFromE2, 1},
+ Counter{cRestSubNotifToXapp, 3},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cSubDelReqToE2, 1},
+ Counter{cSubDelRespFromE2, 1},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+
+ params := xappConn1.GetRESTSubsReqReportParams(subReqCount)
+
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13560"})
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ //1.st resend
+ restSubId_resend := xappConn1.SendRESTSubsReq(t, params)
+
+ assert.Equal(t, restSubId_resend, restSubId)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ //2.nd resend
+ restSubId_resend2 := xappConn1.SendRESTSubsReq(t, params)
+
+ assert.Equal(t, restSubId_resend2, restSubId)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ deleteSubscription(t, xappConn1, e2termConn1, &restSubId)
+
+ waitSubsCleanup(t, e2SubsId, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | e2term | | rtmgr |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------| // The order of these events may vary
+// | | SubReq | |
+// | |------------->| | // The order of these events may vary
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [RETRANS, with RESTsubsId] | |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [RETRANS, without RESTsubsId] | |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | | SubDelReq | |
+// | |------------->| |
+// | RESTSubDelResp| | |
+// |<----------------| | |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | | |
+//
+//-----------------------------------------------------------------------------
+func TestRESTSubReqRetransmissionV3(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 3},
+ Counter{cDuplicateE2SubReq, 2},
+ Counter{cRestSubRespToXapp, 3},
+ Counter{cSubReqToE2, 1},
+ Counter{cSubRespFromE2, 1},
+ Counter{cRestSubNotifToXapp, 3},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cSubDelReqToE2, 1},
+ Counter{cSubDelRespFromE2, 1},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+
+ params := xappConn1.GetRESTSubsReqReportParams(subReqCount)
+
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ queryXappSubscription(t, int64(e2SubsId), "RAN_NAME_1", []string{"localhost:13560"})
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ //1.st resend with subscription ID
+ params.SetSubscriptionID(&restSubId)
+ restSubId_resend := xappConn1.SendRESTSubsReq(t, params)
+
+ assert.Equal(t, restSubId_resend, restSubId)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ //2.nd resend without subscription ID (faking app restart)
+ params = xappConn1.GetRESTSubsReqReportParams(subReqCount)
+ restSubId_resend2 := xappConn1.SendRESTSubsReq(t, params)
+
+ assert.Equal(t, restSubId_resend2, restSubId)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ deleteSubscription(t, xappConn1, e2termConn1, &restSubId)
+
+ waitSubsCleanup(t, e2SubsId, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | e2term | | rtmgr |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [with RestSUbsId + one additional e2 subDetail]
+// |---------------->| | |
+// | RESTNotif1 | | |
+// | [for initial e2 subDetail] | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [with RESTsubsId initial request] |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | RESTSubDelResp| | |
+// |<----------------| | |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | | |
+//
+//-----------------------------------------------------------------------------
+
+func TestRESTSubReqRetransmissionV4(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 3},
+ Counter{cDuplicateE2SubReq, 2},
+ Counter{cRestSubRespToXapp, 3},
+ Counter{cSubReqToE2, 2},
+ Counter{cSubRespFromE2, 2},
+ Counter{cRestSubNotifToXapp, 4},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cSubDelReqToE2, 2},
+ Counter{cSubDelRespFromE2, 2},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+
+ params := xappConn1.GetRESTSubsReqReportParams(subReqCount)
+
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ // Send modified requst, this time with e2 subscriptions.
+ params2 := xappConn1.GetRESTSubsReqReportParams(subReqCount + 1)
+ params2.SetSubscriptionID(&restSubId)
+
+ xapp.Subscription.SetResponseCB(xappConn1.SubscriptionRespHandler)
+ xappConn1.ExpectAnyNotification(t)
+ // Resend the original request with an additional e2 subscription (detail), this time with restsubsid
+ restSubId_resend := xappConn1.SendRESTSubsReq(t, params2)
+ e2SubsId1 := xappConn1.WaitAnyRESTNotification(t)
+ assert.Equal(t, e2SubsId, e2SubsId1)
+
+ crereq2, cremsg2 := e2termConn1.RecvSubsReq(t)
+
+ xappConn1.DecrementRequestCount()
+ xappConn1.ExpectRESTNotification(t, restSubId_resend)
+ e2termConn1.SendSubsResp(t, crereq2, cremsg2)
+ e2SubsId2 := xappConn1.WaitRESTNotification(t, restSubId_resend)
+ assert.NotEqual(t, e2SubsId2, 0)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ xapp.Subscription.SetResponseCB(xappConn1.SubscriptionRespHandler)
+ params = xappConn1.GetRESTSubsReqReportParams(subReqCount)
+ params.SetSubscriptionID(&restSubId)
+ xappConn1.ExpectAnyNotification(t)
+ // Resend the original request again with only one e2 subscription (detail), this time with restsubsid
+ restSubId_resend2 := xappConn1.SendRESTSubsReq(t, params)
+ assert.Equal(t, restSubId_resend, restSubId_resend2)
+
+ e2SubsId1 = xappConn1.WaitAnyRESTNotification(t)
+ assert.Equal(t, e2SubsId, e2SubsId1)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ // Delete both e2 subscriptions
+ xappConn1.SendRESTSubsDelReq(t, &restSubId)
+ e2SubsIds := []uint32{e2SubsId, e2SubsId2}
+ sendAndReceiveMultipleE2DelReqs(t, e2SubsIds, e2termConn1)
+
+ waitSubsCleanup(t, e2SubsId, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | e2term | | rtmgr |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [with RestSUbsId + one additional e2 subDetail]
+// |---------------->| | |
+// | RESTNotif1 | | |
+// | [for initial e2 subDetail] | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [without RESTsubsId initial request] |
+// |---------------->| | |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | RESTSubDelResp| | |
+// |<----------------| | |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | | |
+//
+//-----------------------------------------------------------------------------
+
+func TestRESTSubReqRetransmissionV5(t *testing.T) {
+
+ mainCtrl.CounterValuesToBeVeriefied(t, CountersToBeAdded{
+ Counter{cRestSubReqFromXapp, 3},
+ Counter{cDuplicateE2SubReq, 2},
+ Counter{cRestSubRespToXapp, 3},
+ Counter{cSubReqToE2, 2},
+ Counter{cSubRespFromE2, 2},
+ Counter{cRestSubNotifToXapp, 4},
+ Counter{cRestSubDelReqFromXapp, 1},
+ Counter{cSubDelReqToE2, 2},
+ Counter{cSubDelRespFromE2, 2},
+ Counter{cRestSubDelRespToXapp, 1},
+ })
+
+ params := xappConn1.GetRESTSubsReqReportParams(subReqCount)
+
+ restSubId, e2SubsId := createSubscription(t, xappConn1, e2termConn1, params)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ // Send modified request, this time with e2 subscriptions.
+ params2 := xappConn1.GetRESTSubsReqReportParams(subReqCount + 1)
+ params2.SetSubscriptionID(&restSubId)
+
+ xapp.Subscription.SetResponseCB(xappConn1.SubscriptionRespHandler)
+ xappConn1.ExpectAnyNotification(t)
+ // Resend the original request with an additional e2 subscription (detail), this time with restsubsid
+ restSubId_resend := xappConn1.SendRESTSubsReq(t, params2)
+
+ e2SubsId1 := xappConn1.WaitAnyRESTNotification(t)
+ assert.Equal(t, e2SubsId, e2SubsId1)
+ // The first E2 subscription returns immediately, manually decrement expected request count for the remaining request handling
+ xappConn1.DecrementRequestCount()
+
+ crereq2, cremsg2 := e2termConn1.RecvSubsReq(t)
+
+ xappConn1.ExpectRESTNotification(t, restSubId_resend)
+ e2termConn1.SendSubsResp(t, crereq2, cremsg2)
+ e2SubsId2 := xappConn1.WaitRESTNotification(t, restSubId_resend)
+ assert.NotEqual(t, e2SubsId2, 0)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ xapp.Subscription.SetResponseCB(xappConn1.SubscriptionRespHandler)
+ params = xappConn1.GetRESTSubsReqReportParams(subReqCount)
+ xappConn1.ExpectAnyNotification(t)
+ // Resend the original request again with only one e2 subscription (detail), WITHOUT restsubsid
+ // md5sum shall find the original request
+ restSubId_resend2 := xappConn1.SendRESTSubsReq(t, params)
+ assert.Equal(t, restSubId_resend, restSubId_resend2)
+
+ e2SubsId1 = xappConn1.WaitAnyRESTNotification(t)
+ assert.Equal(t, e2SubsId, e2SubsId1)
+
+ mainCtrl.WaitOngoingRequestMapEmpty()
+
+ // Delete both e2 subscriptions
+ xappConn1.SendRESTSubsDelReq(t, &restSubId)
+ e2SubsIds := []uint32{e2SubsId, e2SubsId2}
+ sendAndReceiveMultipleE2DelReqs(t, e2SubsIds, e2termConn1)
+
+ waitSubsCleanup(t, e2SubsId, 10)
+ mainCtrl.VerifyCounterValues(t)
+ mainCtrl.VerifyAllClean(t)
+}
+
+//-----------------------------------------------------------------------------
+// stub stub stub
+// +-------+ +---------+ +---------+ +---------+
+// | xapp | | submgr | | e2term | | rtmgr |
+// +-------+ +---------+ +---------+ +---------+
+// | | | |
+// | RESTSubReq | | |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubReq | | |
+// | [with RestSUbsId + one additional e2 subDetail]
+// |---------------->| | |
+// | RESTNotif1 | | |
+// | [for initial e2 subDetail] | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | RESTSubDelReq | | |
+// |---------------->| | |
+// | RESTSubDelResp| | |
+// |<----------------| | |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | | SubDelReq | |
+// | |------------->| |
+// | | SubDelResp | |
+// | |<-------------| |
+// | RESTSubReq | | |
+// | [with RESTsubsId initial request] |
+// |---------------->| | |
+// | RESTSubResp | | |
+// |<----------------| | |
+// | | RouteCreate | |
+// | |--------------------------->|
+// | | RouteResponse| |
+// | |<---------------------------|
+// | | SubReq | |
+// | |------------->| |
+// | | SubResp | |
+// | |<-------------| |
+// | RESTNotif1 | | |
+// |<----------------| | |
+// | | | |
+//
+//-----------------------------------------------------------------------------
+func TestRESTSubReqRetransmissionV6(t *testing.T) {