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.
19 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 * platform project (RICP).
31 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
32 "github.com/stretchr/testify/assert"
33 "github.com/stretchr/testify/mock"
40 func (m *mockDB) SubscribeChannelDB(cb func(string, ...string), channelPrefix, eventSeparator string, channels ...string) {
41 m.Called(cb, channelPrefix, eventSeparator, channels)
44 func (m *mockDB) UnsubscribeChannelDB(channels ...string) {
48 func (m *mockDB) MSet(pairs ...interface{}) error {
53 func (m *mockDB) MSetMPub(channelsAndEvents []string, pairs ...interface{}) error {
54 a := m.Called(channelsAndEvents, pairs)
58 func (m *mockDB) MGet(keys []string) ([]interface{}, error) {
60 return a.Get(0).([]interface{}), a.Error(1)
63 func (m *mockDB) CloseDB() error {
68 func (m *mockDB) Del(keys []string) error {
73 func (m *mockDB) DelMPub(channelsAndEvents []string, keys []string) error {
74 a := m.Called(channelsAndEvents, keys)
78 func (m *mockDB) Keys(pattern string) ([]string, error) {
79 a := m.Called(pattern)
80 return a.Get(0).([]string), a.Error(1)
83 func (m *mockDB) SetIE(key string, oldData, newData interface{}) (bool, error) {
84 a := m.Called(key, oldData, newData)
85 return a.Bool(0), a.Error(1)
88 func (m *mockDB) SetIEPub(channel, message, key string, oldData, newData interface{}) (bool, error) {
89 a := m.Called(channel, message, key, oldData, newData)
90 return a.Bool(0), a.Error(1)
93 func (m *mockDB) SetNX(key string, data interface{}, expiration time.Duration) (bool, error) {
94 a := m.Called(key, data, expiration)
95 return a.Bool(0), a.Error(1)
98 func (m *mockDB) SetNXPub(channel, message, key string, data interface{}) (bool, error) {
99 a := m.Called(channel, message, key, data)
100 return a.Bool(0), a.Error(1)
103 func (m *mockDB) DelIE(key string, data interface{}) (bool, error) {
104 a := m.Called(key, data)
105 return a.Bool(0), a.Error(1)
108 func (m *mockDB) DelIEPub(channel, message, key string, data interface{}) (bool, error) {
109 a := m.Called(channel, message, key, data)
110 return a.Bool(0), a.Error(1)
113 func (m *mockDB) SAdd(key string, data ...interface{}) error {
114 a := m.Called(key, data)
118 func (m *mockDB) SRem(key string, data ...interface{}) error {
119 a := m.Called(key, data)
122 func (m *mockDB) SMembers(key string) ([]string, error) {
124 return a.Get(0).([]string), a.Error(1)
127 func (m *mockDB) SIsMember(key string, data interface{}) (bool, error) {
128 a := m.Called(key, data)
129 return a.Bool(0), a.Error(1)
132 func (m *mockDB) SCard(key string) (int64, error) {
134 return a.Get(0).(int64), a.Error(1)
137 func (m *mockDB) PTTL(key string) (time.Duration, error) {
139 return a.Get(0).(time.Duration), a.Error(1)
142 func (m *mockDB) PExpireIE(key string, data interface{}, expiration time.Duration) error {
143 a := m.Called(key, data, expiration)
147 func setup() (*mockDB, *sdlgo.SdlInstance) {
149 i := sdlgo.NewSdlInstanceForTest("namespace", m)
153 func verifySliceInOrder(a, b []string) bool {
154 for i, v := range a {
157 for j, x := range b {
158 if j%2 == 0 && x == v && a[i+1] == b[j+1] {
172 func TestSubscribeChannel(t *testing.T) {
175 expectedCB := func(channel string, events ...string) {}
176 expectedChannels := []string{"{namespace},channel1", "{namespace},channel2"}
178 m.On("SubscribeChannelDB", mock.AnythingOfType("func(string, ...string)"), "{namespace},", "___", expectedChannels).Return()
179 i.SubscribeChannel(expectedCB, "channel1", "channel2")
180 m.AssertExpectations(t)
183 func TestUnsubscribeChannel(t *testing.T) {
186 expectedChannels := []string{"{namespace},channel1", "{namespace},channel2"}
188 m.On("UnsubscribeChannelDB", expectedChannels).Return()
189 i.UnsubscribeChannel("channel1", "channel2")
190 m.AssertExpectations(t)
192 func TestGetOneKey(t *testing.T) {
195 mgetExpected := []string{"{namespace},key"}
196 mReturn := []interface{}{"somevalue"}
197 mReturnExpected := make(map[string]interface{})
198 mReturnExpected["key"] = "somevalue"
200 m.On("MGet", mgetExpected).Return(mReturn, nil)
201 retVal, err := i.Get([]string{"key"})
203 assert.Equal(t, mReturnExpected, retVal)
204 m.AssertExpectations(t)
207 func TestGetSeveralKeys(t *testing.T) {
210 mgetExpected := []string{"{namespace},key1", "{namespace},key2", "{namespace},key3"}
211 mReturn := []interface{}{"somevalue1", 2, "someothervalue"}
212 mReturnExpected := make(map[string]interface{})
213 mReturnExpected["key1"] = "somevalue1"
214 mReturnExpected["key2"] = 2
215 mReturnExpected["key3"] = "someothervalue"
217 m.On("MGet", mgetExpected).Return(mReturn, nil)
218 retVal, err := i.Get([]string{"key1", "key2", "key3"})
220 assert.Equal(t, mReturnExpected, retVal)
221 m.AssertExpectations(t)
224 func TestGetSeveralKeysSomeFail(t *testing.T) {
227 mgetExpected := []string{"{namespace},key1", "{namespace},key2", "{namespace},key3"}
228 mReturn := []interface{}{"somevalue1", nil, "someothervalue"}
229 mReturnExpected := make(map[string]interface{})
230 mReturnExpected["key1"] = "somevalue1"
231 mReturnExpected["key2"] = nil
232 mReturnExpected["key3"] = "someothervalue"
234 m.On("MGet", mgetExpected).Return(mReturn, nil)
235 retVal, err := i.Get([]string{"key1", "key2", "key3"})
237 assert.Equal(t, mReturnExpected, retVal)
238 m.AssertExpectations(t)
241 func TestGetKeyReturnError(t *testing.T) {
244 mgetExpected := []string{"{namespace},key"}
245 mReturn := []interface{}{nil}
246 mReturnExpected := make(map[string]interface{})
248 m.On("MGet", mgetExpected).Return(mReturn, errors.New("Some error"))
249 retVal, err := i.Get([]string{"key"})
250 assert.NotNil(t, err)
251 assert.Equal(t, mReturnExpected, retVal)
252 m.AssertExpectations(t)
255 func TestGetEmptyList(t *testing.T) {
258 mgetExpected := []string{}
260 retval, err := i.Get([]string{})
262 assert.Len(t, retval, 0)
263 m.AssertNotCalled(t, "MGet", mgetExpected)
266 func TestWriteOneKey(t *testing.T) {
269 msetExpected := []interface{}{"{namespace},key1", "data1"}
271 m.On("MSet", msetExpected).Return(nil)
272 err := i.Set("key1", "data1")
274 m.AssertExpectations(t)
277 func TestWriteByteSliceAsValue(t *testing.T) {
280 msetExpected := []interface{}{"{namespace},key1", []byte{1, 2, 3, 4, 5}}
282 m.On("MSet", msetExpected).Return(nil)
283 err := i.Set("key1", []byte{1, 2, 3, 4, 5})
285 m.AssertExpectations(t)
288 func TestWriteByteSliceAsValueMixed(t *testing.T) {
291 msetExpected := []interface{}{"{namespace},key1", []byte{1, 2, 3, 4, 5}, "{namespace},key2", "value2"}
293 m.On("MSet", msetExpected).Return(nil)
294 err := i.Set("key1", []byte{1, 2, 3, 4, 5}, []string{"key2", "value2"})
296 m.AssertExpectations(t)
299 func TestWriteByteArrayAsValue(t *testing.T) {
302 msetExpected := []interface{}{"{namespace},key1", [5]byte{1, 2, 3, 4, 5}}
304 m.On("MSet", msetExpected).Return(nil)
305 err := i.Set("key1", [5]byte{1, 2, 3, 4, 5})
307 m.AssertExpectations(t)
310 func TestWriteMapAsInput(t *testing.T) {
313 setExpected := []interface{}{"{namespace},key1", "string123",
314 "{namespace},key22", 12,
315 "{namespace},key333", []byte{1, 2, 3, 4, 5}}
316 inputMap := map[string]interface{}{
319 "key333": []byte{1, 2, 3, 4, 5},
322 m.On("MSet", mock.MatchedBy(func(input []interface{}) bool {
323 for _, v := range input {
325 for _, x := range setExpected {
326 found = reflect.DeepEqual(x, v)
338 err := i.Set(inputMap)
340 m.AssertExpectations(t)
343 func TestWriteMixed(t *testing.T) {
346 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2", "{namespace},key3", "data3"}
348 m.On("MSet", msetExpected).Return(nil)
349 err := i.Set("key1", "data1", []string{"key2", "data2"}, [2]string{"key3", "data3"})
351 m.AssertExpectations(t)
354 func TestWriteIncorrectMixed(t *testing.T) {
357 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2", "{namespace},key3", "data3"}
359 m.AssertNotCalled(t, "MSet", msetExpected)
360 err := i.Set("key1", []string{"key2", "data2"}, [2]string{"key3", "data3"})
361 assert.NotNil(t, err)
362 m.AssertExpectations(t)
364 func TestWriteIncorrectPairs(t *testing.T) {
367 msetExpected := []interface{}{}
369 m.AssertNotCalled(t, "MSet", msetExpected)
371 assert.NotNil(t, err)
372 m.AssertExpectations(t)
374 func TestWriteSeveralKeysSlice(t *testing.T) {
377 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", 22}
379 m.On("MSet", msetExpected).Return(nil)
380 err := i.Set([]interface{}{"key1", "data1", "key2", 22})
382 m.AssertExpectations(t)
386 func TestWriteSeveralKeysIncorrectSlice(t *testing.T) {
389 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", 22}
391 m.AssertNotCalled(t, "MSet", msetExpected)
392 err := i.Set([]interface{}{"key1", "data1", "key2"})
393 assert.NotNil(t, err)
394 m.AssertExpectations(t)
398 func TestWriteSeveralKeysArray(t *testing.T) {
401 msetExpected := []interface{}{"{namespace},key1", "data1", "{namespace},key2", "data2"}
403 m.On("MSet", msetExpected).Return(nil)
404 err := i.Set([4]string{"key1", "data1", "key2", "data2"})
406 m.AssertExpectations(t)
409 func TestWriteSeveralKeysIncorrectArray(t *testing.T) {
412 msetExpected := []interface{}{}
414 m.AssertNotCalled(t, "MSet", msetExpected)
415 err := i.Set([3]string{"key1", "data1", "key2"})
416 assert.NotNil(t, err)
417 m.AssertExpectations(t)
420 func TestWriteFail(t *testing.T) {
423 msetExpected := []interface{}{"{namespace},key1", "data1"}
425 m.On("MSet", msetExpected).Return(errors.New("Some error"))
426 err := i.Set("key1", "data1")
427 assert.NotNil(t, err)
428 m.AssertExpectations(t)
431 func TestWriteEmptyList(t *testing.T) {
434 msetExpected := []interface{}{}
437 m.AssertNotCalled(t, "MSet", msetExpected)
440 func TestWriteAndPublishOneKeyOneChannel(t *testing.T) {
443 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
444 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
446 m.On("MSetMPub", expectedChannelAndEvent, expectedKeyVal).Return(nil)
447 m.AssertNotCalled(t, "MSet", expectedKeyVal)
448 err := i.SetAndPublish([]string{"channel", "event"}, "key1", "data1")
450 m.AssertExpectations(t)
453 func TestWriteAndPublishSeveralChannelsAndEvents(t *testing.T) {
456 expectedChannelsAndEvents := []string{"{namespace},channel1", "event1___event2",
457 "{namespace},channel2", "event3___event4"}
458 expectedKeyVal := []interface{}{"{namespace},key", "data"}
460 verifyChannelAndEvent := func(input []string) bool {
461 return verifySliceInOrder(input, expectedChannelsAndEvents)
463 m.On("MSetMPub", mock.MatchedBy(verifyChannelAndEvent), expectedKeyVal).Return(nil)
464 m.AssertNotCalled(t, "MSet", expectedKeyVal)
465 err := i.SetAndPublish([]string{"channel1", "event1", "channel2", "event3", "channel1", "event2", "channel2", "event4"},
468 m.AssertExpectations(t)
471 func TestWriteAndPublishOneKeyOneChannelTwoEvents(t *testing.T) {
474 expectedChannelAndEvents := []string{"{namespace},channel", "event1___event2"}
475 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
477 m.On("MSetMPub", expectedChannelAndEvents, expectedKeyVal).Return(nil)
478 m.AssertNotCalled(t, "MSet", expectedKeyVal)
479 err := i.SetAndPublish([]string{"channel", "event1", "channel", "event2"}, "key1", "data1")
481 m.AssertExpectations(t)
484 func TestWriteAndPublishIncorrectChannelAndEvent(t *testing.T) {
487 expectedChannelAndEvent := []string{}
488 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
489 m.AssertNotCalled(t, "MSetMPub", expectedChannelAndEvent, expectedKeyVal)
490 m.AssertNotCalled(t, "MSet", expectedKeyVal)
491 err := i.SetAndPublish([]string{"channel", "event1", "channel"}, "key1", "data1")
492 assert.NotNil(t, err)
493 m.AssertExpectations(t)
496 func TestWriteAndPublishNotAllowedCharactersInEvents(t *testing.T) {
499 expectedChannelAndEvent := []string{}
500 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
501 m.AssertNotCalled(t, "MSetMPub", expectedChannelAndEvent, expectedKeyVal)
502 m.AssertNotCalled(t, "MSet", expectedKeyVal)
503 err := i.SetAndPublish([]string{"channel", "event1___event2"}, "key1", "data1")
504 assert.NotNil(t, err)
505 m.AssertExpectations(t)
508 func TestWriteAndPublishNoData(t *testing.T) {
511 expectedChannelAndEvent := []string{}
512 expectedKeyVal := []interface{}{"key"}
514 m.AssertNotCalled(t, "MSetMPub", expectedChannelAndEvent, expectedKeyVal)
515 m.AssertNotCalled(t, "MSet", expectedKeyVal)
516 err := i.SetAndPublish([]string{"channel", "event"}, []interface{}{"key"})
517 assert.NotNil(t, err)
518 m.AssertExpectations(t)
521 func TestWriteAndPublishNoChannelEvent(t *testing.T) {
524 expectedKeyVal := []interface{}{"{namespace},key1", "data1"}
526 m.On("MSet", expectedKeyVal).Return(nil)
527 m.AssertNotCalled(t, "MSetMPub", "", "", expectedKeyVal)
528 err := i.SetAndPublish([]string{}, "key1", "data1")
530 m.AssertExpectations(t)
534 func TestRemoveAndPublishSuccessfully(t *testing.T) {
537 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
538 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
540 m.On("DelMPub", expectedChannelAndEvent, expectedKeys).Return(nil)
541 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{"key1", "key2"})
543 m.AssertExpectations(t)
546 func TestRemoveAndPublishSeveralChannelsAndEventsSuccessfully(t *testing.T) {
549 expectedChannelAndEvent := []string{"{namespace},channel1", "event1___event2",
550 "{namespace},channel2", "event3___event4"}
551 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
553 verifyChannelAndEvent := func(input []string) bool {
554 return verifySliceInOrder(input, expectedChannelAndEvent)
556 m.On("DelMPub", mock.MatchedBy(verifyChannelAndEvent), expectedKeys).Return(nil)
557 err := i.RemoveAndPublish([]string{"channel1", "event1", "channel2", "event3",
558 "channel1", "event2", "channel2", "event4"},
559 []string{"key1", "key2"})
561 m.AssertExpectations(t)
563 func TestRemoveAndPublishFail(t *testing.T) {
566 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
567 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
569 m.On("DelMPub", expectedChannelAndEvent, expectedKeys).Return(errors.New("Some error"))
570 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{"key1", "key2"})
571 assert.NotNil(t, err)
572 m.AssertExpectations(t)
575 func TestRemoveAndPublishNoChannels(t *testing.T) {
578 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
580 m.On("Del", expectedKeys).Return(nil)
581 err := i.RemoveAndPublish([]string{}, []string{"key1", "key2"})
583 m.AssertExpectations(t)
586 func TestRemoveAndPublishIncorrectChannel(t *testing.T) {
589 notExpectedChannelAndEvent := []string{}
590 notExpectedKeys := []string{"{namespace},key"}
592 m.AssertNotCalled(t, "DelMPub", notExpectedChannelAndEvent, notExpectedKeys)
593 m.AssertNotCalled(t, "Del", notExpectedKeys)
594 err := i.RemoveAndPublish([]string{"channel", "event", "channel2"}, []string{})
596 m.AssertExpectations(t)
599 func TestRemoveAndPublishNoKeys(t *testing.T) {
602 notExpectedChannelAndEvent := []string{}
603 notExpectedKeys := []string{"{namespace},key"}
605 m.AssertNotCalled(t, "DelMPub", notExpectedChannelAndEvent, notExpectedKeys)
606 m.AssertNotCalled(t, "Del", notExpectedKeys)
607 err := i.RemoveAndPublish([]string{"channel", "event"}, []string{})
609 m.AssertExpectations(t)
611 func TestRemoveAndPublishNoChannelsError(t *testing.T) {
614 expectedKeys := []string{"{namespace},key1", "{namespace},key2"}
616 m.On("Del", expectedKeys).Return(errors.New("Some error"))
617 err := i.RemoveAndPublish([]string{}, []string{"key1", "key2"})
618 assert.NotNil(t, err)
619 m.AssertExpectations(t)
621 func TestRemoveSuccessfully(t *testing.T) {
624 msetExpected := []string{"{namespace},key1", "{namespace},key2"}
625 m.On("Del", msetExpected).Return(nil)
627 err := i.Remove([]string{"key1", "key2"})
629 m.AssertExpectations(t)
632 func TestRemoveFail(t *testing.T) {
635 msetExpected := []string{"{namespace},key"}
636 m.On("Del", msetExpected).Return(errors.New("Some error"))
638 err := i.Remove([]string{"key"})
639 assert.NotNil(t, err)
640 m.AssertExpectations(t)
643 func TestRemoveEmptyList(t *testing.T) {
646 err := i.Remove([]string{})
648 m.AssertNotCalled(t, "Del", []string{})
651 func TestGetAllSuccessfully(t *testing.T) {
654 mKeysExpected := string("{namespace},*")
655 mReturnExpected := []string{"{namespace},key1", "{namespace},key2"}
656 expectedReturn := []string{"key1", "key2"}
657 m.On("Keys", mKeysExpected).Return(mReturnExpected, nil)
658 retVal, err := i.GetAll()
660 assert.Equal(t, expectedReturn, retVal)
661 m.AssertExpectations(t)
664 func TestGetAllFail(t *testing.T) {
667 mKeysExpected := string("{namespace},*")
668 mReturnExpected := []string{}
669 m.On("Keys", mKeysExpected).Return(mReturnExpected, errors.New("some error"))
670 retVal, err := i.GetAll()
671 assert.NotNil(t, err)
672 assert.Nil(t, retVal)
673 assert.Equal(t, len(retVal), 0)
674 m.AssertExpectations(t)
677 func TestGetAllReturnEmpty(t *testing.T) {
680 mKeysExpected := string("{namespace},*")
681 var mReturnExpected []string = nil
682 m.On("Keys", mKeysExpected).Return(mReturnExpected, nil)
683 retVal, err := i.GetAll()
685 assert.Nil(t, retVal)
686 assert.Equal(t, len(retVal), 0)
687 m.AssertExpectations(t)
691 func TestRemoveAllSuccessfully(t *testing.T) {
694 mKeysExpected := string("{namespace},*")
695 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
696 mDelExpected := mKeysReturn
697 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
698 m.On("Del", mDelExpected).Return(nil)
701 m.AssertExpectations(t)
704 func TestRemoveAllNoKeysFound(t *testing.T) {
707 mKeysExpected := string("{namespace},*")
708 var mKeysReturn []string = nil
709 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
710 m.AssertNumberOfCalls(t, "Del", 0)
713 m.AssertExpectations(t)
716 func TestRemoveAllKeysReturnError(t *testing.T) {
719 mKeysExpected := string("{namespace},*")
720 var mKeysReturn []string = nil
721 m.On("Keys", mKeysExpected).Return(mKeysReturn, errors.New("Some error"))
722 m.AssertNumberOfCalls(t, "Del", 0)
724 assert.NotNil(t, err)
725 m.AssertExpectations(t)
728 func TestRemoveAllDelReturnError(t *testing.T) {
731 mKeysExpected := string("{namespace},*")
732 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
733 mDelExpected := mKeysReturn
734 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
735 m.On("Del", mDelExpected).Return(errors.New("Some Error"))
737 assert.NotNil(t, err)
738 m.AssertExpectations(t)
741 func TestSetIfSuccessfullyOkStatus(t *testing.T) {
744 mSetIEExpectedKey := string("{namespace},key1")
745 mSetIEExpectedOldData := interface{}("olddata")
746 mSetIEExpectedNewData := interface{}("newdata")
747 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(true, nil)
748 status, err := i.SetIf("key1", "olddata", "newdata")
750 assert.True(t, status)
751 m.AssertExpectations(t)
754 func TestSetIfSuccessfullyNOKStatus(t *testing.T) {
757 mSetIEExpectedKey := string("{namespace},key1")
758 mSetIEExpectedOldData := interface{}("olddata")
759 mSetIEExpectedNewData := interface{}("newdata")
760 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(false, nil)
761 status, err := i.SetIf("key1", "olddata", "newdata")
763 assert.False(t, status)
764 m.AssertExpectations(t)
767 func TestSetIfFailure(t *testing.T) {
770 mSetIEExpectedKey := string("{namespace},key1")
771 mSetIEExpectedOldData := interface{}("olddata")
772 mSetIEExpectedNewData := interface{}("newdata")
773 m.On("SetIE", mSetIEExpectedKey, mSetIEExpectedOldData, mSetIEExpectedNewData).Return(false, errors.New("Some error"))
774 status, err := i.SetIf("key1", "olddata", "newdata")
775 assert.NotNil(t, err)
776 assert.False(t, status)
777 m.AssertExpectations(t)
780 func TestSetIfAndPublishSuccessfully(t *testing.T) {
783 expectedChannel := "{namespace},channel"
784 expectedEvent := "event"
785 expectedKey := "{namespace},key"
786 expectedOldData := interface{}("olddata")
787 expectedNewData := interface{}("newdata")
788 m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(true, nil)
789 status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
791 assert.True(t, status)
792 m.AssertExpectations(t)
795 func TestSetIfAndPublishIncorrectChannelAndEvent(t *testing.T) {
798 expectedChannel := "{namespace},channel"
799 expectedEvent := "event"
800 expectedKey := "{namespace},key"
801 expectedOldData := interface{}("olddata")
802 expectedNewData := interface{}("newdata")
803 m.AssertNotCalled(t, "SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData)
804 m.AssertNotCalled(t, "SetIE", expectedKey, expectedOldData, expectedNewData)
805 status, err := i.SetIfAndPublish([]string{"channel", "event1", "channel"}, "key", "olddata", "newdata")
806 assert.NotNil(t, err)
807 assert.False(t, status)
808 m.AssertExpectations(t)
810 func TestSetIfAndPublishNOKStatus(t *testing.T) {
813 expectedChannel := "{namespace},channel"
814 expectedEvent := "event"
815 expectedKey := "{namespace},key"
816 expectedOldData := interface{}("olddata")
817 expectedNewData := interface{}("newdata")
818 m.On("SetIEPub", expectedChannel, expectedEvent, expectedKey, expectedOldData, expectedNewData).Return(false, nil)
819 status, err := i.SetIfAndPublish([]string{"channel", "event"}, "key", "olddata", "newdata")
821 assert.False(t, status)
822 m.AssertExpectations(t)
825 func TestSetIfAndPublishNoChannels(t *testing.T) {
828 expectedKey := "{namespace},key"
829 expectedOldData := interface{}("olddata")
830 expectedNewData := interface{}("newdata")
831 m.On("SetIE", expectedKey, expectedOldData, expectedNewData).Return(true, nil)
832 status, err := i.SetIfAndPublish([]string{}, "key", "olddata", "newdata")
834 assert.True(t, status)
835 m.AssertExpectations(t)
838 func TestSetIfNotExistsAndPublishSuccessfully(t *testing.T) {
841 expectedChannel := "{namespace},channel"
842 expectedEvent := "event"
843 expectedKey := "{namespace},key"
844 expectedData := interface{}("data")
846 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
847 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
849 assert.True(t, status)
850 m.AssertExpectations(t)
853 func TestSetIfNotExistsAndPublishSeveralEvents(t *testing.T) {
856 expectedChannel := "{namespace},channel"
857 expectedEvent := "event1___event2"
858 expectedKey := "{namespace},key"
859 expectedData := interface{}("data")
861 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(true, nil)
862 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
864 assert.True(t, status)
865 m.AssertExpectations(t)
868 func TestSetIfNotExistsAndPublishNoChannels(t *testing.T) {
871 expectedKey := "{namespace},key"
872 expectedData := interface{}("data")
874 m.On("SetNX", expectedKey, expectedData, time.Duration(0)).Return(true, nil)
875 status, err := i.SetIfNotExistsAndPublish([]string{}, "key", "data")
877 assert.True(t, status)
878 m.AssertExpectations(t)
881 func TestSetIfNotExistsAndPublishFail(t *testing.T) {
884 expectedChannel := "{namespace},channel"
885 expectedEvent := "event"
886 expectedKey := "{namespace},key"
887 expectedData := interface{}("data")
889 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, nil)
890 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
892 assert.False(t, status)
893 m.AssertExpectations(t)
896 func TestSetIfNotExistsAndPublishIncorrectChannels(t *testing.T) {
899 expectedChannel := "{namespace},channel"
900 expectedEvent := "event"
901 expectedKey := "{namespace},key"
902 expectedData := interface{}("data")
904 m.AssertNotCalled(t, "SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData)
905 m.AssertNotCalled(t, "SetNX", expectedKey, expectedData, 0)
906 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event", "channel2"}, "key", "data")
907 assert.NotNil(t, err)
908 assert.False(t, status)
909 m.AssertExpectations(t)
912 func TestSetIfNotExistsAndPublishError(t *testing.T) {
915 expectedChannel := "{namespace},channel"
916 expectedEvent := "event"
917 expectedKey := "{namespace},key"
918 expectedData := interface{}("data")
920 m.On("SetNXPub", expectedChannel, expectedEvent, expectedKey, expectedData).Return(false, errors.New("Some error"))
921 status, err := i.SetIfNotExistsAndPublish([]string{"channel", "event"}, "key", "data")
922 assert.NotNil(t, err)
923 assert.False(t, status)
924 m.AssertExpectations(t)
927 func TestSetIfNotExistsSuccessfullyOkStatus(t *testing.T) {
930 mSetNXExpectedKey := string("{namespace},key1")
931 mSetNXExpectedData := interface{}("data")
932 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData, time.Duration(0)).Return(true, nil)
933 status, err := i.SetIfNotExists("key1", "data")
935 assert.True(t, status)
936 m.AssertExpectations(t)
939 func TestSetIfNotExistsSuccessfullyNOKStatus(t *testing.T) {
942 mSetNXExpectedKey := string("{namespace},key1")
943 mSetNXExpectedData := interface{}("data")
944 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData, time.Duration(0)).Return(false, nil)
945 status, err := i.SetIfNotExists("key1", "data")
947 assert.False(t, status)
948 m.AssertExpectations(t)
951 func TestSetIfNotExistsFailure(t *testing.T) {
954 mSetNXExpectedKey := string("{namespace},key1")
955 mSetNXExpectedData := interface{}("data")
956 m.On("SetNX", mSetNXExpectedKey, mSetNXExpectedData, time.Duration(0)).Return(false, errors.New("Some error"))
957 status, err := i.SetIfNotExists("key1", "data")
958 assert.NotNil(t, err)
959 assert.False(t, status)
960 m.AssertExpectations(t)
963 func TestRemoveIfAndPublishSuccessfully(t *testing.T) {
966 expectedChannel := "{namespace},channel"
967 expectedEvent := "event1___event2"
968 expectedKey := "{namespace},key"
969 expectedValue := interface{}("data")
971 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(true, nil)
972 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
974 assert.True(t, status)
975 m.AssertExpectations(t)
978 func TestRemoveIfAndPublishNok(t *testing.T) {
981 expectedChannel := "{namespace},channel"
982 expectedEvent := "event1___event2"
983 expectedKey := "{namespace},key"
984 expectedValue := interface{}("data")
986 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, nil)
987 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
989 assert.False(t, status)
990 m.AssertExpectations(t)
993 func TestRemoveIfAndPublishError(t *testing.T) {
996 expectedChannel := "{namespace},channel"
997 expectedEvent := "event1___event2"
998 expectedKey := "{namespace},key"
999 expectedValue := interface{}("data")
1001 m.On("DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue).Return(false, errors.New("Some error"))
1002 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel", "event2"}, "key", "data")
1003 assert.NotNil(t, err)
1004 assert.False(t, status)
1005 m.AssertExpectations(t)
1008 func TestRemoveIfAndPublishIncorrectChannel(t *testing.T) {
1011 expectedChannel := "{namespace},channel"
1012 expectedEvent := "event"
1013 expectedKey := "{namespace},key"
1014 expectedValue := interface{}("data")
1016 m.AssertNotCalled(t, "DelIEPub", expectedChannel, expectedEvent, expectedKey, expectedValue)
1017 m.AssertNotCalled(t, "DelIE", expectedKey, expectedValue)
1018 status, err := i.RemoveIfAndPublish([]string{"channel", "event1", "channel"}, "key", "data")
1019 assert.NotNil(t, err)
1020 assert.False(t, status)
1021 m.AssertExpectations(t)
1024 func TestRemoveIfAndPublishNoChannels(t *testing.T) {
1027 expectedKey := "{namespace},key"
1028 expectedValue := interface{}("data")
1030 m.On("DelIE", expectedKey, expectedValue).Return(true, nil)
1031 status, err := i.RemoveIfAndPublish([]string{}, "key", "data")
1033 assert.True(t, status)
1034 m.AssertExpectations(t)
1037 func TestRemoveIfSuccessfullyOkStatus(t *testing.T) {
1040 mDelIEExpectedKey := string("{namespace},key1")
1041 mDelIEExpectedData := interface{}("data")
1042 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(true, nil)
1043 status, err := i.RemoveIf("key1", "data")
1045 assert.True(t, status)
1046 m.AssertExpectations(t)
1049 func TestRemoveIfSuccessfullyNOKStatus(t *testing.T) {
1052 mDelIEExpectedKey := string("{namespace},key1")
1053 mDelIEExpectedData := interface{}("data")
1054 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(false, nil)
1055 status, err := i.RemoveIf("key1", "data")
1057 assert.False(t, status)
1058 m.AssertExpectations(t)
1061 func TestRemoveIfFailure(t *testing.T) {
1064 mDelIEExpectedKey := string("{namespace},key1")
1065 mDelIEExpectedData := interface{}("data")
1066 m.On("DelIE", mDelIEExpectedKey, mDelIEExpectedData).Return(true, errors.New("Some error"))
1067 status, err := i.RemoveIf("key1", "data")
1068 assert.NotNil(t, err)
1069 assert.False(t, status)
1070 m.AssertExpectations(t)
1073 func TestRemoveAllAndPublishSuccessfully(t *testing.T) {
1076 mKeysExpected := string("{namespace},*")
1077 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1078 mDelExpected := mKeysReturn
1079 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
1080 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1081 m.On("DelMPub", expectedChannelAndEvent, mDelExpected).Return(nil)
1082 err := i.RemoveAllAndPublish([]string{"channel", "event"})
1084 m.AssertExpectations(t)
1087 func TestRemoveAllAndPublishKeysReturnError(t *testing.T) {
1090 mKeysExpected := string("{namespace},*")
1091 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1092 mDelExpected := mKeysReturn
1093 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
1094 m.On("Keys", mKeysExpected).Return(mKeysReturn, errors.New("Some error"))
1095 m.AssertNotCalled(t, "DelMPub", expectedChannelAndEvent, mDelExpected)
1096 err := i.RemoveAllAndPublish([]string{"channel", "event"})
1097 assert.NotNil(t, err)
1098 m.AssertExpectations(t)
1101 func TestRemoveAllAndPublishKeysDelReturnsError(t *testing.T) {
1104 mKeysExpected := string("{namespace},*")
1105 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1106 mDelExpected := mKeysReturn
1107 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
1108 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1109 m.On("DelMPub", expectedChannelAndEvent, mDelExpected).Return(errors.New("Some error"))
1110 err := i.RemoveAllAndPublish([]string{"channel", "event"})
1111 assert.NotNil(t, err)
1112 m.AssertExpectations(t)
1115 func TestRemoveAllAndPublishKeysEventsWithIllegalCharacters(t *testing.T) {
1118 mKeysExpected := string("{namespace},*")
1119 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1120 mDelExpected := mKeysReturn
1121 expectedChannelAndEvent := []string{"{namespace},channel", "event"}
1122 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1123 m.AssertNotCalled(t, "DelMPub", expectedChannelAndEvent, mDelExpected)
1124 err := i.RemoveAllAndPublish([]string{"channel", "event___anotherEvent"})
1125 assert.NotNil(t, err)
1126 m.AssertExpectations(t)
1130 func TestRemoveAllAndPublishNoChannels(t *testing.T) {
1133 mKeysExpected := string("{namespace},*")
1134 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1135 mDelExpected := mKeysReturn
1136 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1137 m.On("Del", mDelExpected).Return(nil)
1138 m.AssertNotCalled(t, "DelMPub", "", "", mDelExpected)
1139 err := i.RemoveAllAndPublish([]string{})
1141 m.AssertExpectations(t)
1144 func TestRemoveAllAndPublishIncorrectChannel(t *testing.T) {
1147 mKeysExpected := string("{namespace},*")
1148 mKeysReturn := []string{"{namespace},key1", "{namespace},key2"}
1149 mDelExpected := mKeysReturn
1150 m.On("Keys", mKeysExpected).Return(mKeysReturn, nil)
1151 m.AssertNotCalled(t, "DelMPub", "", "", mDelExpected)
1152 err := i.RemoveAllAndPublish([]string{"channel", "event", "channel2"})
1153 assert.NotNil(t, err)
1154 m.AssertExpectations(t)
1158 func TestAddMemberSuccessfully(t *testing.T) {
1161 groupExpected := string("{namespace},group")
1162 membersExpected := []interface{}{"member1", "member2"}
1164 m.On("SAdd", groupExpected, membersExpected).Return(nil)
1166 err := i.AddMember("group", "member1", "member2")
1168 m.AssertExpectations(t)
1171 func TestAddMemberFail(t *testing.T) {
1174 groupExpected := string("{namespace},group")
1175 membersExpected := []interface{}{"member1", "member2"}
1177 m.On("SAdd", groupExpected, membersExpected).Return(errors.New("Some error"))
1179 err := i.AddMember("group", "member1", "member2")
1180 assert.NotNil(t, err)
1181 m.AssertExpectations(t)
1183 func TestRemoveMemberSuccessfully(t *testing.T) {
1186 groupExpected := string("{namespace},group")
1187 membersExpected := []interface{}{"member1", "member2"}
1189 m.On("SRem", groupExpected, membersExpected).Return(nil)
1191 err := i.RemoveMember("group", "member1", "member2")
1193 m.AssertExpectations(t)
1196 func TestRemoveMemberFail(t *testing.T) {
1199 groupExpected := string("{namespace},group")
1200 membersExpected := []interface{}{"member1", "member2"}
1202 m.On("SRem", groupExpected, membersExpected).Return(errors.New("Some error"))
1204 err := i.RemoveMember("group", "member1", "member2")
1205 assert.NotNil(t, err)
1206 m.AssertExpectations(t)
1209 func TestRemoveGroupSuccessfully(t *testing.T) {
1212 groupExpected := []string{"{namespace},group"}
1214 m.On("Del", groupExpected).Return(nil)
1216 err := i.RemoveGroup("group")
1218 m.AssertExpectations(t)
1220 func TestRemoveGroupFail(t *testing.T) {
1223 groupExpected := []string{"{namespace},group"}
1225 m.On("Del", groupExpected).Return(errors.New("Some error"))
1227 err := i.RemoveGroup("group")
1228 assert.NotNil(t, err)
1229 m.AssertExpectations(t)
1232 func TestGetMembersSuccessfully(t *testing.T) {
1235 groupExpected := "{namespace},group"
1236 returnExpected := []string{"member1", "member2"}
1238 m.On("SMembers", groupExpected).Return(returnExpected, nil)
1240 result, err := i.GetMembers("group")
1242 assert.Equal(t, result, returnExpected)
1243 m.AssertExpectations(t)
1245 func TestGetMembersFail(t *testing.T) {
1248 groupExpected := "{namespace},group"
1249 returnExpected := []string{"member1", "member2"}
1251 m.On("SMembers", groupExpected).Return(returnExpected, errors.New("Some error"))
1253 result, err := i.GetMembers("group")
1254 assert.NotNil(t, err)
1255 assert.Equal(t, []string{}, result)
1256 m.AssertExpectations(t)
1259 func TestIsMemberSuccessfullyIsMember(t *testing.T) {
1262 groupExpected := "{namespace},group"
1263 memberExpected := "member"
1265 m.On("SIsMember", groupExpected, memberExpected).Return(true, nil)
1267 result, err := i.IsMember("group", "member")
1269 assert.True(t, result)
1270 m.AssertExpectations(t)
1272 func TestIsMemberSuccessfullyIsNotMember(t *testing.T) {
1275 groupExpected := "{namespace},group"
1276 memberExpected := "member"
1278 m.On("SIsMember", groupExpected, memberExpected).Return(false, nil)
1280 result, err := i.IsMember("group", "member")
1282 assert.False(t, result)
1283 m.AssertExpectations(t)
1285 func TestIsMemberFailure(t *testing.T) {
1288 groupExpected := "{namespace},group"
1289 memberExpected := "member"
1291 m.On("SIsMember", groupExpected, memberExpected).Return(true, errors.New("Some error"))
1293 result, err := i.IsMember("group", "member")
1294 assert.NotNil(t, err)
1295 assert.False(t, result)
1296 m.AssertExpectations(t)
1299 func TestGroupSizeSuccessfully(t *testing.T) {
1302 var expectedSize int64
1304 groupExpected := "{namespace},group"
1306 m.On("SCard", groupExpected).Return(expectedSize, nil)
1308 result, err := i.GroupSize("group")
1310 assert.Equal(t, expectedSize, result)
1311 m.AssertExpectations(t)
1313 func TestGroupSizeFail(t *testing.T) {
1316 var expectedSize int64
1318 groupExpected := "{namespace},group"
1320 m.On("SCard", groupExpected).Return(expectedSize, errors.New("Some error"))
1322 result, err := i.GroupSize("group")
1323 assert.NotNil(t, err)
1324 assert.Equal(t, int64(0), result)
1325 m.AssertExpectations(t)
1328 func TestLockResourceSuccessfully(t *testing.T) {
1331 resourceExpected := "{namespace},resource"
1332 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil)
1334 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{})
1336 assert.NotNil(t, lock)
1337 m.AssertExpectations(t)
1340 func TestLockResourceFailure(t *testing.T) {
1343 resourceExpected := "{namespace},resource"
1344 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, errors.New("Some error"))
1346 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{})
1347 assert.NotNil(t, err)
1349 m.AssertExpectations(t)
1352 func TestLockResourceTrySeveralTimesSuccessfully(t *testing.T) {
1355 resourceExpected := "{namespace},resource"
1356 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(false, nil).Once()
1357 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1359 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1363 assert.NotNil(t, lock)
1364 m.AssertExpectations(t)
1367 func TestLockResourceTrySeveralTimesFailure(t *testing.T) {
1370 resourceExpected := "{namespace},resource"
1371 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(false, nil).Once()
1372 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, errors.New("Some error")).Once()
1374 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1377 assert.NotNil(t, err)
1379 m.AssertExpectations(t)
1382 func TestLockResourceTrySeveralTimesUnableToGetResource(t *testing.T) {
1385 resourceExpected := "{namespace},resource"
1386 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(false, nil).Once()
1387 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(false, nil).Once()
1389 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1392 assert.NotNil(t, err)
1393 assert.EqualError(t, err, "Lock not obtained")
1395 m.AssertExpectations(t)
1398 func TestReleaseResourceSuccessfully(t *testing.T) {
1401 resourceExpected := "{namespace},resource"
1402 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1403 m.On("DelIE", resourceExpected, mock.Anything).Return(true, nil).Once()
1405 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1408 err2 := lock.ReleaseResource()
1410 assert.NotNil(t, lock)
1412 m.AssertExpectations(t)
1415 func TestReleaseResourceFailure(t *testing.T) {
1418 resourceExpected := "{namespace},resource"
1419 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1420 m.On("DelIE", resourceExpected, mock.Anything).Return(true, errors.New("Some error")).Once()
1422 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1425 err2 := lock.ReleaseResource()
1427 assert.NotNil(t, lock)
1428 assert.NotNil(t, err2)
1429 m.AssertExpectations(t)
1432 func TestReleaseResourceLockNotHeld(t *testing.T) {
1435 resourceExpected := "{namespace},resource"
1436 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1437 m.On("DelIE", resourceExpected, mock.Anything).Return(false, nil).Once()
1439 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1442 err2 := lock.ReleaseResource()
1444 assert.NotNil(t, lock)
1445 assert.NotNil(t, err2)
1446 assert.EqualError(t, err2, "Lock not held")
1447 m.AssertExpectations(t)
1450 func TestRefreshResourceSuccessfully(t *testing.T) {
1453 resourceExpected := "{namespace},resource"
1454 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1455 m.On("PExpireIE", resourceExpected, mock.Anything, time.Duration(1)).Return(nil).Once()
1457 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1460 err2 := lock.RefreshResource(time.Duration(1))
1462 assert.NotNil(t, lock)
1464 m.AssertExpectations(t)
1467 func TestRefreshResourceFailure(t *testing.T) {
1470 resourceExpected := "{namespace},resource"
1471 m.On("SetNX", resourceExpected, mock.Anything, time.Duration(1)).Return(true, nil).Once()
1472 m.On("PExpireIE", resourceExpected, mock.Anything, time.Duration(1)).Return(errors.New("Some error")).Once()
1474 lock, err := i.LockResource("resource", time.Duration(1), &sdlgo.Options{
1477 err2 := lock.RefreshResource(time.Duration(1))
1479 assert.NotNil(t, lock)
1480 assert.NotNil(t, err2)
1481 m.AssertExpectations(t)
1484 func TestCheckResourceSuccessfully(t *testing.T) {
1487 resourceExpected := "{namespace},resource"
1488 m.On("PTTL", resourceExpected).Return(time.Duration(1), nil)
1489 result, err := i.CheckResource("resource")
1491 assert.Equal(t, result, time.Duration(1))
1492 m.AssertExpectations(t)
1495 func TestCheckResourceFailure(t *testing.T) {
1498 resourceExpected := "{namespace},resource"
1499 m.On("PTTL", resourceExpected).Return(time.Duration(1), errors.New("Some error"))
1500 result, err := i.CheckResource("resource")
1501 assert.NotNil(t, err)
1502 assert.EqualError(t, err, "Some error")
1503 assert.Equal(t, result, time.Duration(0))
1504 m.AssertExpectations(t)
1507 func TestCheckResourceInvalidResource(t *testing.T) {
1510 resourceExpected := "{namespace},resource"
1511 m.On("PTTL", resourceExpected).Return(time.Duration(-1), nil)
1512 result, err := i.CheckResource("resource")
1513 assert.NotNil(t, err)
1514 assert.EqualError(t, err, "invalid resource given, no expiration time attached")
1515 assert.Equal(t, result, time.Duration(0))
1516 m.AssertExpectations(t)