Xapp-frame updated to v0.8.1.
[ric-plt/submgr.git] / pkg / control / ut_messaging_test.go
index 548950a..ff07a91 100644 (file)
 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,376 @@ 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)
+}