"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 {
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())
}
}
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
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 ...")
}
func (rh *Resthook) FlushSubscriptions() {
- rh.db.RemoveAll()
+ rh.db.RemoveAll(appmgrSdlNs)
rh.subscriptions = cmap.New()
}
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
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
}
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 {
}
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
"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"
var rh *Resthook
var resp models.SubscriptionResponse
var mockedSdl *SdlMock
-var mockedSdl2 *SdlMock
// Test cases
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)
}
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)
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")
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)
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")
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")
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()
}
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
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 {
var params models.RegisterRequest
mSdl := new(SdlMock)
- mSdl2 := new(SdlMock)
mockSdlRetNok := errors.New("some SDL error")
serializedSubsReq1, err := json.Marshal(params)
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)
}
}
var params models.RegisterRequest
mSdl := new(SdlMock)
- mSdl2 := new(SdlMock)
mockSdlRetNok := errors.New("some SDL error")
var tEndpoint1 string = "10.104.237.59:8087"
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)
}
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)
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"
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 {
func flushExistingSubscriptions() {
var mockSdlRetOk error
- mockedSdl.On("RemoveAll").Return(mockSdlRetOk).Once()
+ mockedSdl.On("RemoveAll", appmgrSdlNs).Return(mockSdlRetOk).Once()
rh.FlushSubscriptions()
}
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])
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)
}