MEID tableupdated incrementally rather than full update 95/2195/2
authorwahidw <abdulwahid.w@nokia.com>
Sun, 12 Jan 2020 04:24:29 +0000 (04:24 +0000)
committerwahidw <abdulwahid.w@nokia.com>
Sun, 12 Jan 2020 07:35:47 +0000 (07:35 +0000)
Change-Id: I9c58deb0ed79ddb0a3692427248469794581361a
Signed-off-by: wahidw <abdulwahid.w@nokia.com>
RELNOTES
container-tag.yaml
pkg/nbi/httprestful.go
pkg/nbi/httprestful_test.go
pkg/nbi/types.go
pkg/rpe/rmr.go
pkg/rtmgr/types.go
pkg/sdl/file.go
pkg/sdl/sdl_test.go
pkg/sdl/types.go
tst/robot/Multiple_E2T_tests.txt [new file with mode: 0644]

index f0b7a43..9371ae0 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,3 +1,6 @@
+### v0.4.8
+* Entry in meid map will only contain the delta change 
+
 ### v0.4.7
 * Check DNS lookup for E2T address, RED Button and KEEP alive message routes added for new E2T Address 
 
index 449899c..7286906 100644 (file)
@@ -2,4 +2,4 @@
 # By default this file is in the docker build directory,
 # but the location can configured in the JJB template.
 ---
-tag: 0.4.7
+tag: 0.4.8
index 81384c0..1d5e1fa 100644 (file)
@@ -99,8 +99,9 @@ func recvXappCallbackData(dataChannel <-chan *models.XappCallbackData) (*[]rtmgr
        return nil, nil
 }
 
