Skip to content

Commit

Permalink
add SMEMBERS command
Browse files Browse the repository at this point in the history
  • Loading branch information
jozic committed Mar 6, 2015
1 parent acdd9c6 commit db45ce4
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
26 changes: 26 additions & 0 deletions ops/set_ro.go
Expand Up @@ -30,3 +30,29 @@ func SCARD(args [][]byte, txn *mdb.Txn, w io.Writer) (int64, error) {
// write result
return resp.WriteTo(w)
}

// args: key
func SMEMBERS(args [][]byte, txn *mdb.Txn, w io.Writer) (int64, error) {
if err := checkExactArgs(args, 1, "smembers"); err != nil {
return redis.NewError(err.Error()).WriteTo(w)
}

key := args[0]
println("SMEMBERS", string(key))

var resp redis.ReplyWriter

rawSet, err := dbwrap.GetRawSet(txn, key)
if err == mdb.NotFound {
// Redis returns 0 for non-existing key
return redis.NilArrayReply.WriteTo(w)
} else if err != nil {
// write error
resp = redis.NewError(err.Error())
} else {
members := dbwrap.RawArrayToMembers(rawSet)
resp = &redis.ArrayReply{members}
}
// write result
return resp.WriteTo(w)
}
4 changes: 2 additions & 2 deletions server.go
Expand Up @@ -79,8 +79,8 @@ var (
// HKEYS
// HVALS
// sets
// "SMEMBERS": ops.SMEMBERS,
"SCARD": ops.SCARD,
"SMEMBERS": ops.SMEMBERS,
"SCARD": ops.SCARD,
// SISMEMBER
// SRANDMEMBER
// ttl
Expand Down
33 changes: 33 additions & 0 deletions test/set_test.go
@@ -1,6 +1,8 @@
package raftis

import (
"reflect"
"sort"
"testing"
)

Expand Down Expand Up @@ -70,3 +72,34 @@ func TestSADDAndSCARD(t *testing.T) {
}

}

func TestSMembers(t *testing.T) {
setupTest()

client := testcluster.clients[0]

members, err := client.SMembers("smembers_test")
if err != nil {
t.Fatal(err)
}
if members != nil {
t.Fatalf("SMEMBERS for non-existing key must return nil, got %s", members)
}

_, err = client.SAdd("smembers_test", "a", "b", "c")
if err != nil {
t.Fatal(err)
}

members, err = client.SMembers("smembers_test")
if err != nil {
t.Fatal(err)
}
sort.Strings(members)

expected := []string{"a", "b", "c"}

if !reflect.DeepEqual(expected, members) {
t.Fatalf("Expected members %s do not match actual members %s", expected, members)
}
}

0 comments on commit db45ce4

Please sign in to comment.