Replace deprecated SDL APIs 46/6846/1
authorTimo Tietavainen <timo.tietavainen@nokia.com>
Fri, 8 Oct 2021 10:52:12 +0000 (13:52 +0300)
committerTimo Tietavainen <timo.tietavainen@nokia.com>
Fri, 8 Oct 2021 11:15:22 +0000 (14:15 +0300)
Replace deprecated SDL SdlInstance usage with xapp-frame's SdlStorage
APIs, which have been built on top of the valid SDL SyncStorage APIs.
Upgrade SDL version to v0.8.0.
Bump appmgr's Docker container tag to 0.5.4.

Issue-Id: RIC-805

Signed-off-by: Timo Tietavainen <timo.tietavainen@nokia.com>
Change-Id: Ib68a380544fd75e31ca99d74bd319eae9f029aee

Dockerfile
container-tag.yaml
go.mod
go.sum
pkg/resthooks/resthooks.go
pkg/resthooks/resthooks_test.go
pkg/resthooks/types.go

index 5f43439..5ca9e2a 100755 (executable)
@@ -19,6 +19,12 @@ FROM nexus3.o-ran-sc.org:10002/o-ran-sc/bldr-ubuntu18-c-go:1.9.0 AS appmgr-build
 
 RUN apt-get update -y && apt-get install -y jq
 
+# Update CA certificates
+RUN apt update && apt install --reinstall -y \
+  ca-certificates \
+  && \
+  update-ca-certificates
+
 ENV PATH="/usr/local/go/bin:${PATH}"
 
 # Install helm
@@ -70,8 +76,8 @@ CMD ["/bin/bash"]
 FROM ubuntu:18.04 as appmgr
 
 RUN apt-get update -y \
-    && apt-get install -y sudo openssl ca-certificates ca-cacert \
-    && apt-get clean
+    && apt-get install --reinstall -y sudo openssl ca-certificates ca-cacert \
+    && apt-get clean && update-ca-certificates
 
 #
 # libraries and helm
index b768677..cb9f477 100755 (executable)
@@ -1,4 +1,4 @@
 # The Jenkins job uses this string for the tag in the image name
 # for example nexus3.o-ran-sc.org:10004/my-image-name:my-tag
 ---
-tag: '0.5.3'
+tag: '0.5.4'
diff --git a/go.mod b/go.mod
index 6c1b108..71eeb8b 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -2,7 +2,7 @@ module gerrit.o-ran-sc.org/r/ric-plt/appmgr
 
 go 1.12
 
-replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.7.0
+replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.8.0
 
 replace gerrit.o-ran-sc.org/r/com/golog => gerrit.o-ran-sc.org/r/com/golog.git v0.0.2
 
diff --git a/go.sum b/go.sum
index 1558c34..7929ba7 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
 gerrit.o-ran-sc.org/r/com/golog.git v0.0.2 h1:Ix6SgFuzd6yW6Ur6+qDlGhDO65UYs8PiIkeAL1VaQ2o=
 gerrit.o-ran-sc.org/r/com/golog.git v0.0.2/go.mod h1:A7hUL52YQSO4dFIZNcj76XQ09C9PftAe3LyL7kqBnok=
-gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.7.0 h1:mxlBo54jxwHHFmGYzFI+fBIkOGwarQP4dx2KBxQ8ln8=
-gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.7.0/go.mod h1:KCHu4JkWnw2Ro6P747wU9S2t7zxFLmBNCiYvGZo3CHo=
+gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.8.0 h1:H7GtCRC+pGn6oOxYalUZr7LinQX5jQCVa+ConX7PB5Q=
+gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.8.0/go.mod h1:KCHu4JkWnw2Ro6P747wU9S2t7zxFLmBNCiYvGZo3CHo=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
index 1bc7925..f45197b 100755 (executable)
@@ -34,15 +34,20 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/models"
 )
 