-func recvNewE2Tdata(dataChannel <-chan *models.E2tData) (*rtmgr.E2TInstance, error) {
+func recvNewE2Tdata(dataChannel <-chan *models.E2tData) (*rtmgr.E2TInstance,string,error) {
         var e2tData *models.E2tData
+       var str string
         xapp.Logger.Info("data received")
 
         e2tData = <-dataChannel
@@ -111,18 +112,24 @@ func recvNewE2Tdata(dataChannel <-chan *models.E2tData) (*rtmgr.E2TInstance, err
                                 Ranlist : make([]string, len(e2tData.RanNamelist)),
                        }
 
-            e2tinst.Fqdn = *e2tData.E2TAddress
-            e2tinst.Name = "E2TERMINST"
-                   copy(e2tinst.Ranlist, e2tData.RanNamelist)
-
-            return &e2tinst,nil
+        e2tinst.Fqdn = *e2tData.E2TAddress
+        e2tinst.Name = "E2TERMINST"
+       copy(e2tinst.Ranlist, e2tData.RanNamelist)
+       if (len(e2tData.RanNamelist) > 0) {
+           var meidar string
+           for _, meid := range e2tData.RanNamelist {
+               meidar += meid + " "
+           }
+           str = "mme_ar|" + *e2tData.E2TAddress + "|" + strings.TrimSuffix(meidar," ")
+       }
+        return &e2tinst,str,nil
 
         } else {
                 xapp.Logger.Info("No data")
         }
 
         xapp.Logger.Debug("Nothing received on the Http interface")
-        return nil, nil
+        return nil,str,nil
 }
 
 func validateXappCallbackData(callbackData *models.XappCallbackData) error {
@@ -552,10 +559,10 @@ func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, co
                 for {
                         xapp.Logger.Debug("received create New E2T data")
 
-                        data, _ := r.RecvNewE2Tdata(e2taddchan)
+                        data, meiddata,_ := r.RecvNewE2Tdata(e2taddchan)
                         if data != nil {
                                m.Lock()
-                                sdlEngine.WriteNewE2TInstance(fileName, data)
+                                sdlEngine.WriteNewE2TInstance(fileName, data,meiddata)
                                m.Unlock()
                                 triggerSBI <- true
                         }
index e1a3ae3..e0bfb28 100644 (file)
@@ -477,14 +477,14 @@ func TestE2TChannelwithData(t *testing.T) {
                E2TAddress: swag.String(""),
        }
        dataChannel := make(chan *models.E2tData, 10)
-       go func() { _, _ = recvNewE2Tdata(dataChannel) }()
+       go func() { _, _,_ = recvNewE2Tdata(dataChannel) }()
        defer close(dataChannel)
        dataChannel <- &data2
 }
 
 func TestE2TChannelwithNoData(t *testing.T) {
        dataChannel := make(chan *models.E2tData, 10)
-       go func() { _, _ = recvNewE2Tdata(dataChannel) }()
+       go func() { _, _ ,_= recvNewE2Tdata(dataChannel) }()
        defer close(dataChannel)
 }
 
index 085486c..1acf09c 100644 (file)
@@ -39,7 +39,7 @@ import (
 
 type FetchAllXAppsHandler func(string) (*[]rtmgr.XApp, error)
 type RecvXappCallbackDataHandler func(<-chan *models.XappCallbackData) (*[]rtmgr.XApp, error)
-type RecvNewE2TdataHandler func(<-chan *models.E2tData) (*rtmgr.E2TInstance, error)
+type RecvNewE2TdataHandler func(<-chan *models.E2tData) (*rtmgr.E2TInstance, string, error)
 type LaunchRestHandler func(*string, chan<- *models.XappCallbackData, chan<- *models.XappSubscriptionData, chan<- *models.XappSubscriptionData, chan<- *models.E2tData, chan<- models.RanE2tMap, chan<- models.RanE2tMap, chan<- *models.E2tDeleteData)
 type ProvideXappHandleHandlerImpl func(chan<- *models.XappCallbackData, *models.XappCallbackData) error
 type RetrieveStartupDataHandler func(string, string, string, string, sdl.Engine) error
index 80323a3..860c1eb 100644 (file)
@@ -34,7 +34,7 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "routing-manager/pkg/rtmgr"
        "strconv"
-       "strings"
+       //"strings"
 )
 
 type Rmr struct {
@@ -88,7 +88,7 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents,
        }
        rawrt = append(rawrt, key+"newrt|end\n")
         count := 0
-       meidrt := key +"meid_map|start\n"
+/*     meidrt := key +"meid_map|start\n"
        for e2tkey, value := range rcs.E2Ts {
                xapp.Logger.Debug("rmr.E2T Key: %v", e2tkey)
                xapp.Logger.Debug("rmr.E2T Value: %v", value)
@@ -101,6 +101,12 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents,
                xapp.Logger.Debug("rmr.E2T Empty RAN LIST for FQDN: %v", e2tkey)
                }
        }
+        meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n" */
+       meidrt := key +"meid_map|start\n"
+        for _, value := range rcs.MeidMap {
+            meidrt += key + value + "\n"
+            count++
+        }
         meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n"
 
        rawrt = append(rawrt, meidrt)
index 9378656..91a8aeb 100644 (file)
@@ -99,6 +99,7 @@ type ConfigRtmgr struct {
 type RicComponents struct {
        XApps []XApp
        E2Ts  map [string]E2TInstance
+       MeidMap  []string
        Pcs   PlatformComponents
 }
 
index 969f7bd..7ac6594 100644 (file)
@@ -34,6 +34,7 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "io/ioutil"
        "os"
+       "strings"
        "routing-manager/pkg/rtmgr"
        "routing-manager/pkg/models"
 )
@@ -112,7 +113,7 @@ func (f *File) WriteXApps(file string, xApps *[]rtmgr.XApp) error {
        return nil
 }
 
-func (f *File) WriteNewE2TInstance(file string, E2TInst *rtmgr.E2TInstance) error {
+func (f *File) WriteNewE2TInstance(file string, E2TInst *rtmgr.E2TInstance,meiddata string) error {
         xapp.Logger.Debug("Invoked sdl.WriteNewE2TInstance")
         xapp.Logger.Debug("file.WriteNewE2TInstance writes into file: " + file)
         xapp.Logger.Debug("file.WriteNewE2TInstance writes data: %v", *E2TInst)
@@ -123,6 +124,12 @@ func (f *File) WriteNewE2TInstance(file string, E2TInst *rtmgr.E2TInstance) erro
                 return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
         }
         ricData.E2Ts[E2TInst.Fqdn] = *E2TInst
+       if (len(meiddata) > 0){
+           ricData.MeidMap = []string {meiddata}
+        } else {
+           ricData.MeidMap = []string {}
+       }
+
 
         byteValue, err := json.Marshal(ricData)
         if err != nil {
@@ -145,8 +152,17 @@ func (f *File) WriteAssRANToE2TInstance(file string, rane2tmap models.RanE2tMap)
                 xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
                 return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
         }
+
+       ricData.MeidMap = []string{}
        for _, element := range rane2tmap {
                xapp.Logger.Info("data received")
+               var str,meidar string
+               for _, meid := range element.RanNamelist {
+                   meidar += meid + " "
+               }
+               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar," ")
+               ricData.MeidMap = append(ricData.MeidMap,str)
+
                for key, _ := range ricData.E2Ts {
                        if key == *element.E2TAddress {
                                var estObj rtmgr.E2TInstance
@@ -178,8 +194,18 @@ func (f *File) WriteDisAssRANFromE2TInstance(file string, disassranmap models.Ra
                 xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
                 return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
         }
+
+       var str,meiddel,meiddisdel string
+       ricData.MeidMap = []string{}
        for _, element := range disassranmap {
                xapp.Logger.Info("data received")
+               for _, meid := range element.RanNamelist {
+                   meiddisdel += meid + " "
+               }
+               if ( len(element.RanNamelist) > 0 ) {
+                   str = "mme_del|" + strings.TrimSuffix(meiddisdel," ")
+                   ricData.MeidMap = append(ricData.MeidMap,str)
+               }
                e2taddress_key := *element.E2TAddress
                //Check whether the provided E2T Address is available in SDL as a key. 
                //If exist, proceed further to check RAN list, Otherwise move to next E2T Instance
@@ -189,7 +215,13 @@ func (f *File) WriteDisAssRANFromE2TInstance(file string, disassranmap models.Ra
                        // If RAN list is empty, then routing manager assumes that all RANs attached associated to the particular E2T Instance to be removed.
                        if len(element.RanNamelist) == 0 {
                                xapp.Logger.Debug("RAN List is empty. So disassociating all RANs from the E2T Instance: %v ", *element.E2TAddress)
-                               estObj.Ranlist = []string{}
+                       for _, meid := range estObj.Ranlist {
+                       meiddel += meid + " "
+                       }
+                       str = "mme_del|" + strings.TrimSuffix(meiddel," ")
+                       ricData.MeidMap = append(ricData.MeidMap,str)
+
+                       estObj.Ranlist = []string{}
                        } else {
                                xapp.Logger.Debug("Remove only selected rans from E2T Instance: %v and %v ", ricData.E2Ts[e2taddress_key].Ranlist, element.RanNamelist)
                                for _, disRanValue := range element.RanNamelist {
@@ -230,11 +262,35 @@ func (f *File) WriteDeleteE2TInstance(file string, E2TInst *models.E2tDeleteData
                return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
        }
 
-       delete(ricData.E2Ts, *E2TInst.E2TAddress)
 
+       ricData.MeidMap = []string {}
+       var delrow,meiddel string
+       if(len(E2TInst.RanNamelistTobeDissociated)>0) {
+           for _, meid := range E2TInst.RanNamelistTobeDissociated {
+                       meiddel += meid + " "
+               }
+           delrow = "mme_del|" + strings.TrimSuffix(meiddel," ")
+           ricData.MeidMap = append(ricData.MeidMap,delrow)
+       } else {
+             if(len(ricData.E2Ts[*E2TInst.E2TAddress].Ranlist) > 0) {
+                 for _, meid := range ricData.E2Ts[*E2TInst.E2TAddress].Ranlist {
+                       meiddel += meid + " "
+                 }
+                 delrow = "mme_del|" + strings.TrimSuffix(meiddel," ")
+                 ricData.MeidMap = append(ricData.MeidMap,delrow)
+             }
+       }
+
+       delete(ricData.E2Ts, *E2TInst.E2TAddress)
 
        for _, element := range E2TInst.RanAssocList {
+               var str,meidar string
                xapp.Logger.Info("data received")
+               for _, meid := range element.RanNamelist {
+                       meidar = meid + " "
+               }
+               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar," ")
+               ricData.MeidMap = append(ricData.MeidMap,str)
                key := *element.E2TAddress
 
                if val, ok := ricData.E2Ts[key]; ok {
index ff3bf50..5a675e0 100644 (file)
@@ -97,9 +97,9 @@ WriteNewE2TInstance
 func TestWriteNewE2TInstance(t *testing.T) {
        var err error
        var file = File{}
-       file.WriteNewE2TInstance("", &stub.ValidE2TInstance)
+       file.WriteNewE2TInstance("", &stub.ValidE2TInstance,"")
        t.Log(err)
-       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance)
+       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance,"meid_arr")
        t.Log(err)
 }
 
@@ -112,7 +112,7 @@ func TestWriteAssRANToE2TInstance(t *testing.T) {
        // File is not provided as argument
        file.WriteAssRANToE2TInstance("",stub.Rane2tmap)
        t.Log(err)
-       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance)
+       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance,"")
        file.WriteAssRANToE2TInstance("ut.rt",stub.Rane2tmap)
        t.Log(err)
 }
@@ -127,11 +127,11 @@ func TestWriteDisAssRANFromE2TInstance(t *testing.T) {
        file.WriteDisAssRANFromE2TInstance("",stub.Rane2tmap)
        t.Log(err)
        //RAN list is empty
-       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance)
+       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance,"")
         file.WriteAssRANToE2TInstance("ut.rt",stub.Rane2tmap)
        file.WriteDisAssRANFromE2TInstance("ut.rt",stub.Rane2tmaponlyE2t)
        //RAN list is present
-       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance)
+       file.WriteNewE2TInstance("ut.rt", &stub.ValidE2TInstance,"")
         file.WriteAssRANToE2TInstance("ut.rt",stub.Rane2tmap)
        file.WriteDisAssRANFromE2TInstance("ut.rt",stub.Rane2tmap)
        t.Log(err)
@@ -151,17 +151,31 @@ func TestWriteDeleteE2TInstance(t *testing.T) {
                Name:    "E2Tinstance1",
                Fqdn:    "10.10.10.10:100",
                Ranlist: []string{"1", "2"},
-                       },
+                       },"meid_del|test",
                )
        file.WriteNewE2TInstance("ut.rt", &rtmgr.E2TInstance{
                Name:    "E2Tinstance2",
                Fqdn:    "11.11.11.11:100",
                Ranlist: []string{"3", "4"},
-                       },
+                       },"",
                )
        file.WriteDeleteE2TInstance("ut.rt",&models.E2tDeleteData{
                E2TAddress: swag.String("10.10.10.10:100"),
-               RanAssocList: models.RanE2tMap{ 
+               //RanNamelistTobeDissociated: []string{"1","2"},
+               RanAssocList: models.RanE2tMap{
+                               {E2TAddress: swag.String("11.11.11.11:100"),RanNamelist: []string{"5","6"}},
+                               {E2TAddress: swag.String("doesntexist"),RanNamelist: []string{}}, },
+                       })
+       file.WriteNewE2TInstance("ut.rt", &rtmgr.E2TInstance{
+               Name:    "E2Tinstance1",
+               Fqdn:    "10.10.10.10:100",
+               Ranlist: []string{"1", "2"},
+                       },"meid_del|test",
+               )
+       file.WriteDeleteE2TInstance("ut.rt",&models.E2tDeleteData{
+               E2TAddress: swag.String("10.10.10.10:100"),
+               RanNamelistTobeDissociated: []string{"1","2"},
+               RanAssocList: models.RanE2tMap{
                                {E2TAddress: swag.String("11.11.11.11:100"),RanNamelist: []string{"5","6"}},
                                {E2TAddress: swag.String("doesntexist"),RanNamelist: []string{}}, },
                        })
index f4a9125..821f8e5 100644 (file)
@@ -45,7 +45,7 @@ type Engine interface {
        ReadAll(string) (*rtmgr.RicComponents, error)
        WriteAll(string, *rtmgr.RicComponents) error
        WriteXApps(string, *[]rtmgr.XApp) error
-       WriteNewE2TInstance(string, *rtmgr.E2TInstance) error
+       WriteNewE2TInstance(string, *rtmgr.E2TInstance,string) error
        WriteAssRANToE2TInstance(string, models.RanE2tMap) error
        WriteDisAssRANFromE2TInstance(string, models.RanE2tMap) error
        WriteDeleteE2TInstance(string, *models.E2tDeleteData) error
diff --git a/tst/robot/Multiple_E2T_tests.txt b/tst/robot/Multiple_E2T_tests.txt
new file mode 100644 (file)
index 0000000..45fe861
--- /dev/null
@@ -0,0 +1,433 @@
+*** Settings ***
+Suite Setup       Suite Setup
+Suite Teardown    Suite Teardown
+Test Timeout      6 minutes
+Library           SSHLibrary
+Library           String
+Library           Collections
+
+*** Variables ***
+${NEAR_RT_RIC_PLT_VM_USERNAME}    root    # User name of Near-RT RIC Platform VM
+${NEAR_RT_RIC_PLT_VM_PASSWORD}    root    # Password of Near-RT RIC Platform VM
+${NEAR_RT_RIC_PLT_VM_IP}    10.53.73.29    # IP Address of the Near-RT RIC Platform VM
+${NEAR_RT_RIC_PLT_HOST_IP}    10.43.8.136
+${NEAR_RT_RIC_PLT_RTMGR_POD_NAME}    deployment-ricplt-rtmgr-994cd9b46-x4bf2
+${NEAR_RT_RIC_PLT_E2MGR_POD_NAME}    deployment-ricplt-e2mgr-7596586d98-vpxbp
+${NEAR_RT_RIC_PLT_RTMGR_SERVICE_NAME}    service-ricplt-rtmgr-http
+${NEAR_RT_RIC_PLT_E2MGR_SERVICE_NAME}    service-ricplt-e2mgr-http
+
+*** Test Cases ***
+r3_multiple_e2t_instances_support_scenario1
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 1 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create a standalone E2T instance and verify whether its added in datastore(SDL file)
+    ...              Check also routes for 1090 and 1101 are mapped
+    ...
+    ...    Step2 : \ Associate R1,R2 and R3 to newly created E2T instance one and verify whether its updated in RanList.
+    ...
+    ...    Step3 : \ Disassociate R1 and R3 only from E2T instance and verify R2 exists & R1 and R3 removed from RanList
+    ...
+    ...    Step4 : \ Delete E2T instance once and verify the instance and R2 is removed from datastore(SDL file)
+    ...             Check also routes are demapped for message types 1090 and 1101
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create one E2T instance "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    log    ${cmd_output}
+    ##2: Verify the file /db/rt.json file whether E2T instance is updated with proper details.
+    Log    "2. Verify the file /db/rt.json file whether E2T instance is updated with proper details."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json | json_pp
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name" : "E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist" : []
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn" : "10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+       Run Keyword    Should Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|0
+
+    ##3: Associate R1,R2,R3 to E2T1
+    Log    "3. Associate R1,R2,R3 to E2T1"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/associate-ran-to-e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R1\\", \\"R2\\", \\"R3\\" ] }]"
+    log    ${cmd_output}
+    ##4: Verify the file /db/rt.json whether RANs are associated succsessfully.
+    Log    "4. Verify the file /db/rt.json whether RANs are associated succsessfully. "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME}  --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R1","R2","R3"]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R1 R2 R3
+       Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##5: Disassociate R1, R3 from E2T1
+    Log    "5. Disassociate R1 and R3 from E2T1"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/dissociate-ran" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R1\\", \\"R3\\" ] }]"
+    log    ${cmd_output}
+    ##6: Verify the file /db/rt.json whether R1 and R3 are removed & R2 exists in Ran List.
+    Log    "6: Verify the file /db/rt.json whether R1 and R3 are removed & R2 exists in Ran List."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12  | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R2"]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R1 R3
+       Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1 
+    ##7: Delete E2T Instance
+    Log    "7. Delete E2T instance "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ##8: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "8. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json | json_pp
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Not Contain    ${cmd_output}    "ranlist" : []
+    Run Keyword    Should Not Contain    ${cmd_output}    "fqdn" : "10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R2
+       Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1 
+    Run Keyword    Should Not Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+       Run Keyword    Should Not Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+
+r3_multiple_e2t_instances_support_scenario2
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 2 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create an E2T instance along with RANList R1,R2 and verify whether its added in datastore(SDL file)
+    ...
+    ...    Step2 : \ Associate R3 and R4 to newly created E2T instance one and verify whether its updated in RanList.
+    ...
+    ...    Step3 : \ Disassociate all the RAN's from E2T instance and verify the same
+    ...
+    ...    Step4 : \ Delete E2T instance once and verify the instance removed from datastore(SDL file)
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create one E2T instance "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R1\\", \\"R2\\" ]}"
+    log    ${cmd_output}
+    ##2: Verify the file /db/rt.json file whether E2T instance is updated with proper details.
+    Log    "2. Verify the file /db/rt.json file whether E2T instance is updated with proper details."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R1","R2"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+       Run Keyword    Should Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R1 R2
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##3.Associate new RAN's R3,R4 to E2T1"
+    Log    "3. Associate R3,R4 to E2T1"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/associate-ran-to-e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R3\\", \\"R4\\" ] }]"
+    log    ${cmd_output}
+    ##4: Verify the file /db/rt.json whether RANs are associated succsessfully.
+    Log    "4. Verify the file /db/rt.json whether RANs are associated succsessfully. "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R1","R2","R3","R4"]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R3 R4
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##5: Disassociate all RAN's from E2T1
+       Log    "5. Disassociate all RAN's from E2T1"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/dissociate-ran" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\" }]"
+    log    ${cmd_output}
+    ##6: Verify the file /db/rt.json whether R1,R2,R3 and R4 are removed.
+    Log    "6: Verify the file /db/rt.json whether R1 R2 R3 and R4 are removed in Ran List."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":[]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R1 R2 R3 R4
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##7: Delete E2T Instance
+    Log    "7. Delete E2T instance "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ##8: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "8. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json | json_pp
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Not Contain    ${cmd_output}    "ranlist" : []
+    Run Keyword    Should Not Contain    ${cmd_output}    "fqdn" : "10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|0
+    Run Keyword    Should Not Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+       Run Keyword    Should Not Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+
+r3_multiple_e2t_instances_support_scenario3
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 3 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create an E2T instance along with RANList R1,R2 and verify whether its added in datastore(SDL file)
+    ...
+    ...    Step2 : \ Delete E2T instance by providing the RAN list and verify the instance removed from datastore(SDL file)
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create one E2T instance "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\":\\"10.105.143.108:38000\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R1\\", \\"R2\\" ]}"
+    log    ${cmd_output}
+    ##2: Verify the file /db/rt.json file whether E2T instance is updated with proper details.
+    Log    "2. Verify the file /db/rt.json file whether E2T instance is updated with proper details."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R1","R2"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R1 R2
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##3: Delete E2T Instance
+    Log    "7. Delete E2T instance "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelistTobeDissociated\\": [ \\"R1\\", \\"R2\\" ]}"
+    ##8: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "8. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json | json_pp
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Not Contain    ${cmd_output}    "ranlist" : []
+    Run Keyword    Should Not Contain    ${cmd_output}    "fqdn" : "10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R1 R2
+    Run Keyword    Should Not Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+       Run Keyword    Should Not Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38000
+
+
+r3_multiple_e2t_instances_support_scenario4
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 4 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create two E2T instances E2T1 and E2T2 along with RANList R11 and R21 respectively, verify whether its added in datastore(SDL file)
+    ...
+    ...    Step2 : \ Associate R12 and R22 to newly created E2T1 and E2T2 instance respectively and verify whether its updated in RanList.
+    ...
+    ...    Step3 : \ Disassociate all the RAN's from E2T1 instance and R23  R21 from E2T2 instance and verify the same
+    ...
+    ...    Step4 : \ Delete E2T2 instance and associate R22 to E2T1 instance and verify the from datastore(SDL file)
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create E2T instances "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R11\\" ]}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\", \\"ranNamelist\\": [ \\"R21\\" ]}"
+    log    ${cmd_output}
+    ##2: Verify the file /db/rt.json file whether E2T instance is updated with proper details.
+    Log    "2. Verify the file /db/rt.json file whether E2T instance is updated with proper details."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=35 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R11"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R21"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38001"
+#Run Keyword    Should Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38001,10.105.143.108:38000
+#Run Keyword    Should Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38001,10.105.143.108:38000
+    Run Keyword    Should Contain X Times    ${cmd_output1}    10.105.143.108:38000    4
+       Run Keyword    Should Contain X Times   ${cmd_output1}    10.105.143.108:38001    6
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38001|R21
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|1
+    ##3.Associate RAN's R12 to E2T1 and R22 to E2T2"
+    Log    "3. Associate R12 to E2T1 and R22 to E2T2"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/associate-ran-to-e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R12\\" ] }]"
+    log    ${cmd_output}
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/associate-ran-to-e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38001\\", \\"ranNamelist\\": [ \\"R22\\" ] }]"
+    log    ${cmd_output}
+    ##4: Verify the file /db/rt.json whether RANs are associated succsessfully.
+    Log    "4. Verify the file /db/rt.json whether RANs are associated succsessfully. "
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ##5. Associate R13 and R23 in a single curl command to E2T1 and E2T2 respectively
+    Log    "5. Associate R13 and R23 in a single curl command to E2T1 and E2T2 respectively"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/associate-ran-to-e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R13\\"] }, { \\"E2TAddress\\": \\"10.105.143.108:38001\\",\\"ranNamelist\\": [ \\"R23\\"] }]"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=25 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R11","R12","R13"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R21","R22","R23"]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38001"
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R13
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38001|R23
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|2
+    ##6: Disassociate all RAN's from E2T1 R21 and R23 from E2T2
+       Log    "6: Disassociate all RAN's from E2T1 R21 and R23 from E2T2"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/dissociate-ran" -H "accept: application/json" -H "Content-Type: application/json" -d "[ { \\"E2TAddress\\": \\"10.105.143.108:38000\\" } ,{ \\"E2TAddress\\": \\"10.105.143.108:38001\\", \\"ranNamelist\\": [ \\"R21\\", \\"R23\\" ] }]"
+    log    ${cmd_output}
+    ##7: Verify the file /db/rt.json whether R1,R2,R3 and R4 are removed.
+    Log    "7: Verify the file /db/rt.json whether R1 R2 R3 and R4 are removed in Ran List."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=20 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output}    "name":"E2TERMINST"
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":[]
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38001"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R22"]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R11 R12 R13
+       Run Keyword    Should Contain    ${cmd_output1}    mme_del|R21 R23
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|2
+    ##8: Delete E2T2 Instance and Associate R22 to E2T1
+    Log    "8. Delete E2T2 instance and Associate R22 to E2T1"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\", \\"ranAssocList\\": [ { \\"E2TAddress\\": \\"10.105.143.108:38000\\", \\"ranNamelist\\": [ \\"R22\\" ] } ]}" 
+       sleep    1
+    ##9: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "9. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Not Contain    ${cmd_output}    "ranlist" : []
+    Run Keyword    Should Contain    ${cmd_output}    "fqdn":"10.105.143.108:38000"
+    Run Keyword    Should Not Contain    ${cmd_output}    "fqdn" : "10.105.143.108:38001"
+    Run Keyword    Should Contain    ${cmd_output}    "ranlist":["R22"]
+    Run Keyword    Should Contain    ${cmd_output1}    mme_del|R22
+    Run Keyword    Should Contain    ${cmd_output1}    mme_ar|10.105.143.108:38000|R22
+    Run Keyword    Should Contain    ${cmd_output1}    meid_map|end|2
+
+
+r3_multiple_e2t_instances_support_scenario5
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 5 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create two E2T instance and verify whether its added in datastore(SDL file)
+    ...              Check also routes for 1090 and 1101 are mapped
+    ...
+    ...    Step2 : \ Remove one E2T instance and check that message types 1090 and 1101 still present.
+    ...
+    ...    Step3 : \ Remove second E2T and verify message types 1090 and 1101 are also removed 
+    ...
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create E2T instances "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\"}"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\" }"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -X POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\" }"
+    log    ${cmd_output}
+    ##2: Verify the file /db/rt.json file whether E2T instance is updated with proper details.
+    Log    "2. Verify the file /db/rt.json file whether E2T instance is updated with proper details."
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=35 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain X Times    ${cmd_output1}    10.105.143.108:38000    4
+       Run Keyword    Should Contain X Times   ${cmd_output1}    10.105.143.108:38001    4
+    ##3: Delete E2T1 Instance 
+    Log    "3. Delete E2T1 instance"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38000\\"}" 
+    ##4: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "3. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Contain    ${cmd_output1}    mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38001
+       Run Keyword    Should Contain    ${cmd_output1}    mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.105.143.108:38001
+    ##4: Delete E2T2 Instance 
+    Log    "4. Delete E2T2 instance"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} -- curl -X DELETE "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"10.105.143.108:38001\\"}" 
+    ##4: Verify the file /db/rt.json file whether E2T instance is removed.
+    Log    "4. Verify the file /db/rt.json file whether E2T instance is removed"
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} cat /db/rt.json 
+    log    ${cmd_output}
+    ${cmd_output1}    Execute command    kubectl logs -n ricplt ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME} --tail=12 | grep meid
+    log    ${cmd_output1}
+    Run Keyword    Should Not Contain    ${cmd_output1}    mse|1090
+       Run Keyword    Should Not Contain    ${cmd_output1}    mse|1101
+
+r3_multiple_e2t_instances_support_scenario6
+    [Documentation]    This Test case covers the checks of Multiple E2T instance support feature
+    ...
+    ...    Scenario 6 [ Positive Case] :
+    ...
+    ...    Step1 : \ Create of  E2T instance with invalid fqdn fails
+       ...
+    [Tags]    RICPLT_MultipleE2T
+    ##Scenario1 execution
+    ##1: Create one E2T Instnace
+    Log    "1. Create E2T instances "
+    ##Delete If it exists already
+    ${cmd_output}    Execute command    kubectl exec -n ricplt ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME} \ -- curl -i POST "http://service-ricplt-rtmgr-http:3800/ric/v1/handles/e2t" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \\"E2TAddress\\": \\"dummy.e2t.com:12345\\" }"
+    log    ${cmd_output}
+    Run Keyword    Should Contain    ${cmd_output}    400 Bad Request 
+
+*** Keywords ***
+Login_RIC_Platform_VM
+    [Arguments]    ${alias_name}=ricplt
+    SSHLibrary.Open Connection    ${NEAR_RT_RIC_PLT_VM_IP}    22
+    SSHLibrary.Login    ${NEAR_RT_RIC_PLT_VM_USERNAME}    ${NEAR_RT_RIC_PLT_VM_PASSWORD}
+
+Suite Setup
+    ##Added place holder now
+    Login_RIC_Platform_VM
+       check_ric_platform_services
+
+Suite Teardown
+    Close Connection
+
+Wait For routing manager service
+    [Arguments]    ${maxcount}=10    ${count}=1
+    FOR    ${count}    IN RANGE    1    ${maxcount}
+    ${cmd_output}    Execute command    kubectl get pod -n ricplt | grep -i deployment-ricplt-rtmgr
+    ${status}=    Run Keyword And Ignore Error    Should Contain    ${cmd_output}    Running
+    ${ready}=    Run Keyword And Ignore Error    Should Contain    ${cmd_output}    1/1
+    Log    ${status}
+    Log    ${ready}
+    Run Keyword If    ("${status[0]}" == "PASS") and ("${ready[0]}" == "PASS")    Exit For Loop
+    ##Run Keyword And Ignore Error    Execute command
+    Sleep    2
+    END
+    Log    "Max retry count reached, seems routing manager is not running successfully"
+    Run Keyword    Should Contain    ${cmd_output}    Running
+    Run Keyword    Should Contain    ${cmd_output}    1/1
+
+check_ric_platform_services
+    ##check whether required servcies are up and running.
+    Log    "Checking the status of Routing manager POD"
+    Wait For routing manager service    10    1
+    ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME}    Execute command    kubectl get pod -n ricplt | grep -i deployment-ricplt-rtmgr | awk '{ print $1}'
+    ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME}    Execute command    kubectl get pod -n ricplt | grep -i deployment-ricplt-e2mgr | awk '{ print $1}'
+    Set Suite Variable    ${NEAR_RT_RIC_PLT_RTMGR_POD_NAME}
+       Set Suite Variable    ${NEAR_RT_RIC_PLT_E2MGR_POD_NAME}
+