Make kvtests legible

This commit is contained in:
Ethan Frey 2017-07-26 16:23:28 -04:00
parent 744d035d95
commit d0d1a96517
1 changed files with 47 additions and 50 deletions

View File

@ -14,6 +14,20 @@ func GetDBs() []SimpleDB {
} }
} }
func b(k string) []byte {
if k == "" {
return nil
}
return []byte(k)
}
func m(k, v string) Model {
return Model{
Key: b(k),
Value: b(v),
}
}
// TestKVStore makes sure that get/set/remove operations work, // TestKVStore makes sure that get/set/remove operations work,
// as well as list // as well as list
func TestKVStore(t *testing.T) { func TestKVStore(t *testing.T) {
@ -21,7 +35,7 @@ func TestKVStore(t *testing.T) {
type listQuery struct { type listQuery struct {
// this is the list query // this is the list query
start, end []byte start, end string
limit int limit int
// expected result from List, first element also expected for First // expected result from List, first element also expected for First
expected []Model expected []Model
@ -37,69 +51,51 @@ func TestKVStore(t *testing.T) {
}{ }{
// simple add // simple add
{ {
[]Model{ toSet: []Model{m("a", "b"), m("c", "d")},
{[]byte{1}, []byte{2}}, toRemove: nil,
{[]byte{3}, []byte{4}}, toGet: []Model{m("a", "b")},
}, toList: []listQuery{
nil,
[]Model{{[]byte{1}, []byte{2}}},
[]listQuery{
{ {
[]byte{1}, []byte{4}, 0, "a", "d", 0,
// all []Model{m("a", "b"), m("c", "d")},
[]Model{ m("c", "d"),
{[]byte{1}, []byte{2}},
{[]byte{3}, []byte{4}},
},
// last one
Model{[]byte{3}, []byte{4}},
}, },
{ {
[]byte{1}, []byte{3}, 10, "a", "c", 10,
// all []Model{m("a", "b")},
[]Model{ m("a", "b"),
{[]byte{1}, []byte{2}},
},
// last one
Model{[]byte{1}, []byte{2}},
}, },
}, },
}, },
// over-write data, remove // over-write data, remove
{ {
[]Model{ toSet: []Model{
{[]byte{1}, []byte{2}}, m("a", "1"),
{[]byte{2}, []byte{2}}, m("b", "2"),
{[]byte{3}, []byte{2}}, m("c", "3"),
{[]byte{2}, []byte{4}}, m("b", "4"),
}, },
[]Model{{[]byte{3}, []byte{2}}}, toRemove: []Model{m("c", "3")},
[]Model{ toGet: []Model{
{[]byte{1}, []byte{2}}, m("a", "1"),
{[]byte{2}, []byte{4}}, m("b", "4"),
{[]byte{3}, nil}, m("c", ""),
}, },
[]listQuery{ toList: []listQuery{
{ {
[]byte{0, 5}, []byte{10}, 1, "0d", "h", 1,
// all []Model{m("a", "1")},
[]Model{ m("b", "4"),
{[]byte{1}, []byte{2}},
},
// last
Model{[]byte{2}, []byte{4}},
}, },
{ {
[]byte{1, 4}, []byte{1, 7}, 10, "ad", "ak", 10,
[]Model{}, []Model{},
Model{}, Model{},
}, },
{ {
[]byte{1, 5}, []byte{10}, 0, "ad", "k", 0,
[]Model{ []Model{m("b", "4")},
{[]byte{2}, []byte{4}}, m("b", "4"),
},
Model{[]byte{2}, []byte{4}},
}, },
}, },
}, },
@ -121,15 +117,16 @@ func TestKVStore(t *testing.T) {
assert.Equal(len(g.Value) != 0, has, "%d/%d/%d", i, j, k) assert.Equal(len(g.Value) != 0, has, "%d/%d/%d", i, j, k)
} }
for k, lq := range tc.toList { for k, lq := range tc.toList {
list := db.List(lq.start, lq.end, lq.limit) start, end := []byte(lq.start), []byte(lq.end)
list := db.List(start, end, lq.limit)
if assert.EqualValues(lq.expected, list, "%d/%d/%d", i, j, k) { if assert.EqualValues(lq.expected, list, "%d/%d/%d", i, j, k) {
var first Model var first Model
if len(lq.expected) > 0 { if len(lq.expected) > 0 {
first = lq.expected[0] first = lq.expected[0]
} }
f := db.First(lq.start, lq.end) f := db.First(start, end)
assert.EqualValues(first, f, "%d/%d/%d", i, j, k) assert.EqualValues(first, f, "%d/%d/%d", i, j, k)
l := db.Last(lq.start, lq.end) l := db.Last(start, end)
assert.EqualValues(lq.last, l, "%d/%d/%d", i, j, k) assert.EqualValues(lq.last, l, "%d/%d/%d", i, j, k)
} }
} }