+//To encapsulate xApp Manager's keys under their own namespace in a DB
+const (
+       appmgrSdlNs = "appmgr"
+       appDbSdlNs  = "appdb"
+)
+
 func NewResthook(restoreData bool) *Resthook {
-       return createResthook(restoreData, sdl.NewSdlInstance("appmgr", sdl.NewDatabase()), sdl.NewSdlInstance("appdb", sdl.NewDatabase()))
+       return createResthook(restoreData, sdl.NewSyncStorage())
 }
 
-func createResthook(restoreData bool, sdlInst iSdl, sdlInst2 iSdl) *Resthook {
+func createResthook(restoreData bool, sdlInst iSdl) *Resthook {
        rh := &Resthook{
                client: &http.Client{},
                db:     sdlInst,
-               db2:    sdlInst2,
        }
 
        if restoreData {
@@ -189,7 +194,7 @@ func (rh *Resthook) StoreSubscriptions(m cmap.ConcurrentMap) {
                        return
                }
 
-               if err := rh.db.Set(s.Id, data); err != nil {
+               if err := rh.db.Set(appmgrSdlNs, s.Id, data); err != nil {
                        appmgr.Logger.Error("DB.session.Set failed: %v ", err.Error())
                }
        }
@@ -199,14 +204,14 @@ func (rh *Resthook) RestoreSubscriptions() (m cmap.ConcurrentMap) {
        rh.VerifyDBConnection()
 
        m = cmap.New()
-       keys, err := rh.db.GetAll()
+       keys, err := rh.db.GetAll(appmgrSdlNs)
        if err != nil {
                appmgr.Logger.Error("DB.session.GetAll failed: %v ", err.Error())
                return
        }
 
        for _, key := range keys {
-               value, err := rh.db.Get([]string{key})
+               value, err := rh.db.Get(appmgrSdlNs, []string{key})
                if err != nil {
                        appmgr.Logger.Error("DB.session.Get failed: %v ", err.Error())
                        return
@@ -228,7 +233,7 @@ func (rh *Resthook) RestoreSubscriptions() (m cmap.ConcurrentMap) {
 func (rh *Resthook) VerifyDBConnection() {
        // Test DB connection, and wait until ready!
        for {
-               if _, err := rh.db.GetAll(); err == nil {
+               if _, err := rh.db.GetAll(appmgrSdlNs); err == nil {
                        return
                }
                appmgr.Logger.Error("Database connection not ready, waiting ...")
@@ -237,7 +242,7 @@ func (rh *Resthook) VerifyDBConnection() {
 }
 
 func (rh *Resthook) FlushSubscriptions() {
-       rh.db.RemoveAll()
+       rh.db.RemoveAll(appmgrSdlNs)
        rh.subscriptions = cmap.New()
 }
 
@@ -252,7 +257,7 @@ func (rh *Resthook) UpdateAppData(params models.RegisterRequest, updateflag bool
                params.Config = ""
        }
 
-       value, err := rh.db2.Get([]string{"endpoints"})
+       value, err := rh.db.Get(appDbSdlNs, []string{"endpoints"})
        if err != nil {
                appmgr.Logger.Error("DB.session.Get failed: %v ", err.Error())
                return
@@ -269,7 +274,7 @@ func (rh *Resthook) UpdateAppData(params models.RegisterRequest, updateflag bool
                for i, _ := range newstring {
                        if len(newstring) == 1 && strings.Contains(newstring[i], *params.HTTPEndpoint) {
                                appmgr.Logger.Info("Removing Key %s", *params.HTTPEndpoint)
-                               rh.db2.Remove([]string{"endpoints"})
+                               rh.db.Remove(appDbSdlNs, []string{"endpoints"})
                                dbflag = true
                                break
                        }
@@ -281,7 +286,7 @@ func (rh *Resthook) UpdateAppData(params models.RegisterRequest, updateflag bool
                        appsindb = append(appsindb, newstring[i])
                        data = strings.Join(appsindb, " ")
                }
-               rh.db2.Set("endpoints", strings.TrimSpace(data))
+               rh.db.Set(appDbSdlNs, "endpoints", strings.TrimSpace(data))
        }
 
        if dbflag == false {
@@ -292,12 +297,12 @@ func (rh *Resthook) UpdateAppData(params models.RegisterRequest, updateflag bool
                }
                appsindb = append(appsindb, string(xappData))
                data = strings.Join(appsindb, " ")
-               rh.db2.Set("endpoints", strings.TrimSpace(data))
+               rh.db.Set(appDbSdlNs, "endpoints", strings.TrimSpace(data))
        }
 }
 
 func (rh *Resthook) GetAppsInSDL() *string {
-       value, err := rh.db2.Get([]string{"endpoints"})
+       value, err := rh.db.Get(appDbSdlNs, []string{"endpoints"})
        if err != nil {
                appmgr.Logger.Error("DB.session.Get failed: %v ", err.Error())
                return nil
index d2120c2..df66a83 100755 (executable)
@@ -29,9 +29,9 @@ import (
        "net/http"
        "net/http/httptest"
        "os"
-       "time"
        "strconv"
        "testing"
+       "time"
 
        "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/appmgr"
        "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/models"
@@ -40,7 +40,6 @@ import (
 var rh *Resthook
 var resp models.SubscriptionResponse
 var mockedSdl *SdlMock
-var mockedSdl2 *SdlMock
 
 // Test cases
 func TestMain(m *testing.M) {
@@ -48,9 +47,8 @@ func TestMain(m *testing.M) {
        appmgr.Logger.SetLevel(0)
 
        mockedSdl = new(SdlMock)
-       mockedSdl2 = new(SdlMock)
        NewResthook(false)
-       rh = createResthook(false, mockedSdl,mockedSdl2)
+       rh = createResthook(false, mockedSdl)
        code := m.Run()
        os.Exit(code)
 }
@@ -74,7 +72,7 @@ func TestAddSubscriptionExists(t *testing.T) {
 func TestDeletesubscriptionSuccess(t *testing.T) {
        var mockSdlRetOk error
 
-       mockedSdl.On("Set", mock.Anything).Return(mockSdlRetOk)
+       mockedSdl.On("Set", appmgrSdlNs, mock.Anything).Return(mockSdlRetOk)
        resp := rh.AddSubscription(createSubscription(models.EventTypeDeleted, int64(5), int64(10), "http://localhost:8087/xapps_hook2"))
        assert.Equal(t, resp.Version, int64(0))
        assert.Equal(t, resp.EventType, models.EventTypeDeleted)
@@ -205,7 +203,6 @@ func TestNotifyReturnsErrorAfterRetriesIfNoHttpServer(t *testing.T) {
 func TestRestoreSubscriptionsSuccess(t *testing.T) {
        var mockSdlRetOk error
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        key := "key-1"
 
        subsReq := createSubscription(models.EventTypeCreated, int64(5), int64(10), "http://localhost:8087/xapps_hook")
@@ -215,9 +212,9 @@ func TestRestoreSubscriptionsSuccess(t *testing.T) {
        mockSdlGetRetVal := make(map[string]interface{})
        //Cast data to string to act like a real SDL/Redis client
        mockSdlGetRetVal[key] = string(serializedSubsReq)
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetOk).Once()
-       restHook := createResthook(true, mSdl,mSdl2)
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetOk).Once()
+       restHook := createResthook(true, mSdl)
 
        val, found := restHook.subscriptions.Get(key)
        assert.True(t, found)
@@ -227,9 +224,8 @@ func TestRestoreSubscriptionsSuccess(t *testing.T) {
 func TestRestoreSubscriptionsFailsIfSdlGetAllFails(t *testing.T) {
        var mockSdlRetStatus error
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        getCalled := 0
-       mGetAllCall := mSdl.On("GetAll")
+       mGetAllCall := mSdl.On("GetAll", appmgrSdlNs)
        mGetAllCall.RunFn = func(args mock.Arguments) {
                if getCalled > 0 {
                        mockSdlRetStatus = errors.New("some SDL error")
@@ -238,14 +234,13 @@ func TestRestoreSubscriptionsFailsIfSdlGetAllFails(t *testing.T) {
                mGetAllCall.ReturnArguments = mock.Arguments{[]string{}, mockSdlRetStatus}
        }
 
-       restHook := createResthook(true, mSdl,mSdl2)
+       restHook := createResthook(true, mSdl)
        assert.Equal(t, 0, len(restHook.subscriptions.Items()))
 }
 
 func TestRestoreSubscriptionsFailsIfSdlGetFails(t *testing.T) {
        var mockSdlRetOk error
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
        key := "key-1"
        subsReq := createSubscription(models.EventTypeCreated, int64(5), int64(10), "http://localhost:8087/xapps_hook")
@@ -255,16 +250,16 @@ func TestRestoreSubscriptionsFailsIfSdlGetFails(t *testing.T) {
        mockSdlGetRetVal := make(map[string]interface{})
        mockSdlGetRetVal[key] = serializedSubsReq
 
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
 
-       restHook := createResthook(true, mSdl,mSdl2)
+       restHook := createResthook(true, mSdl)
        assert.Equal(t, 0, len(restHook.subscriptions.Items()))
 }
 
 func TestTeardown(t *testing.T) {
        var mockSdlRetOk error
-       mockedSdl.On("RemoveAll").Return(mockSdlRetOk).Once()
+       mockedSdl.On("RemoveAll", appmgrSdlNs).Return(mockSdlRetOk).Once()
 
        rh.FlushSubscriptions()
 }
@@ -281,7 +276,6 @@ func TestUpdateAppDataFail2(t *testing.T) {
        var params models.RegisterRequest
 
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
        var tEndpoint1 string = "10.104.237.59:8087"
        params.HTTPEndpoint = &tEndpoint1
@@ -301,13 +295,13 @@ func TestUpdateAppDataFail2(t *testing.T) {
 
        mockSdlGetRetVal2 := make(map[string]interface{})
        mockSdlGetRetVal2[value] = serializedSubsReq2
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal2, mockSdlRetOk).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal2, mockSdlRetOk).Once()
 
-       restHook := createResthook(false, mSdl,mSdl2)
+       restHook := createResthook(false, mSdl)
 
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal2, mockSdlRetOk).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal2, mockSdlRetOk).Once()
 
        ret := restHook.GetAppsInSDL()
        if ret == nil {
@@ -320,7 +314,6 @@ func TestGetAppsInSDLFail3(t *testing.T) {
        var params models.RegisterRequest
 
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
 
        serializedSubsReq1, err := json.Marshal(params)
@@ -340,17 +333,17 @@ func TestGetAppsInSDLFail3(t *testing.T) {
        mockSdlGetRetVal1 := make(map[string]interface{})
        mockSdlGetRetVal1[key] = serializedSubsReq1
 
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
 
-       restHook := createResthook(false, mSdl,mSdl2)
+       restHook := createResthook(false, mSdl)
 
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
        ret2 := restHook.GetAppsInSDL()
        if ret2 != nil {
-               t.Logf("SDL Returning: %s \n",*ret2)
-       }else{
+               t.Logf("SDL Returning: %s \n", *ret2)
+       } else {
                assert.Nil(t, ret2)
        }
 }
@@ -360,7 +353,6 @@ func TestUpdateAppDataSucc(t *testing.T) {
        var params models.RegisterRequest
 
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
 
        var tEndpoint1 string = "10.104.237.59:8087"
@@ -381,14 +373,14 @@ func TestUpdateAppDataSucc(t *testing.T) {
        mockSdlGetRetVal1 := make(map[string]interface{})
        mockSdlGetRetVal1[key] = serializedSubsReq1
 
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
 
-       restHook := createResthook(false, mSdl,mSdl2)
+       restHook := createResthook(false, mSdl)
 
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
-       mSdl2.On("Set", mock.Anything).Return(mockSdlRetOk)
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("Set", appDbSdlNs, mock.Anything).Return(mockSdlRetOk)
        restHook.UpdateAppData(params, true)
 }
 
@@ -397,12 +389,11 @@ func TestUpdateAppDataSucc1(t *testing.T) {
        var params models.RegisterRequest
 
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
 
        var tEndpoint1 string = "10.104.237.59:8087"
        params.HTTPEndpoint = &tEndpoint1
-       appsindb := []string{ "10.104.237.59:8088 " , " ", " "," 10.104.237.59:8087"}
+       appsindb := []string{"10.104.237.59:8088 ", " ", " ", " 10.104.237.59:8087"}
        serializedSubsReq1, err := json.Marshal(appsindb)
        if err != nil {
                t.Logf("error in marshal .. %v", err)
@@ -419,27 +410,25 @@ func TestUpdateAppDataSucc1(t *testing.T) {
        mockSdlGetRetVal1 := make(map[string]interface{})
        mockSdlGetRetVal1[value] = serializedSubsReq1
 
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
 
-       restHook := createResthook(false, mSdl,mSdl2)
+       restHook := createResthook(false, mSdl)
 
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
-       mSdl2.On("Set", []string{value}).Return(mockSdlRetOk).Twice()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("Set", appDbSdlNs, []string{value}).Return(mockSdlRetOk).Twice()
 
-       mSdl2.On("Remove").Return(mockSdlRetOk)
-       mSdl2.On("Set", mock.Anything).Return(mockSdlRetOk)
+       mSdl.On("Remove", appDbSdlNs, mock.Anything).Return(mockSdlRetOk)
+       mSdl.On("Set", appDbSdlNs, mock.Anything).Return(mockSdlRetOk)
        restHook.UpdateAppData(params, true)
 }
 
-
 func TestUpdateAppDataSucc2(t *testing.T) {
        var mockSdlRetOk error
        var params models.RegisterRequest
 
        mSdl := new(SdlMock)
-       mSdl2 := new(SdlMock)
        mockSdlRetNok := errors.New("some SDL error")
 
        var tEndpoint1 string = "10.104.237.59:8087"
@@ -461,17 +450,17 @@ func TestUpdateAppDataSucc2(t *testing.T) {
        mockSdlGetRetVal1 := make(map[string]interface{})
        mockSdlGetRetVal1[value] = serializedSubsReq1
 
-       mSdl.On("GetAll").Return([]string{key}, mockSdlRetOk).Twice()
-       mSdl.On("Get", []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("GetAll", appmgrSdlNs).Return([]string{key}, mockSdlRetOk).Twice()
+       mSdl.On("Get", appmgrSdlNs, []string{key}).Return(mockSdlGetRetVal, mockSdlRetNok).Once()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
 
-       restHook := createResthook(false, mSdl,mSdl2)
+       restHook := createResthook(false, mSdl)
 
-       mSdl2.On("Get", []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
-       mSdl2.On("Set", []string{value}).Return(mockSdlRetOk).Twice()
+       mSdl.On("Get", appDbSdlNs, []string{value}).Return(mockSdlGetRetVal1, mockSdlRetOk).Once()
+       mSdl.On("Set", appDbSdlNs, []string{value}).Return(mockSdlRetOk).Twice()
 
-       mSdl2.On("Remove").Return(mockSdlRetOk)
-       mSdl2.On("Set", mock.Anything).Return(mockSdlRetOk)
+       mSdl.On("Remove", appDbSdlNs, mock.Anything).Return(mockSdlRetOk)
+       mSdl.On("Set", appDbSdlNs, mock.Anything).Return(mockSdlRetOk)
        restHook.UpdateAppData(params, true)
 }
 func createSubscription(et models.EventType, maxRetries, retryTimer int64, targetUrl string) models.SubscriptionRequest {
@@ -503,7 +492,7 @@ func generateXapp(name, status, ver, iname, istatus, ip, port string) (x models.
 
 func flushExistingSubscriptions() {
        var mockSdlRetOk error
-       mockedSdl.On("RemoveAll").Return(mockSdlRetOk).Once()
+       mockedSdl.On("RemoveAll", appmgrSdlNs).Return(mockSdlRetOk).Once()
        rh.FlushSubscriptions()
 }
 
@@ -530,9 +519,9 @@ func createHTTPServer(t *testing.T, method, url string, port, status int, respDa
 
 func (m *SdlMock) expectDbSet(t *testing.T, subsReq models.SubscriptionRequest, mockRet error) {
        serializedSubReq, _ := json.Marshal(subsReq)
-       m.On("Set", mock.Anything).Run(
+       m.On("Set", appmgrSdlNs, mock.Anything).Run(
                func(args mock.Arguments) {
-                       sdlKVs := args.Get(0).([]interface{})
+                       sdlKVs := args.Get(1).([]interface{})
                        assert.Equal(t, 2, len(sdlKVs))
                        //Validate that subscription request is set to SDL
                        assert.Equal(t, serializedSubReq, sdlKVs[1])
@@ -548,36 +537,36 @@ func TestPublishSubscription(t *testing.T) {
        v, ok := rh.subscriptions.Get(resp.ID)
        assert.True(t, ok)
        if v == nil {
-               t.Logf("value : %+v",v) 
+               t.Logf("value : %+v", v)
        }
-       rh.PublishSubscription(xapp,models.EventTypeUndeployed)
+       rh.PublishSubscription(xapp, models.EventTypeUndeployed)
 }
 
 type SdlMock struct {
        mock.Mock
 }
 
-func (m *SdlMock) Set(pairs ...interface{}) error {
-       a := m.Called(pairs)
+func (m *SdlMock) Set(ns string, pairs ...interface{}) error {
+       a := m.Called(ns, pairs)
        return a.Error(0)
 }
 
-func (m *SdlMock) Get(keys []string) (map[string]interface{}, error) {
-       a := m.Called(keys)
+func (m *SdlMock) Get(ns string, keys []string) (map[string]interface{}, error) {
+       a := m.Called(ns, keys)
        return a.Get(0).(map[string]interface{}), a.Error(1)
 }
 
-func (m *SdlMock) GetAll() ([]string, error) {
-       a := m.Called()
+func (m *SdlMock) GetAll(ns string) ([]string, error) {
+       a := m.Called(ns)
        return a.Get(0).([]string), a.Error(1)
 }
 
-func (m *SdlMock) RemoveAll() error {
-       a := m.Called()
+func (m *SdlMock) RemoveAll(ns string) error {
+       a := m.Called(ns)
        return a.Error(0)
 }
 
-func (m *SdlMock) Remove(keys []string) error {
-       a := m.Called()
+func (m *SdlMock) Remove(ns string, keys []string) error {
+       a := m.Called(ns)
        return a.Error(0)
 }
index 1376500..881c0e3 100755 (executable)
@@ -36,7 +36,6 @@ type Resthook struct {
        client        *http.Client
        subscriptions cmap.ConcurrentMap
        db            iSdl
-        db2           iSdl
        Seq           int64
 }
 
@@ -49,9 +48,9 @@ type SubscriptionNotification struct {
 }
 
 type iSdl interface {
-       Set(pairs ...interface{}) error
-       Get(keys []string) (map[string]interface{}, error)
-       GetAll() ([]string, error)
-       RemoveAll() error
-       Remove([]string) error
+       Set(ns string, pairs ...interface{}) error
+       Get(ns string, keys []string) (map[string]interface{}, error)
+       GetAll(ns string) ([]string, error)
+       RemoveAll(ns string) error
+       Remove(ns string, keys []string) error
 }