Read list type of environment variables
[ric-plt/sdlgo.git] / sdl_test.go
index 832e8eb..df83ff1 100644 (file)
    limitations under the License.
 */
 
+/*
+ * This source code is part of the near-RT RIC (RAN Intelligent Controller)
+ * platform project (RICP).
+ */
+
 package sdlgo_test
 
 import (
@@ -24,7 +29,6 @@ import (
        "time"
 
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
-       "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/sdlgoredis"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/mock"
 )
@@ -33,8 +37,8 @@ type mockDB struct {
        mock.Mock
 }
 
-func (m *mockDB) SubscribeChannelDB(cb sdlgoredis.ChannelNotificationCb, channelPrefix, eventSeparator string, channels ...string) {
-       m.Called(cb, channelPrefix, eventSeparator, channels)
+func (m *mockDB) SubscribeChannelDB(cb func(string, ...string), channels ...string) {
+       m.Called(cb, channels)
 }
 
 func (m *mockDB) UnsubscribeChannelDB(channels ...string) {
@@ -81,8 +85,8 @@ func (m *mockDB) SetIE(key string, oldData, newData interface{}) (bool, error) {
        return a.Bool(0), a.Error(1)
 }
 
-func (m *mockDB) SetIEPub(channel, message, key string, oldData, newData interface{}) (bool, error) {
-       a := m.Called(channel, message, key, oldData, newData)
+func (m *mockDB) SetIEPub(channelsAndEvents []string, key string, oldData, newData interface{}) (bool, error) {
+       a := m.Called(channelsAndEvents, key, oldData, newData)
        return a.Bool(0), a.Error(1)
 }
 
@@ -91,8 +95,8 @@ func (m *mockDB) SetNX(key string, data interface{}, expiration time.Duration) (
        return a.Bool(0), a.Error(1)
 }
 
-func (m *mockDB) SetNXPub(channel, message, key string, data interface{}) (bool, error) {
-       a := m.Called(channel, message, key, data)
+func (m *mockDB) SetNXPub(channelsAndEvents []string, key string, data interface{}) (bool, error) {
+       a := m.Called(channelsAndEvents, key, data)
        return a.Bool(0), a.Error(1)
 }
 
@@ -101,8 +105,8 @@ func (m *mockDB) DelIE(key string, data interface{}) (bool, error) {
        return a.Bool(0), a.Error(1)
 }
 
-func (m *mockDB) DelIEPub(channel, message, key string, data interface{}) (bool, error) {
-       a := m.Called(channel, message, key, data)
+func (m *mockDB) DelIEPub(channelsAndEvents []string, key string, data interface{}) (bool, error) {
+       a := m.Called(channelsAndEvents, key, data)
        return a.Bool(0), a.Error(1)
 }
 
@@ -142,7 +146,7 @@ func (m *mockDB) PExpireIE(key string, data interface{}, expiration time.Duratio
 
 func setup() (*mockDB, *sdlgo.SdlInstance) {
        m := new(mockDB)
-       i := sdlgo.NewSdlInstance("namespace", m)
+       i := sdlgo.NewSdlInstanceForTest("namespace", m)
        return m, i
 }
 
@@ -165,13 +169,31 @@ func verifySliceInOrder(a, b []string) bool {
 
 }
 
+func TestClose(t *testing.T) {
+       m, i := setup()
+
+       m.On("CloseDB").Return(nil)
+       err := i.Close()
+       assert.Nil(t, err)
+       m.AssertExpectations(t)
+}
+
+func TestCloseReturnError(t *testing.T) {
+       m, i := setup()
+
+       m.On("CloseDB").Return(errors.New("Some error"))
+       err := i.Close()
+       assert.NotNil(t, err)
+       m.AssertExpectations(t)
+}
+
 func TestSubscribeChannel(t *testing.T) {
        m, i := setup()
 
        expectedCB := func(channel string, events ...string) {}
        expectedChannels := []string{"{namespace},channel1", "{namespace},channel2"}
 
-       m.On("SubscribeChannelDB", mock.AnythingOfType("sdlgoredis.ChannelNotificationCb"), "{namespace},", "___", expectedChannels).Return()
+       m.On("SubscribeChannelDB", mock.AnythingOfType("func(string, ...string)"), expectedChannels).Return()
        i.SubscribeChannel(expectedCB, "channel1", "channel2")
        m.AssertExpectations(t)
 }
@@ -587,8 +609,8 @@ func TestRemoveAndPublishIncorrectChannel(t *testing.T) {
 
        m.AssertNotCalled(t, "DelMPub", notExpectedChannelAndEvent, notExpectedKeys)
        m.AssertNotCalled(t, "Del", notExpectedKeys)
-       err := i.RemoveAndPublish([]string{"channel", "event", "channel2"}, []string{})
-       assert.Nil(t, err)
+       err := i.RemoveAndPublish([]string{"channel", "event", "channel2"}, []string{"key1", "key2"})
+       assert.NotNil(t, err)
        m.AssertExpectations(t)
 
 }
@@ -776,12 +798,11 @@ func TestSetIfFailure(t *testing.T) {
 func TestSetIfAndPublishSuccessfully(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedOldData := interface{}("olddata")
        expectedNewData := interface{}("newdata")
-       m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(true, nil)
+       m.On("SetIEPub", expectedChannelAndEvent, expectedKey, expectedOldData, expectedNewData).Return(true, nil)
        status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
        assert.Nil(t, err)
        assert.True(t, status)
@@ -791,12 +812,11 @@ func TestSetIfAndPublishSuccessfully(t *testing.T) {
 func TestSetIfAndPublishIncorrectChannelAndEvent(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedOldData := interface{}("olddata")
        expectedNewData := interface{}("newdata")
-       m.AssertNotCalled(t, "SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData)
+       m.AssertNotCalled(t, "SetIEPub", expectedChannelAndEvent, expectedKey, expectedOldData, expectedNewData)
        m.AssertNotCalled(t, "SetIE", expectedKey, expectedOldData, expectedNewData)
        status, err := i.SetIfAndPublish([]string{"channel", "event1", "channel"}, "key", "olddata", "newdata")
        assert.NotNil(t, err)
@@ -806,12 +826,11 @@ func TestSetIfAndPublishIncorrectChannelAndEvent(t *testing.T) {
 func TestSetIfAndPublishNOKStatus(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedOldData := interface{}("olddata")
        expectedNewData := interface{}("newdata")
-       m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(false, nil)
+       m.On("SetIEPub", expectedChannelAndEvent, expectedKey, expectedOldData, expectedNewData).Return(false, nil)
        status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
        assert.Nil(t, err)
        assert.False(t, status)
@@ -834,12 +853,11 @@ func TestSetIfAndPublishNoChannels(t *testing.T) {
 func TestSetIfNotExistsAndPublishSuccessfully(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedData := interface{}("data")
 
-       m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
+       m.On("SetNXPub", expectedChannelAndEvent, expectedKey, expectedData).Return(true, nil)
        status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
        assert.Nil(t, err)
        assert.True(t, status)
@@ -849,12 +867,11 @@ func TestSetIfNotExistsAndPublishSuccessfully(t *testing.T) {
 func TestSetIfNotExistsAndPublishSeveralEvents(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event1___event2"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event1___event2"}
        expectedKey := "{namespace},key"
        expectedData := interface{}("data")
 
-       m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
+       m.On("SetNXPub", expectedChannelAndEvent, expectedKey, expectedData).Return(true, nil)
        status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
        assert.Nil(t, err)
        assert.True(t, status)
@@ -877,12 +894,11 @@ func TestSetIfNotExistsAndPublishNoChannels(t *testing.T) {
 func TestSetIfNotExistsAndPublishFail(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedData := interface{}("data")
 
-       m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, nil)
+       m.On("SetNXPub", expectedChannelAndEvent, expectedKey, expectedData).Return(false, nil)
        status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
        assert.Nil(t, err)
        assert.False(t, status)
@@ -892,12 +908,11 @@ func TestSetIfNotExistsAndPublishFail(t *testing.T) {
 func TestSetIfNotExistsAndPublishIncorrectChannels(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedData := interface{}("data")
 
-       m.AssertNotCalled(t, "SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData)
+       m.AssertNotCalled(t, "SetNXPub", expectedChannelAndEvent, expectedKey, expectedData)
        m.AssertNotCalled(t, "SetNX", expectedKey, expectedData, 0)
        status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event", "channel2"}, "key", "data")
        assert.NotNil(t, err)
@@ -908,12 +923,11 @@ func TestSetIfNotExistsAndPublishIncorrectChannels(t *testing.T) {
 func TestSetIfNotExistsAndPublishError(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedData := interface{}("data")
 
-       m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, errors.New("Some error"))
+       m.On("SetNXPub", expectedChannelAndEvent, expectedKey, expectedData).Return(false, errors.New("Some error"))
        status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
        assert.NotNil(t, err)
        assert.False(t, status)
@@ -959,12 +973,11 @@ func TestSetIfNotExistsFailure(t *testing.T) {
 func TestRemoveIfAndPublishSuccessfully(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event1___event2"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event1___event2"}
        expectedKey := "{namespace},key"
        expectedValue := interface{}("data")
 
-       m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(true, nil)
+       m.On("DelIEPub", expectedChannelAndEvent, expectedKey, expectedValue).Return(true, nil)
        status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
        assert.Nil(t, err)
        assert.True(t, status)
@@ -974,12 +987,11 @@ func TestRemoveIfAndPublishSuccessfully(t *testing.T) {
 func TestRemoveIfAndPublishNok(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event1___event2"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event1___event2"}
        expectedKey := "{namespace},key"
        expectedValue := interface{}("data")
 
-       m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, nil)
+       m.On("DelIEPub", expectedChannelAndEvent, expectedKey, expectedValue).Return(false, nil)
        status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
        assert.Nil(t, err)
        assert.False(t, status)
@@ -989,12 +1001,11 @@ func TestRemoveIfAndPublishNok(t *testing.T) {
 func TestRemoveIfAndPublishError(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event1___event2"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event1___event2"}
        expectedKey := "{namespace},key"
        expectedValue := interface{}("data")
 
-       m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, errors.New("Some error"))
+       m.On("DelIEPub", expectedChannelAndEvent, expectedKey, expectedValue).Return(false, errors.New("Some error"))
        status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
        assert.NotNil(t, err)
        assert.False(t, status)
@@ -1004,12 +1015,11 @@ func TestRemoveIfAndPublishError(t *testing.T) {
 func TestRemoveIfAndPublishIncorrectChannel(t *testing.T) {
        m, i := setup()
 
-       expectedChannel := "{namespace},channel"
-       expectedEvent := "event"
+       expectedChannelAndEvent := []string{"{namespace},channel", "event"}
        expectedKey := "{namespace},key"
        expectedValue := interface{}("data")
 
-       m.AssertNotCalled(t, "DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue)
+       m.AssertNotCalled(t, "DelIEPub", expectedChannelAndEvent, expectedKey, expectedValue)
        m.AssertNotCalled(t, "DelIE", expectedKey, expectedValue)
        status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel"}, "key", "data")
        assert.NotNil(t, err)