Add support for Insert type subscriptions

Signed-off-by: Anssi Mannila <anssi.mannila@nokia.com>
Change-Id: Ie629ddc4c01ff4394a0f322f48108b02ed94075d
diff --git a/pkg/control/registry.go b/pkg/control/registry.go
index 275d572..9e4eaaa 100644
--- a/pkg/control/registry.go
+++ b/pkg/control/registry.go
@@ -196,6 +196,7 @@
 func (r *Registry) CheckActionTypes(subReqMsg *e2ap.E2APSubscriptionRequest) (uint64, error) {
 	var reportFound bool = false
 	var policyFound bool = false
+	var insertFound bool = false
 
 	for _, acts := range subReqMsg.ActionSetups {
 		if acts.ActionType == e2ap.E2AP_ActionTypeReport {
@@ -204,9 +205,12 @@
 		if acts.ActionType == e2ap.E2AP_ActionTypePolicy {
 			policyFound = true
 		}
+		if acts.ActionType == e2ap.E2AP_ActionTypeInsert {
+			insertFound = true
+		}
 	}
-	if reportFound == true && policyFound == true {
-		return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Report and Policy in same RICactions-ToBeSetup-List")
+	if reportFound == true && policyFound == true || reportFound == true && insertFound == true || policyFound == true && insertFound == true {
+		return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Different action types (Report, Policy or Insert) in same RICactions-ToBeSetup-List")
 	}
 	if reportFound == true {
 		return e2ap.E2AP_ActionTypeReport, nil
@@ -214,6 +218,9 @@
 	if policyFound == true {
 		return e2ap.E2AP_ActionTypePolicy, nil
 	}
+	if insertFound == true {
+		return e2ap.E2AP_ActionTypeInsert, nil
+	}
 	return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Invalid action type in RICactions-ToBeSetup-List")
 }
 
diff --git a/pkg/control/ut_messaging_test.go b/pkg/control/ut_messaging_test.go
index 548950a..36e4f29 100644
--- a/pkg/control/ut_messaging_test.go
+++ b/pkg/control/ut_messaging_test.go
@@ -1593,3 +1593,63 @@
 	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)
+}