package redisUtil import ( "testing" "time" ) var ( redisPoolObj_set *RedisPool ) func init() { redisPoolObj_set = NewRedisPool("testPool", "10.1.0.21:6379", "redis_pwd", 5, 500, 200, 10*time.Second, 5*time.Second) } func TestSAdd(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_string.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* # 添加单个元素 redis> SADD bbs "discuz.net" (integer) 1 */ key := "bbs" value := "discuz.net" expected := 1 got, err := redisPoolObj_set.SAdd(key, value) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key) /* # 添加重复元素 redis> SADD bbs "discuz.net" (integer) 0 */ expected = 0 got, err = redisPoolObj_set.SAdd(key, value) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } /* # 添加多个元素 redis> SADD bbs "tianya.cn" "groups.google.com" (integer) 2 */ expected = 2 got, err = redisPoolObj_set.SAdd(key, "tianya.cn", "groups.google.com") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } /* redis> SMEMBERS bbs 1) "discuz.net" 2) "groups.google.com" 3) "tianya.cn" */ expected2 := []string{"discuz.net", "groups.google.com", "tianya.cn"} got2_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got2, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected2, got2) == false { t.Errorf("Expected to get %v, but got %v\n", expected2, got2) return } } func TestSIsMember(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_string.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() key := "joe's_movies" expected := 3 got, err := redisPoolObj_set.SAdd(key, "hi, lady", "Fast Five", "2012") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key) /* redis> SMEMBERS joe's_movies 1) "hi, lady" 2) "Fast Five" 3) "2012" */ expected2 := []string{"hi, lady", "Fast Five", "2012"} got2_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got2, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected2, got2) == false { t.Errorf("Expected to get %v, but got %v\n", expected2, got2) return } /* redis> SISMEMBER joe's_movies "bet man" (integer) 0 */ expected3 := false value := "bet man" got3, err := redisPoolObj_set.SIsMember(key, value) if err != nil { t.Fail() } if got3 != expected3 { t.Errorf("Expected to get %t, but now got %t", expected3, got3) return } /* redis> SISMEMBER joe's_movies "Fast Five" (integer) 1 */ expected3 = true value = "Fast Five" got3, err = redisPoolObj_set.SIsMember(key, value) if err != nil { t.Fail() } if got3 != expected3 { t.Errorf("Expected to get %t, but now got %t", expected3, got3) return } } func TestSPop(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_string.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() key := "db" expected := 3 got, err := redisPoolObj_set.SAdd(key, "MySQL", "MongoDB", "Redis") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key) /* redis> SMEMBERS db 1) "MySQL" 2) "MongoDB" 3) "Redis" */ expected2 := []string{"MySQL", "MongoDB", "Redis"} got2_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got2, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected2, got2) == false { t.Errorf("Expected to get %v, but got %v\n", expected2, got2) return } /* redis> SPOP db "Redis" redis> SMEMBERS db 1) "MySQL" 2) "MongoDB" */ expected3 := make(map[string]struct{}) for _, item := range expected2 { expected3[item] = struct{}{} } got3_interface, err := redisPoolObj_set.SPop(key) if err != nil { t.Fail() } got3, err := redisPoolObj_set.String(got3_interface) if err != nil { t.Fail() } if _, exist := expected3[got3]; !exist { t.Errorf("Expected to get one of key from %v, but now get %s.", expected3, got3) return } delete(expected3, got3) expected4 := make([]string, 0, len(expected3)) for k := range expected3 { expected4 = append(expected4, k) } got4_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SPOP db "MySQL" redis> SMEMBERS db 1) "MongoDB" */ expected5 := make(map[string]struct{}) for _, item := range expected4 { expected5[item] = struct{}{} } got5_interface, err := redisPoolObj_set.SPop(key) if err != nil { t.Fail() } got5, err := redisPoolObj_set.String(got5_interface) if err != nil { t.Fail() } if _, exist := expected5[got5]; !exist { t.Errorf("Expected to get one of key from %v, but now get %s.", expected5, got5) return } delete(expected5, got5) expected6 := make([]string, 0, len(expected5)) for k := range expected5 { expected6 = append(expected6, k) } got6_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got6, err := redisPoolObj_set.Strings(got6_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected6, got6) == false { t.Errorf("Expected to get %v, but got %v\n", expected6, got6) return } } func TestSRandMember(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* # 添加元素 redis> SADD fruit apple banana cherry (integer) 3 */ key := "fruit" expected := 3 got, err := redisPoolObj_set.SAdd(key, "apple", "banana", "cherry") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key) /* # 只给定 key 参数,返回一个随机元素 redis> SRANDMEMBER fruit "cherry" */ expected2 := make(map[string]struct{}) expected2["apple"] = struct{}{} expected2["banana"] = struct{}{} expected2["cherry"] = struct{}{} count := 1 got2_interface, err := redisPoolObj_set.SRandMember(key, count) if err != nil { t.Fail() } got2_slice, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if len(got2_slice) != count { t.Errorf("Expected to have %d items, but now get %d.", count, len(got2_slice)) return } got2 := got2_slice[0] if _, exist := expected2[got2]; !exist { t.Errorf("Expected length %s, but got %s", expected2, got2) return } /* # 给定 3 为 count 参数,返回 3 个随机元素 # 每个随机元素都不相同 redis> SRANDMEMBER fruit 3 1) "apple" 2) "banana" 3) "cherry" */ count = 3 expected3 := make([]string, 0, len(expected2)) for k := range expected2 { expected3 = append(expected3, k) } got3_interface, err := redisPoolObj_set.SRandMember(key, count) if err != nil { t.Fail() } got3_slice, err := redisPoolObj_set.Strings(got3_interface) if err != nil { t.Fail() } if len(got3_slice) != count { t.Errorf("Expected to have %d items, but now get %d.", count, len(got3_slice)) return } if isTwoUnorderedSliceEqual(expected3, got3_slice) == false { t.Errorf("Expected to get %v, but got %v\n", expected3, got3_slice) return } /* # 给定 -3 为 count 参数,返回 3 个随机元素 # 元素可能会重复出现多次 redis> SRANDMEMBER fruit -3 1) "banana" 2) "cherry" 3) "apple" # 如果 count 是整数,且大于等于集合基数,那么返回整个集合 redis> SRANDMEMBER fruit 10 1) "apple" 2) "banana" 3) "cherry" # 如果 count 是负数,且 count 的绝对值大于集合的基数 # 那么返回的数组的长度为 count 的绝对值 redis> SRANDMEMBER fruit -10 1) "banana" 2) "apple" 3) "banana" 4) "cherry" 5) "apple" 6) "apple" 7) "cherry" 8) "apple" 9) "apple" 10) "banana" # SRANDMEMBER 并不会修改集合内容 redis> SMEMBERS fruit 1) "apple" 2) "cherry" 3) "banana" # 集合为空时返回 nil 或者空数组 redis> SRANDMEMBER not-exists (nil) redis> SRANDMEMBER not-eixsts 10 (empty list or set) */ } func TestSRem(t *testing.T) { deleteKeys := make([]string, 0, 8) // defer func() { // // Delete the test keys // distinctKeyList := getDistinctKeyList(deleteKeys) // count, err := redisPoolObj_list.Del(distinctKeyList...) // if err != nil { // t.Fail() // } // if count != len(distinctKeyList) { // t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) // return // } // }() /* # 添加元素 redis> SADD languages c lisp python ruby (integer) 4 */ key := "languages" expected := 4 got, err := redisPoolObj_set.SAdd(key, "c", "lisp", "python", "ruby") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key) /* # 测试数据 redis> SMEMBERS languages 1) "c" 2) "lisp" 3) "python" 4) "ruby" */ expected2 := make(map[string]struct{}) expected2["c"] = struct{}{} expected2["lisp"] = struct{}{} expected2["python"] = struct{}{} expected2["ruby"] = struct{}{} expected4 := make([]string, 0, len(expected2)) for k := range expected2 { expected4 = append(expected4, k) } got4_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* # 移除单个元素 redis> SREM languages ruby (integer) 1 */ value := "ruby" expected5 := 1 got5, err := redisPoolObj_set.SRem(key, value) if err != nil { t.Fail() } if got5 != expected5 { t.Errorf("Expected length %d, but got %d", expected5, got5) return } /* # 移除不存在元素 redis> SREM languages non-exists-language (integer) 0 */ value = "non-exists-language" expected6 := 0 got6, err := redisPoolObj_set.SRem(key, value) if err != nil { t.Fail() } if got6 != expected6 { t.Errorf("Expected length %d, but got %d", expected6, got6) return } /* # 移除多个元素 redis> SREM languages lisp python c (integer) 3 redis> SMEMBERS languages (empty list or set) */ expected7 := 3 got7, err := redisPoolObj_set.SRem(key, "c", "lisp", "python") if err != nil { t.Fail() } if got7 != expected7 { t.Errorf("Expected length %d, but got %d", expected7, got7) return } expected8 := make([]string, 0) got8_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got8, err := redisPoolObj_set.Strings(got8_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected8, got8) == false { t.Errorf("Expected to get %v, but got %v\n", expected8, got8) return } } func TestSMove(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* # 添加元素 redis> SADD languages c lisp python ruby (integer) 4 */ source := "songs" expected := 2 got, err := redisPoolObj_set.SAdd(source, "Billie Jean", "Believe Me") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, source) /* redis> SMEMBERS songs 1) "Billie Jean" 2) "Believe Me" */ expected2 := []string{"Billie Jean", "Believe Me"} got2_interface, err := redisPoolObj_set.SMembers(source) if err != nil { t.Fail() } got2, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected2, got2) == false { t.Errorf("Expected to get %v, but got %v\n", expected2, got2) return } /* redis> SMEMBERS my_songs (empty list or set) */ destination := "my_songs" expected3 := []string{} got3_interface, err := redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got3, err := redisPoolObj_set.Strings(got3_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected3, got3) == false { t.Errorf("Expected to get %v, but got %v\n", expected3, got3) return } deleteKeys = append(deleteKeys, destination) /* redis> SMOVE songs my_songs "Believe Me" (integer) 1 */ value := "Believe Me" expected4 := true got4, err := redisPoolObj_set.SMove(source, destination, value) if err != nil { t.Fail() } if got4 != expected4 { t.Errorf("Expected length %t, but got %t", expected4, got4) return } /* redis> SMEMBERS songs 1) "Billie Jean" */ expected5 := []string{"Billie Jean"} got5_interface, err := redisPoolObj_set.SMembers(source) if err != nil { t.Fail() } got5, err := redisPoolObj_set.Strings(got5_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected5, got5) == false { t.Errorf("Expected to get %v, but got %v\n", expected5, got5) return } /* redis> SMEMBERS my_songs 1) "Believe Me" */ expected6 := []string{"Believe Me"} got6_interface, err := redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got6, err := redisPoolObj_set.Strings(got6_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected6, got6) == false { t.Errorf("Expected to get %v, but got %v\n", expected6, got6) return } } func TestSCard(t *testing.T) { /* redis> SADD tool pc printer phone (integer) 3 */ key := "tool" expected := 3 got, err := redisPoolObj_set.SAdd(key, "pc", "printer", "phone") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } /* redis> SCARD tool # 非空集合 (integer) 3 */ expected = 3 got, err = redisPoolObj_set.SCard(key) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } /* redis> DEL tool (integer) 1 */ expected = 1 got, err = redisPoolObj_set.Del(key) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } /* redis> SCARD tool # 空集合 (integer) 0 */ expected = 0 got, err = redisPoolObj_set.SCard(key) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } } func TestSMembers(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* # key 不存在或集合为空 redis> EXISTS not_exists_key (integer) 0 */ key := "not_exists_key" expected := false got, err := redisPoolObj_set.Exists(key) if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %t, but now got %t.", expected, got) return } /* redis> SMEMBERS not_exists_key (empty list or set) */ expected2 := make([]string, 0) got2_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got2, err := redisPoolObj_set.Strings(got2_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected2, got2) == false { t.Errorf("Expected to get %v, but got %v\n", expected2, got2) return } /* # 非空集合 redis> SADD language Ruby Python Clojure (integer) 3 */ key = "language" expected3 := 3 got3, err := redisPoolObj_set.SAdd(key, "Clojure", "Python", "Ruby") if err != nil { t.Fail() } if got3 != expected3 { t.Errorf("Expected to get %d, but now got %d.", expected3, got3) return } deleteKeys = append(deleteKeys, key) /* redis> SMEMBERS language 1) "Python" 2) "Ruby" 3) "Clojure" */ expected4 := []string{"Clojure", "Python", "Ruby"} got4_interface, err := redisPoolObj_set.SMembers(key) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSInter(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() key1 := "group_1" expected := 3 got, err := redisPoolObj_set.SAdd(key1, "LI LEI", "TOM", "JACK") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) key2 := "group_2" expected = 2 got, err = redisPoolObj_set.SAdd(key2, "HAN MEIMEI", "JACK") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) /* redis> SMEMBERS group_1 1) "LI LEI" 2) "TOM" 3) "JACK" */ expected4 := []string{"LI LEI", "TOM", "JACK"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS group_2 1) "HAN MEIMEI" 2) "JACK" */ expected4 = []string{"HAN MEIMEI", "JACK"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SINTER group_1 group_2 1) "JACK" */ expected4 = []string{"JACK"} got4_interface, err = redisPoolObj_set.SInter(key1, key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSInterStore(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* redis> SMEMBERS songs 1) "good bye joe" 2) "hello,peter" */ key1 := "songs" expected := 2 got, err := redisPoolObj_set.SAdd(key1, "good bye joe", "hello,peter") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) expected4 := []string{"good bye joe", "hello,peter"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS my_songs 1) "good bye joe" 2) "falling" */ key2 := "my_songs" expected = 2 got, err = redisPoolObj_set.SAdd(key2, "good bye joe", "falling") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) expected4 = []string{"good bye joe", "falling"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SINTERSTORE song_interset songs my_songs (integer) 1 */ destination := "song_interset" expected2 := 1 got2, err := redisPoolObj_set.SInterStore(destination, key1, key2) if err != nil { t.Fail() } if got2 != expected2 { t.Errorf("Expected to get %d, but now got %d.", expected2, got2) return } deleteKeys = append(deleteKeys, destination) /* redis> SMEMBERS song_interset 1) "good bye joe" */ expected4 = []string{"good bye joe"} got4_interface, err = redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSUnion(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* redis> SMEMBERS songs 1) "Billie Jean" */ key1 := "songs" expected := 1 got, err := redisPoolObj_set.SAdd(key1, "Billie Jean") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) expected4 := []string{"Billie Jean"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS my_songs 1) "Believe Me" */ key2 := "my_songs" expected = 1 got, err = redisPoolObj_set.SAdd(key2, "Believe Me") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) expected4 = []string{"Believe Me"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SUNION songs my_songs 1) "Billie Jean" 2) "Believe Me" */ expected4 = []string{"Billie Jean", "Believe Me"} got4_interface, err = redisPoolObj_set.SUnion(key1, key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSUnionStore(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* redis> SMEMBERS NoSQL 1) "MongoDB" 2) "Redis" */ key1 := "NoSQL" expected := 2 got, err := redisPoolObj_set.SAdd(key1, "MongoDB", "Redis") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) expected4 := []string{"MongoDB", "Redis"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS SQL 1) "sqlite" 2) "MySQL" */ key2 := "SQL" expected = 2 got, err = redisPoolObj_set.SAdd(key2, "sqlite", "MySQL") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) expected4 = []string{"sqlite", "MySQL"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SUNIONSTORE db NoSQL SQL (integer) 4 */ destination := "db" expected2 := 4 got2, err := redisPoolObj_set.SUnionStore(destination, key1, key2) if err != nil { t.Fail() } if got2 != expected2 { t.Errorf("Expected to get %d, but now got %d.", expected2, got2) return } deleteKeys = append(deleteKeys, destination) /* redis> SMEMBERS db 1) "MySQL" 2) "sqlite" 3) "MongoDB" 4) "Redis" */ expected4 = []string{"MongoDB", "Redis", "sqlite", "MySQL"} got4_interface, err = redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSDiff(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* redis> SMEMBERS peter's_movies 1) "bet man" 2) "start war" 3) "2012" */ key1 := "peter's_movies" expected := 3 got, err := redisPoolObj_set.SAdd(key1, "bet man", "start war", "2012") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) expected4 := []string{"bet man", "start war", "2012"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS joe's_movies 1) "hi, lady" 2) "Fast Five" 3) "2012" */ key2 := "joe's_movies" expected = 3 got, err = redisPoolObj_set.SAdd(key2, "hi, lady", "Fast Five", "2012") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) expected4 = []string{"hi, lady", "Fast Five", "2012"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SDIFF peter's_movies joe's_movies 1) "bet man" 2) "start war" */ expected4 = []string{"bet man", "start war"} got4_interface, err = redisPoolObj_set.SDiff(key1, key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SDIFF joe's_movies peter's_movies 1) "hi, lady" 2) "Fast Five" */ expected4 = []string{"hi, lady", "Fast Five"} got4_interface, err = redisPoolObj_set.SDiff(key2, key1) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } } func TestSDiffStore(t *testing.T) { deleteKeys := make([]string, 0, 8) defer func() { // Delete the test keys distinctKeyList := getDistinctKeyList(deleteKeys) count, err := redisPoolObj_list.Del(distinctKeyList...) if err != nil { t.Fail() } if count != len(distinctKeyList) { t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count) return } }() /* redis> SMEMBERS peter's_movies 1) "bet man" 2) "start war" 3) "2012" */ key1 := "peter's_movies" expected := 3 got, err := redisPoolObj_set.SAdd(key1, "bet man", "start war", "2012") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key1) expected4 := []string{"bet man", "start war", "2012"} got4_interface, err := redisPoolObj_set.SMembers(key1) if err != nil { t.Fail() } got4, err := redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SMEMBERS joe's_movies 1) "hi, lady" 2) "Fast Five" 3) "2012" */ key2 := "joe's_movies" expected = 3 got, err = redisPoolObj_set.SAdd(key2, "hi, lady", "Fast Five", "2012") if err != nil { t.Fail() } if got != expected { t.Errorf("Expected to get %d, but now got %d.", expected, got) return } deleteKeys = append(deleteKeys, key2) expected4 = []string{"hi, lady", "Fast Five", "2012"} got4_interface, err = redisPoolObj_set.SMembers(key2) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SDIFFSTORE joe_diff_peter joe's_movies peter's_movies (integer) 2 */ destination := "joe_diff_peter" expected2 := 2 got2, err := redisPoolObj_set.SDiffStore(destination, key1, key2) if err != nil { t.Fail() } if got2 != expected2 { t.Errorf("Expected to get %d, but now got %d.", expected2, got2) return } deleteKeys = append(deleteKeys, destination) /* redis> SMEMBERS joe_diff_peter 1) "bet man" 2) "start war" */ expected4 = []string{"bet man", "start war"} got4_interface, err = redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } /* redis> SDIFFSTORE peter_diff_joe peter's_movies, joe's_movies (integer) 2 */ destination = "peter_diff_joe" expected2 = 2 got2, err = redisPoolObj_set.SDiffStore(destination, key2, key1) if err != nil { t.Fail() } if got2 != expected2 { t.Errorf("Expected to get %d, but now got %d.", expected2, got2) return } deleteKeys = append(deleteKeys, destination) /* redis> SMEMBERS joe_diff_peter 1) "hi, lady" 2) "Fast Five" */ expected4 = []string{"hi, lady", "Fast Five"} got4_interface, err = redisPoolObj_set.SMembers(destination) if err != nil { t.Fail() } got4, err = redisPoolObj_set.Strings(got4_interface) if err != nil { t.Fail() } if isTwoUnorderedSliceEqual(expected4, got4) == false { t.Errorf("Expected to get %v, but got %v\n", expected4, got4) return } }