cleaner testing, leveldb can sort and limit
This commit is contained in:
174
db_test.go
174
db_test.go
@@ -70,16 +70,24 @@ func TestImplementations(t *testing.T) {
|
||||
cases = append(cases, cacheFile)
|
||||
}
|
||||
|
||||
if dynomite, err := NewDynomite("localhost:8102", "", ""); err != nil {
|
||||
t.Logf("cannot make dynomite: %v", err)
|
||||
if _, ok := os.LookupEnv("DYNOMITE"); ok {
|
||||
if dynomite, err := NewDynomite("localhost:8102", "", ""); err != nil {
|
||||
t.Logf("cannot make dynomite: %v", err)
|
||||
} else {
|
||||
cases = append(cases, dynomite)
|
||||
}
|
||||
} else {
|
||||
cases = append(cases, dynomite)
|
||||
t.Log("$DYNOMITE not set. Skipping")
|
||||
}
|
||||
|
||||
if redis, err := NewRedis("localhost:8103", "", ""); err != nil {
|
||||
t.Logf("cannot make redis: %v", err)
|
||||
if _, ok := os.LookupEnv("REDIS"); ok {
|
||||
if redis, err := NewRedis("localhost:8103", "", ""); err != nil {
|
||||
t.Logf("cannot make redis: %v", err)
|
||||
} else {
|
||||
cases = append(cases, redis)
|
||||
}
|
||||
} else {
|
||||
cases = append(cases, redis)
|
||||
t.Log("$REDIS not set. Skipping")
|
||||
}
|
||||
|
||||
if bolt, err := NewBolt(path.Join(dir, "bolt")); err != nil {
|
||||
@@ -94,66 +102,88 @@ func TestImplementations(t *testing.T) {
|
||||
cases = append(cases, leveldb)
|
||||
}
|
||||
|
||||
mongoLN, err := net.Listen("tcp", "localhost:27017")
|
||||
if err == nil {
|
||||
defer mongoLN.Close()
|
||||
go func() {
|
||||
for {
|
||||
conn, err := mongoLN.Accept()
|
||||
if err == nil {
|
||||
conn.Close()
|
||||
if _, ok := os.LookupEnv("MONGO"); ok {
|
||||
mongoLN, err := net.Listen("tcp", "localhost:27017")
|
||||
if err == nil {
|
||||
defer mongoLN.Close()
|
||||
go func() {
|
||||
for {
|
||||
conn, err := mongoLN.Accept()
|
||||
if err == nil {
|
||||
conn.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
if mongo1, err := NewMongo("localhost:27017"); err == nil {
|
||||
cases = append(cases, mongo1)
|
||||
} else if mongo2, err := NewMongo("localhost:27017", "root", "pass"); err == nil {
|
||||
cases = append(cases, mongo2)
|
||||
}()
|
||||
}
|
||||
if mongo1, err := NewMongo("localhost:27017"); err == nil {
|
||||
cases = append(cases, mongo1)
|
||||
} else if mongo2, err := NewMongo("localhost:27017", "root", "pass"); err == nil {
|
||||
cases = append(cases, mongo2)
|
||||
} else {
|
||||
t.Logf("cannot make mongo: %v", err)
|
||||
}
|
||||
} else {
|
||||
t.Logf("cannot make mongo: %v", err)
|
||||
t.Log("$MONGO not set. Skipping")
|
||||
}
|
||||
|
||||
if memcache, err := NewMemcache("localhost:11211"); err != nil {
|
||||
t.Logf("cannot make memcache: %v", err)
|
||||
if _, ok := os.LookupEnv("MEMCACHED"); ok {
|
||||
if memcache, err := NewMemcache("localhost:11211"); err != nil {
|
||||
t.Logf("cannot make memcache: %v", err)
|
||||
} else {
|
||||
cases = append(cases, memcache)
|
||||
}
|
||||
} else {
|
||||
cases = append(cases, memcache)
|
||||
t.Log("$MEMCACHED not set. Skipping")
|
||||
}
|
||||
|
||||
if memcacheCluster, err := NewMemcacheCluster("localhost:11211"); err != nil {
|
||||
t.Logf("cannot make memcacheCluster: %v", err)
|
||||
if _, ok := os.LookupEnv("MEMCACHEDCLUSTER"); ok {
|
||||
if memcacheCluster, err := NewMemcacheCluster("localhost:11211"); err != nil {
|
||||
t.Logf("cannot make memcacheCluster: %v", err)
|
||||
} else {
|
||||
cases = append(cases, memcacheCluster)
|
||||
}
|
||||
} else {
|
||||
cases = append(cases, memcacheCluster)
|
||||
t.Log("$MEMCACHEDCLUSTER not set. Skipping")
|
||||
}
|
||||
|
||||
if minio, err := NewMinio("localhost:9000", "accesskey", "secretkey"); err != nil {
|
||||
t.Logf("cannot make minio: %v", err)
|
||||
if _, ok := os.LookupEnv("MINIO"); ok {
|
||||
if minio, err := NewMinio("localhost:9000", "accesskey", "secretkey"); err != nil {
|
||||
t.Logf("cannot make minio: %v", err)
|
||||
} else {
|
||||
cases = append(cases, minio)
|
||||
}
|
||||
} else {
|
||||
cases = append(cases, minio)
|
||||
t.Log("$MINIO not set. Skipping")
|
||||
}
|
||||
|
||||
validKey := "key"
|
||||
validValue := []byte("value")
|
||||
|
||||
for _, db := range cases {
|
||||
log.Printf("Trying %T", db)
|
||||
t.Logf(" %T: set", db)
|
||||
if err := db.Set(validKey, validValue, "ns1", "ns2"); err != nil {
|
||||
t.Errorf("%T) cannot set: %v", db, err)
|
||||
}
|
||||
t.Logf(" %T: get", db)
|
||||
if v, err := db.Get(validKey, "ns1", "ns2"); err != nil {
|
||||
t.Errorf("%T) cannot get: %v", db, err)
|
||||
} else if !bytes.Equal(v, validValue) {
|
||||
t.Errorf("%T) wrong get: %q vs %q", db, v, validValue)
|
||||
} else if keys, err := db.List([]string{"ns1", "ns2"}); err != nil || len(keys) < 1 {
|
||||
}
|
||||
t.Logf(" %T: list1", db)
|
||||
if keys, err := db.List([]string{"ns1", "ns2"}); err != nil || len(keys) < 1 {
|
||||
t.Errorf("%T) cannot List(): %v", db, err)
|
||||
} else if !strings.Contains(keys[0], validKey) {
|
||||
t.Errorf("%T) List()[0] != %s: %s", db, validKey, keys[0])
|
||||
} else if keys, err := db.List([]string{"ns1", "ns2"}, validKey[:1]); err != nil || len(keys) < 1 {
|
||||
}
|
||||
t.Logf(" %T: list2", db)
|
||||
if keys, err := db.List([]string{"ns1", "ns2"}, validKey[:1]); err != nil || len(keys) < 1 {
|
||||
t.Errorf("%T) cannot List(prefix): %v", db, err)
|
||||
} else if !strings.Contains(keys[0], validKey) {
|
||||
t.Errorf("%T) List(prefix)[0] != %s: %s", db, validKey, keys[0])
|
||||
} else {
|
||||
t.Logf("%25T GET: %s", db, v)
|
||||
}
|
||||
t.Logf(" %T: close", db)
|
||||
if err := db.Close(); err != nil {
|
||||
t.Errorf("cannot close %T: %v", db, err)
|
||||
}
|
||||
@@ -242,3 +272,77 @@ func recoverDeferred(c Type, t *testing.T, wg *sync.WaitGroup) {
|
||||
}
|
||||
defer wg.Done()
|
||||
}
|
||||
|
||||
func TestResolveLimitsStart(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
in string
|
||||
out string
|
||||
}{
|
||||
"explicit": {in: "no", out: "no"},
|
||||
}
|
||||
|
||||
for name, c := range cases {
|
||||
input := strings.Split(c.in, ",")
|
||||
out := resolveLimitsStart(input)
|
||||
if out != c.out {
|
||||
t.Errorf("%v: got %v, want %v from %v", name, out, c.out, c.in)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveLimitsStop(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
in string
|
||||
out string
|
||||
}{
|
||||
"short arr": {in: "", out: "}}}}}}"},
|
||||
"explicit": {in: ",no", out: "no"},
|
||||
}
|
||||
|
||||
for name, c := range cases {
|
||||
input := strings.Split(c.in, ",")
|
||||
out := resolveLimitsStop(input)
|
||||
if out != c.out {
|
||||
t.Errorf("%v: got %v, want %v from %v", name, out, c.out, c.in)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveLimitsLimit(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
in string
|
||||
out string
|
||||
}{
|
||||
"15": {in: ",,15", out: "15"},
|
||||
"0 set": {in: ",,0", out: "0"},
|
||||
"0 default": {in: ",,", out: "0"},
|
||||
}
|
||||
|
||||
for name, c := range cases {
|
||||
input := strings.Split(c.in, ",")
|
||||
out := resolveLimitsLimit(input)
|
||||
if out != c.out {
|
||||
t.Errorf("%v: got %v, want %v from %v", name, out, c.out, c.in)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveLimitsAscending(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
in string
|
||||
out string
|
||||
}{
|
||||
"desc": {in: "a,b,c,-", out: "false"},
|
||||
"asc": {in: "a,b,c,+", out: "true"},
|
||||
"default asc prev": {in: "a,b,c,", out: "true"},
|
||||
"default asc empty": {in: ",,,", out: "true"},
|
||||
}
|
||||
|
||||
for name, c := range cases {
|
||||
input := strings.Split(c.in, ",")
|
||||
out := resolveLimitsAscending(input)
|
||||
if out != c.out {
|
||||
t.Errorf("%v: got %v, want %v from %v", name, out, c.out, c.in)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user