2 Copyright (c) 2019 AT&T Intellectual Property.
3 Copyright (c) 2018-2019 Nokia.
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
9 http://www.apache.org/licenses/LICENSE-2.0
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
24 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
25 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/sdlgoredis"
26 "github.com/stretchr/testify/assert"
27 "github.com/stretchr/testify/mock"
34 func (m *mockDB) SubscribeChannelDB(cb sdlgoredis.ChannelNotificationCb, channelPrefix, eventSeparator string, channels ...string) {
35 m.Called(cb, channelPrefix, eventSeparator, channels)
38 func (m *mockDB) UnsubscribeChannelDB(channels ...string) {
42 func (m *mockDB) MSet(pairs ...interface{}) error {
47 func (m *mockDB) MSetPub(ns, message string, pairs ...interface{}) error {
48 a := m.Called(ns, message, pairs)
52 func (m *mockDB) MGet(keys []string) ([]interface{}, error) {
54 return a.Get(0).([]interface{}), a.Error(1)
57 func (m *mockDB) CloseDB() error {
62 func (m *mockDB) Del(keys []string) error {
67 func (m *mockDB) DelPub(channel, message string, keys []string) error {
68 a := m.Called(channel, message, keys)
72 func (m *mockDB) Keys(pattern string) ([]string, error) {
73 a := m.Called(pattern)
74 return a.Get(0).([]string), a.Error(1)
77 func (m *mockDB) SetIE(key string, oldData, newData interface{}) (bool, error) {
78 a := m.Called(key, oldData, newData)
79 return a.Bool(0), a.Error(1)
82 func (m *mockDB) SetIEPub(channel, message, key string, oldData, newData interface{}) (bool, error) {
83 a := m.Called(channel, message, key, oldData, newData)
84 return a.Bool(0), a.Error(1)
87 func (m *mockDB) SetNX(key string, data interface{}) (bool, error) {
88 a := m.Called(key, data)
89 return a.Bool(0), a.Error(1)
92 func (m *mockDB) SetNXPub(channel, message, key string, data interface{}) (bool, error) {
93 a := m.Called(channel, message, key, data)
94 return a.Bool(0), a.Error(1)
97 func (m *mockDB) DelIE(key string, data interface{}) (bool, error) {
98 a := m.Called(key, data)
99 return a.Bool(0), a.Error(1)
102 func (m *mockDB) DelIEPub(channel, message, key string, data interface{}) (bool, error) {
103 a := m.Called(channel, message, key, data)
104 return a.Bool(0), a.Error(1)
107 func setup() (*mockDB, *sdlgo.SdlInstance) {
109 i := sdlgo.NewSdlInstance("namespace", m)
113 func TestSubscribeChannel(t *testing.T) {
116 expectedCB := func(channel string, events ...string) {}
117 expectedChannels := []string{"{namespace},channel1", "{namespace},channel2"}
119 m.On("SubscribeChannelDB", mock.AnythingOfType("sdlgoredis.ChannelNotificationCb"), "{namespace},", "___", expectedChannels).Return()
120 i.SubscribeChannel(expectedCB, "channel1", "channel2")
121 m.AssertExpectations(t)
124 func TestUnsubscribeChannel(t *testing.T) {
127 expectedChannels := []string{"{namespace},channel1", "{namespace},channel2"}
129 m.On("UnsubscribeChannelDB", expectedChannels).Return()
130 i.UnsubscribeChannel("channel1", "channel2")
131 m.AssertExpectations(t)
133 func TestGetOneKey(t *testing.T) {
136 mgetExpected := []string{"{namespace},key"}
137 mReturn := []interface{}{"somevalue"}
138 mReturnExpected := make(map[string]interface{})
139 mReturnExpected["key"] = "somevalue"
141 m.On("MGet", mgetExpected).Return(mReturn, nil)
142 retVal, err := i.Get([]string{"key"})
144 assert.Equal(t, mReturnExpected, retVal)
145 m.AssertExpectations(t)
148 func TestGetSeveralKeys(t *testing.T) {
151 mgetExpected := []string{"{namespace},key1", "{namespace},key2", "{namespace},key3"}
152 mReturn := []interface{}{"somevalue1", 2, "someothervalue"}
153 mReturnExpected := make(map[string]interface{})
154 mReturnExpected["key1"] = "somevalue1"
155 mReturnExpected["key2"] = 2
156 mReturnExpected["key3"] = "someothervalue"
158 m.On("MGet", mgetExpected).Return(mReturn, nil)
159 retVal, err := i.Get([]string{"key1", "key2", "key3"})
161 assert.Equal(t, mReturnExpected, retVal)
162 m.AssertExpectations(t)
165 func TestGetSeveralKeysSomeFail(t *testing.T) {
168 mgetExpected := []string{"{namespace},key1", "{namespace},key2", "{namespace},key3"}
169 mReturn := []interface{}{"somevalue1", nil, "someothervalue"}
170 mReturnExpected := make(map[string]interface{})
171 mReturnExpected["key1"] = "somevalue1"
172 mReturnExpected["key2"] = nil
173 mReturnExpected["key3"] = "someothervalue"
175 m.On("MGet", mgetExpected).Return(mReturn, nil)
176 retVal, err := i.Get([]string{"key1", "key2", "key3"})
178 assert.Equal(t, mReturnExpected, retVal)
179 m.AssertExpectations(t)
182 func TestGetKeyReturnError(t *testing.T) {
185 mgetExpected := []string{"{namespace},key"}
186 mReturn := []interface{}{nil}
187 mReturnExpected := make(map[string]interface{})
189 m.On("MGet", mgetExpected).Return(mReturn, errors.New("Some error"))
190 retVal, err := i.Get([]string{"key"})
191 assert.NotNil(t, err)
192 assert.Equal(t, mReturnExpected, retVal)
193 m.AssertExpectations(t)
196 func TestGetEmptyList(t *testing.T) {
199 mgetExpected := []string{}
201 retval, err := i.Get([]string{})
203 assert.Len(t, retval, 0)
204 m.AssertNotCalled(t, "MGet", mgetExpected)
207 func TestWriteOneKey(t *testing.T) {
210 msetExpected := []interface{}{"{namespace},key1", "data1"}
212 m.On("MSet", msetExpected).Return(nil)
213 err := i.Set("key1", "data1")
215 m.AssertExpectations(t)
218 func TestWriteByteSliceAsValue(t *testing.T) {
221 msetExpected := []interface{}{"{namespace},key1", []byte{1, 2, 3, 4, 5}}
223 m.On("MSet", msetExpected).Return(nil)
224 err := i.Set("key1", []byte{1, 2, 3, 4, 5})
226 m.AssertExpectations(t)
229 func TestWriteByteSliceAsValueMixed(t *testing.T) {
232 msetExpected := []interface{}{"{namespace},key1", []byte{1, 2, 3, 4, 5}, "{namespace},key2", "value2"}
234 m.On("MSet", msetExpected).Return(nil)
235 err := i.Set("key1", []byte{1, 2, 3, 4, 5}, []string{"key2", "value2"})
237 m.AssertExpectations(t)
240 func TestWriteByteArrayAsValue(t *testing.T) {
243 msetExpected := []interface{}{"{namespace},key1", [5]byte{1, 2, 3, 4, 5}}
245 m.On("MSet", msetExpected).Return(nil)
246 err := i.Set("key1", [5]byte{1, 2, 3, 4, 5})
248 m.AssertExpectations(t)
251 func TestWriteMixed(t *testing.T) {
254 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2", "{namespace},key3", "data3"}
256 m.On("MSet", msetExpected).Return(nil)
257 err := i.Set("key1", "data1", []string{"key2", "data2"}, [2]string{"key3", "data3"})
259 m.AssertExpectations(t)
262 func TestWriteIncorrectMixed(t *testing.T) {
265 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2", "{namespace},key3", "data3"}
267 m.AssertNotCalled(t, "MSet", msetExpected)
268 err := i.Set("key1", []string{"key2", "data2"}, [2]string{"key3", "data3"})
269 assert.NotNil(t, err)
270 m.AssertExpectations(t)
272 func TestWriteIncorrectPairs(t *testing.T) {
275 msetExpected := []interface{}{}
277 m.AssertNotCalled(t, "MSet", msetExpected)
279 assert.NotNil(t, err)
280 m.AssertExpectations(t)
282 func TestWriteSeveralKeysSlice(t *testing.T) {
285 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", 22}
287 m.On("MSet", msetExpected).Return(nil)
288 err := i.Set([]interface{}{"key1", "data1", "key2", 22})
290 m.AssertExpectations(t)
294 func TestWriteSeveralKeysIncorrectSlice(t *testing.T) {
297 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", 22}
299 m.AssertNotCalled(t, "MSet", msetExpected)
300 err := i.Set([]interface{}{"key1", "data1", "key2"})
301 assert.NotNil(t, err)
302 m.AssertExpectations(t)
306 func TestWriteSeveralKeysArray(t *testing.T) {
309 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2"}
311 m.On("MSet", msetExpected).Return(nil)
312 err := i.Set([4]string{"key1", "data1", "key2", "data2"})
314 m.AssertExpectations(t)
317 func TestWriteSeveralKeysIncorrectArray(t *testing.T) {
320 msetExpected := []interface{}{}
322 m.AssertNotCalled(t, "MSet", msetExpected)
323 err := i.Set([3]string{"key1", "data1", "key2"})
324 assert.NotNil(t, err)
325 m.AssertExpectations(t)
328 func TestWriteFail(t *testing.T) {
331 msetExpected := []interface{}{"{namespace},key1", "data1"}
333 m.On("MSet", msetExpected).Return(errors.New("Some error"))
334 err := i.Set("key1", "data1")
335 assert.NotNil(t, err)
336 m.AssertExpectations(t)
339 func TestWriteEmptyList(t *testing.T) {
342 msetExpected := []interface{}{}
345 m.AssertNotCalled(t, "MSet", msetExpected)
348 func TestWriteAndPublishOneKeyOneChannel(t *testing.T) {
351 expectedChannel := "{namespace},channel"
352 expectedMessage := "event"
353 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
355 m.On("MSetPub", expectedChannel, expectedMessage, expectedKeyVal).Return(nil)
356 m.AssertNotCalled(t, "MSet", expectedKeyVal)
357 err := i.SetAndPublish([]string{"channel", "event"}, "key1", "data1")
359 m.AssertExpectations(t)
361 func TestWriteAndPublishOneKeyOneChannelTwoEvents(t *testing.T) {
364 expectedChannel := "{namespace},channel"
365 expectedMessage := "event1___event2"
366 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
368 m.On("MSetPub", expectedChannel, expectedMessage, expectedKeyVal).Return(nil)
369 m.AssertNotCalled(t, "MSet", expectedKeyVal)
370 err := i.SetAndPublish([]string{"channel", "event1", "channel", "event2"}, "key1", "data1")
372 m.AssertExpectations(t)
375 func TestWriteAndPublishIncorrectChannelAndEvent(t *testing.T) {
378 expectedChannel := "{namespace},channel"
379 expectedMessage := "event1___event2"
380 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
381 m.AssertNotCalled(t, "MSetPub", expectedChannel, expectedMessage, expectedKeyVal)
382 m.AssertNotCalled(t, "MSet", expectedKeyVal)
383 err := i.SetAndPublish([]string{"channel", "event1", "channel"}, "key1", "data1")
384 assert.NotNil(t, err)
385 m.AssertExpectations(t)
388 func TestWriteAndPublishNotAllowedCharactersInEvents(t *testing.T) {
391 expectedChannel := "{namespace},channel"
392 expectedMessage := "event1___event2"
393 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
394 m.AssertNotCalled(t, "MSetPub", expectedChannel, expectedMessage, expectedKeyVal)
395 m.AssertNotCalled(t, "MSet", expectedKeyVal)
396 err := i.SetAndPublish([]string{"channel", "event1___event2"}, "key1", "data1")
397 assert.NotNil(t, err)
398 m.AssertExpectations(t)
401 func TestWriteAndPublishNoData(t *testing.T) {
404 expectedChannel := "{namespace},channel"
405 expectedMessage := "event"
406 expectedKeyVal := []interface{}{"key"}
408 m.AssertNotCalled(t, "MSetPub", expectedChannel, expectedMessage, expectedKeyVal)
409 m.AssertNotCalled(t, "MSet", expectedKeyVal)
410 err := i.SetAndPublish([]string{"channel", "event"}, []interface{}{"key"})
411 assert.NotNil(t, err)
412 m.AssertExpectations(t)
415 func TestWriteAndPublishNoChannelEvent(t *testing.T) {
418 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
420 m.On("MSet", expectedKeyVal).Return(nil)
421 m.AssertNotCalled(t, "MSetPub", "", "", expectedKeyVal)
422 err := i.SetAndPublish([]string{}, "key1", "data1")
424 m.AssertExpectations(t)
428 func TestRemoveAndPublishSuccessfully(t *testing.T) {
431 expectedChannel := "{namespace},channel"
432 expectedEvent := "event"
433 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
435 m.On("DelPub", expectedChannel, expectedEvent, expectedKeys).Return(nil)
436 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{"key1", "key2"})
438 m.AssertExpectations(t)
440 func TestRemoveAndPublishFail(t *testing.T) {
443 expectedChannel := "{namespace},channel"
444 expectedEvent := "event"
445 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
447 m.On("DelPub", expectedChannel, expectedEvent, expectedKeys).Return(errors.New("Some error"))
448 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{"key1", "key2"})
449 assert.NotNil(t, err)
450 m.AssertExpectations(t)
453 func TestRemoveAndPublishNoChannels(t *testing.T) {
456 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
458 m.On("Del", expectedKeys).Return(nil)
459 err := i.RemoveAndPublish([]string{}, []string{"key1", "key2"})
461 m.AssertExpectations(t)
464 func TestRemoveAndPublishIncorrectChannel(t *testing.T) {
467 notExpectedChannel := "{namespace},channel"
468 notExpectedEvent := "event"
469 notExpectedKeys := []string{"{namespace},key"}
471 m.AssertNotCalled(t, "DelPub", notExpectedChannel, notExpectedEvent, notExpectedKeys)
472 m.AssertNotCalled(t, "Del", notExpectedKeys)
473 err := i.RemoveAndPublish([]string{"channel", "event", "channel2"}, []string{})
475 m.AssertExpectations(t)
478 func TestRemoveAndPublishNoKeys(t *testing.T) {
481 notExpectedChannel := "{namespace},channel"
482 notExpectedEvent := "event"
483 notExpectedKeys := []string{"{namespace},key"}
485 m.AssertNotCalled(t, "DelPub", notExpectedChannel, notExpectedEvent, notExpectedKeys)
486 m.AssertNotCalled(t, "Del", notExpectedKeys)
487 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{})
489 m.AssertExpectations(t)
491 func TestRemoveAndPublishNoChannelsError(t *testing.T) {
494 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
496 m.On("Del", expectedKeys).Return(errors.New("Some error"))
497 err := i.RemoveAndPublish([]string{}, []string{"key1", "key2"})
498 assert.NotNil(t, err)
499 m.AssertExpectations(t)
501 func TestRemoveSuccessfully(t *testing.T) {
504 msetExpected := []string{"{namespace},key1", "{namespace},key2"}
505 m.On("Del", msetExpected).Return(nil)
507 err := i.Remove([]string{"key1", "key2"})
509 m.AssertExpectations(t)
512 func TestRemoveFail(t *testing.T) {
515 msetExpected := []string{"{namespace},key"}
516 m.On("Del", msetExpected).Return(errors.New("Some error"))
518 err := i.Remove([]string{"key"})
519 assert.NotNil(t, err)
520 m.AssertExpectations(t)
523 func TestRemoveEmptyList(t *testing.T) {
526 err := i.Remove([]string{})
528 m.AssertNotCalled(t, "Del", []string{})
531 func TestGetAllSuccessfully(t *testing.T) {
534 mKeysExpected := string("{namespace},*")
535 mReturnExpected := []string{"{namespace},key1", "{namespace},key2"}
536 expectedReturn := []string{"key1", "key2"}
537 m.On("Keys", mKeysExpected).Return(mReturnExpected, nil)
538 retVal, err := i.GetAll()
540 assert.Equal(t, expectedReturn, retVal)
541 m.AssertExpectations(t)
544 func TestGetAllFail(t *testing.T) {
547 mKeysExpected := string("{namespace},*")
548 mReturnExpected := []string{}
549 m.On("Keys", mKeysExpected).Return(mReturnExpected, errors.New("some error"))
550 retVal, err := i.GetAll()
551 assert.NotNil(t, err)
552 assert.Nil(t, retVal)
553 assert.Equal(t, len(retVal), 0)
554 m.AssertExpectations(t)
557 func TestGetAllReturnEmpty(t *testing.T) {
560 mKeysExpected := string("{namespace},*")
561 var mReturnExpected []string = nil
562 m.On("Keys", mKeysExpected).Return(mReturnExpected, nil)
563 retVal, err := i.GetAll()
565 assert.Nil(t, retVal)
566 assert.Equal(t, len(retVal), 0)
567 m.AssertExpectations(t)
571 func TestRemoveAllSuccessfully(t *testing.T) {
574 mKeysExpected := string("{namespace},*")
575 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
576 mDelExpected := mKeysReturn
577 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
578 m.On("Del", mDelExpected).Return(nil)
581 m.AssertExpectations(t)
584 func TestRemoveAllNoKeysFound(t *testing.T) {
587 mKeysExpected := string("{namespace},*")
588 var mKeysReturn []string = nil
589 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
590 m.AssertNumberOfCalls(t, "Del", 0)
593 m.AssertExpectations(t)
596 func TestRemoveAllKeysReturnError(t *testing.T) {
599 mKeysExpected := string("{namespace},*")
600 var mKeysReturn []string = nil
601 m.On("Keys", mKeysExpected).Return(mKeysReturn, errors.New("Some error"))
602 m.AssertNumberOfCalls(t, "Del", 0)
604 assert.NotNil(t, err)
605 m.AssertExpectations(t)
608 func TestRemoveAllDelReturnError(t *testing.T) {
611 mKeysExpected := string("{namespace},*")
612 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
613 mDelExpected := mKeysReturn
614 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
615 m.On("Del", mDelExpected).Return(errors.New("Some Error"))
617 assert.NotNil(t, err)
618 m.AssertExpectations(t)
621 func TestSetIfSuccessfullyOkStatus(t *testing.T) {
624 mSetIEExpectedKey := string("{namespace},key1")
625 mSetIEExpectedOldData := interface{}("olddata")
626 mSetIEExpectedNewData := interface{}("newdata")
627 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(true, nil)
628 status, err := i.SetIf("key1", "olddata", "newdata")
630 assert.True(t, status)
631 m.AssertExpectations(t)
634 func TestSetIfSuccessfullyNOKStatus(t *testing.T) {
637 mSetIEExpectedKey := string("{namespace},key1")
638 mSetIEExpectedOldData := interface{}("olddata")
639 mSetIEExpectedNewData := interface{}("newdata")
640 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(false, nil)
641 status, err := i.SetIf("key1", "olddata", "newdata")
643 assert.False(t, status)
644 m.AssertExpectations(t)
647 func TestSetIfFailure(t *testing.T) {
650 mSetIEExpectedKey := string("{namespace},key1")
651 mSetIEExpectedOldData := interface{}("olddata")
652 mSetIEExpectedNewData := interface{}("newdata")
653 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(false, errors.New("Some error"))
654 status, err := i.SetIf("key1", "olddata", "newdata")
655 assert.NotNil(t, err)
656 assert.False(t, status)
657 m.AssertExpectations(t)
660 func TestSetIfAndPublishSuccessfully(t *testing.T) {
663 expectedChannel := "{namespace},channel"
664 expectedEvent := "event"
665 expectedKey := "{namespace},key"
666 expectedOldData := interface{}("olddata")
667 expectedNewData := interface{}("newdata")
668 m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(true, nil)
669 status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
671 assert.True(t, status)
672 m.AssertExpectations(t)
675 func TestSetIfAndPublishIncorrectChannelAndEvent(t *testing.T) {
678 expectedChannel := "{namespace},channel"
679 expectedEvent := "event"
680 expectedKey := "{namespace},key"
681 expectedOldData := interface{}("olddata")
682 expectedNewData := interface{}("newdata")
683 m.AssertNotCalled(t, "SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData)
684 m.AssertNotCalled(t, "SetIE", expectedKey, expectedOldData, expectedNewData)
685 status, err := i.SetIfAndPublish([]string{"channel", "event1", "channel"}, "key", "olddata", "newdata")
686 assert.NotNil(t, err)
687 assert.False(t, status)
688 m.AssertExpectations(t)
690 func TestSetIfAndPublishNOKStatus(t *testing.T) {
693 expectedChannel := "{namespace},channel"
694 expectedEvent := "event"
695 expectedKey := "{namespace},key"
696 expectedOldData := interface{}("olddata")
697 expectedNewData := interface{}("newdata")
698 m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(false, nil)
699 status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
701 assert.False(t, status)
702 m.AssertExpectations(t)
705 func TestSetIfAndPublishNoChannels(t *testing.T) {
708 expectedKey := "{namespace},key"
709 expectedOldData := interface{}("olddata")
710 expectedNewData := interface{}("newdata")
711 m.On("SetIE", expectedKey, expectedOldData, expectedNewData).Return(true, nil)
712 status, err := i.SetIfAndPublish([]string{}, "key", "olddata", "newdata")
714 assert.True(t, status)
715 m.AssertExpectations(t)
718 func TestSetIfNotExistsAndPublishSuccessfully(t *testing.T) {
721 expectedChannel := "{namespace},channel"
722 expectedEvent := "event"
723 expectedKey := "{namespace},key"
724 expectedData := interface{}("data")
726 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
727 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
729 assert.True(t, status)
730 m.AssertExpectations(t)
733 func TestSetIfNotExistsAndPublishSeveralEvents(t *testing.T) {
736 expectedChannel := "{namespace},channel"
737 expectedEvent := "event1___event2"
738 expectedKey := "{namespace},key"
739 expectedData := interface{}("data")
741 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
742 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
744 assert.True(t, status)
745 m.AssertExpectations(t)
748 func TestSetIfNotExistsAndPublishNoChannels(t *testing.T) {
751 expectedKey := "{namespace},key"
752 expectedData := interface{}("data")
754 m.On("SetNX", expectedKey, expectedData).Return(true, nil)
755 status, err := i.SetIfNotExistsAndPublish([]string{}, "key", "data")
757 assert.True(t, status)
758 m.AssertExpectations(t)
761 func TestSetIfNotExistsAndPublishFail(t *testing.T) {
764 expectedChannel := "{namespace},channel"
765 expectedEvent := "event"
766 expectedKey := "{namespace},key"
767 expectedData := interface{}("data")
769 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, nil)
770 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
772 assert.False(t, status)
773 m.AssertExpectations(t)
776 func TestSetIfNotExistsAndPublishIncorrectChannels(t *testing.T) {
779 expectedChannel := "{namespace},channel"
780 expectedEvent := "event"
781 expectedKey := "{namespace},key"
782 expectedData := interface{}("data")
784 m.AssertNotCalled(t, "SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData)
785 m.AssertNotCalled(t, "SetNX", expectedKey, expectedData)
786 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event", "channel2"}, "key", "data")
787 assert.NotNil(t, err)
788 assert.False(t, status)
789 m.AssertExpectations(t)
792 func TestSetIfNotExistsAndPublishError(t *testing.T) {
795 expectedChannel := "{namespace},channel"
796 expectedEvent := "event"
797 expectedKey := "{namespace},key"
798 expectedData := interface{}("data")
800 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, errors.New("Some error"))
801 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
802 assert.NotNil(t, err)
803 assert.False(t, status)
804 m.AssertExpectations(t)
807 func TestSetIfNotExistsSuccessfullyOkStatus(t *testing.T) {
810 mSetNXExpectedKey := string("{namespace},key1")
811 mSetNXExpectedData := interface{}("data")
812 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData).Return(true, nil)
813 status, err := i.SetIfNotExists("key1", "data")
815 assert.True(t, status)
816 m.AssertExpectations(t)
819 func TestSetIfNotExistsSuccessfullyNOKStatus(t *testing.T) {
822 mSetNXExpectedKey := string("{namespace},key1")
823 mSetNXExpectedData := interface{}("data")
824 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData).Return(false, nil)
825 status, err := i.SetIfNotExists("key1", "data")
827 assert.False(t, status)
828 m.AssertExpectations(t)
831 func TestSetIfNotExistsFailure(t *testing.T) {
834 mSetNXExpectedKey := string("{namespace},key1")
835 mSetNXExpectedData := interface{}("data")
836 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData).Return(false, errors.New("Some error"))
837 status, err := i.SetIfNotExists("key1", "data")
838 assert.NotNil(t, err)
839 assert.False(t, status)
840 m.AssertExpectations(t)
843 func TestRemoveIfAndPublishSuccessfully(t *testing.T) {
846 expectedChannel := "{namespace},channel"
847 expectedEvent := "event1___event2"
848 expectedKey := "{namespace},key"
849 expectedValue := interface{}("data")
851 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(true, nil)
852 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
854 assert.True(t, status)
855 m.AssertExpectations(t)
858 func TestRemoveIfAndPublishNok(t *testing.T) {
861 expectedChannel := "{namespace},channel"
862 expectedEvent := "event1___event2"
863 expectedKey := "{namespace},key"
864 expectedValue := interface{}("data")
866 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, nil)
867 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
869 assert.False(t, status)
870 m.AssertExpectations(t)
873 func TestRemoveIfAndPublishError(t *testing.T) {
876 expectedChannel := "{namespace},channel"
877 expectedEvent := "event1___event2"
878 expectedKey := "{namespace},key"
879 expectedValue := interface{}("data")
881 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, errors.New("Some error"))
882 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
883 assert.NotNil(t, err)
884 assert.False(t, status)
885 m.AssertExpectations(t)
888 func TestRemoveIfAndPublishIncorrectChannel(t *testing.T) {
891 expectedChannel := "{namespace},channel"
892 expectedEvent := "event"
893 expectedKey := "{namespace},key"
894 expectedValue := interface{}("data")
896 m.AssertNotCalled(t, "DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue)
897 m.AssertNotCalled(t, "DelIE", expectedKey, expectedValue)
898 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel"}, "key", "data")
899 assert.NotNil(t, err)
900 assert.False(t, status)
901 m.AssertExpectations(t)
904 func TestRemoveIfAndPublishNoChannels(t *testing.T) {
907 expectedKey := "{namespace},key"
908 expectedValue := interface{}("data")
910 m.On("DelIE", expectedKey, expectedValue).Return(true, nil)
911 status, err := i.RemoveIfAndPublish([]string{}, "key", "data")
913 assert.True(t, status)
914 m.AssertExpectations(t)
917 func TestRemoveIfSuccessfullyOkStatus(t *testing.T) {
920 mDelIEExpectedKey := string("{namespace},key1")
921 mDelIEExpectedData := interface{}("data")
922 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(true, nil)
923 status, err := i.RemoveIf("key1", "data")
925 assert.True(t, status)
926 m.AssertExpectations(t)
929 func TestRemoveIfSuccessfullyNOKStatus(t *testing.T) {
932 mDelIEExpectedKey := string("{namespace},key1")
933 mDelIEExpectedData := interface{}("data")
934 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(false, nil)
935 status, err := i.RemoveIf("key1", "data")
937 assert.False(t, status)
938 m.AssertExpectations(t)
941 func TestRemoveIfFailure(t *testing.T) {
944 mDelIEExpectedKey := string("{namespace},key1")
945 mDelIEExpectedData := interface{}("data")
946 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(true, errors.New("Some error"))
947 status, err := i.RemoveIf("key1", "data")
948 assert.NotNil(t, err)
949 assert.False(t, status)
950 m.AssertExpectations(t)
953 func TestRemoveAllAndPublishSuccessfully(t *testing.T) {
956 mKeysExpected := string("{namespace},*")
957 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
958 mDelExpected := mKeysReturn
959 expectedChannel := "{namespace},channel"
960 expectedEvent := "event"
961 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
962 m.On("DelPub", expectedChannel, expectedEvent, mDelExpected).Return(nil)
963 err := i.RemoveAllAndPublish([]string{"channel", "event"})
965 m.AssertExpectations(t)
968 func TestRemoveAllAndPublishKeysReturnError(t *testing.T) {
971 mKeysExpected := string("{namespace},*")
972 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
973 mDelExpected := mKeysReturn
974 expectedChannel := "{namespace},channel"
975 expectedEvent := "event"
976 m.On("Keys", mKeysExpected).Return(mKeysReturn, errors.New("Some error"))
977 m.AssertNotCalled(t, "DelPub", expectedChannel, expectedEvent, mDelExpected)
978 err := i.RemoveAllAndPublish([]string{"channel", "event"})
979 assert.NotNil(t, err)
980 m.AssertExpectations(t)
983 func TestRemoveAllAndPublishKeysDelReturnsError(t *testing.T) {
986 mKeysExpected := string("{namespace},*")
987 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
988 mDelExpected := mKeysReturn
989 expectedChannel := "{namespace},channel"
990 expectedEvent := "event"
991 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
992 m.On("DelPub", expectedChannel, expectedEvent, mDelExpected).Return(errors.New("Some error"))
993 err := i.RemoveAllAndPublish([]string{"channel", "event"})
994 assert.NotNil(t, err)
995 m.AssertExpectations(t)
998 func TestRemoveAllAndPublishKeysEventsWithIllegalCharacters(t *testing.T) {
1001 mKeysExpected := string("{namespace},*")
1002 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1003 mDelExpected := mKeysReturn
1004 expectedChannel := "{namespace},channel"
1005 expectedEvent := "event"
1006 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1007 m.AssertNotCalled(t, "DelPub", expectedChannel, expectedEvent, mDelExpected)
1008 err := i.RemoveAllAndPublish([]string{"channel", "event___anotherEvent"})
1009 assert.NotNil(t, err)
1010 m.AssertExpectations(t)
1014 func TestRemoveAllAndPublishNoChannels(t *testing.T) {
1017 mKeysExpected := string("{namespace},*")
1018 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1019 mDelExpected := mKeysReturn
1020 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1021 m.On("Del", mDelExpected).Return(nil)
1022 m.AssertNotCalled(t, "DelPub", "", "", mDelExpected)
1023 err := i.RemoveAllAndPublish([]string{})
1025 m.AssertExpectations(t)
1028 func TestRemoveAllAndPublishIncorrectChannel(t *testing.T) {
1031 mKeysExpected := string("{namespace},*")
1032 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1033 mDelExpected := mKeysReturn
1034 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1035 m.AssertNotCalled(t, "DelPub", "", "", mDelExpected)
1036 err := i.RemoveAllAndPublish([]string{"channel", "event", "channel2"})
1037 assert.NotNil(t, err)
1038 m.AssertExpectations(t)