store: fix the bug caused by random iteration order over map

This commit is contained in:
Yicheng Qin 2014-08-15 19:23:31 -07:00
parent e9a22d0f34
commit cc1df691cc

View File

@ -51,19 +51,33 @@ func TestStoreGetDirectory(t *testing.T) {
assert.Equal(t, e.Action, "get", "") assert.Equal(t, e.Action, "get", "")
assert.Equal(t, e.Node.Key, "/foo", "") assert.Equal(t, e.Node.Key, "/foo", "")
assert.Equal(t, len(e.Node.Nodes), 2, "") assert.Equal(t, len(e.Node.Nodes), 2, "")
assert.Equal(t, e.Node.Nodes[0].Key, "/foo/bar", "") var bazNodes NodeExterns
assert.Equal(t, *e.Node.Nodes[0].Value, "X", "") for _, node := range e.Node.Nodes {
assert.Equal(t, e.Node.Nodes[0].Dir, false, "") switch node.Key {
assert.Equal(t, e.Node.Nodes[1].Key, "/foo/baz", "") case "/foo/bar":
assert.Equal(t, e.Node.Nodes[1].Dir, true, "") assert.Equal(t, *node.Value, "X", "")
assert.Equal(t, len(e.Node.Nodes[1].Nodes), 2, "") assert.Equal(t, node.Dir, false, "")
assert.Equal(t, e.Node.Nodes[1].Nodes[0].Key, "/foo/baz/bat", "") case "/foo/baz":
assert.Equal(t, *e.Node.Nodes[1].Nodes[0].Value, "Y", "") assert.Equal(t, node.Dir, true, "")
assert.Equal(t, e.Node.Nodes[1].Nodes[0].Dir, false, "") assert.Equal(t, len(node.Nodes), 2, "")
assert.Equal(t, e.Node.Nodes[1].Nodes[1].Key, "/foo/baz/ttl", "") bazNodes = node.Nodes
assert.Equal(t, *e.Node.Nodes[1].Nodes[1].Value, "Y", "") default:
assert.Equal(t, e.Node.Nodes[1].Nodes[1].Dir, false, "") t.Errorf("key = %s, not matched", node.Key)
assert.Equal(t, e.Node.Nodes[1].Nodes[1].TTL, 3, "") }
}
for _, node := range bazNodes {
switch node.Key {
case "/foo/baz/bat":
assert.Equal(t, *node.Value, "Y", "")
assert.Equal(t, node.Dir, false, "")
case "/foo/baz/ttl":
assert.Equal(t, *node.Value, "Y", "")
assert.Equal(t, node.Dir, false, "")
assert.Equal(t, node.TTL, 3, "")
default:
t.Errorf("key = %s, not matched", node.Key)
}
}
} }
// Ensure that the store can retrieve a directory in sorted order. // Ensure that the store can retrieve a directory in sorted order.
@ -77,11 +91,25 @@ func TestStoreGetSorted(t *testing.T) {
s.Create("/foo/y/b", false, "0", false, Permanent) s.Create("/foo/y/b", false, "0", false, Permanent)
e, err := s.Get("/foo", true, true) e, err := s.Get("/foo", true, true)
assert.Nil(t, err, "") assert.Nil(t, err, "")
assert.Equal(t, e.Node.Nodes[0].Key, "/foo/x", "") var yNodes NodeExterns
assert.Equal(t, e.Node.Nodes[1].Key, "/foo/y", "") for _, node := range e.Node.Nodes {
assert.Equal(t, e.Node.Nodes[1].Nodes[0].Key, "/foo/y/a", "") switch node.Key {
assert.Equal(t, e.Node.Nodes[1].Nodes[1].Key, "/foo/y/b", "") case "/foo/x":
assert.Equal(t, e.Node.Nodes[2].Key, "/foo/z", "") case "/foo/y":
yNodes = node.Nodes
case "/foo/z":
default:
t.Errorf("key = %s, not matched", node.Key)
}
}
for _, node := range yNodes {
switch node.Key {
case "/foo/y/a":
case "/foo/y/b":
default:
t.Errorf("key = %s, not matched", node.Key)
}
}
} }
func TestSet(t *testing.T) { func TestSet(t *testing.T) {