Browse Source

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

Yicheng Qin 11 years ago
parent
commit
cc1df691cc
1 changed files with 46 additions and 18 deletions
  1. 46 18
      store/store_test.go

+ 46 - 18
store/store_test.go

@@ -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", "")
-	assert.Equal(t, *e.Node.Nodes[0].Value, "X", "")
-	assert.Equal(t, e.Node.Nodes[0].Dir, false, "")
-	assert.Equal(t, e.Node.Nodes[1].Key, "/foo/baz", "")
-	assert.Equal(t, e.Node.Nodes[1].Dir, true, "")
-	assert.Equal(t, len(e.Node.Nodes[1].Nodes), 2, "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[0].Key, "/foo/baz/bat", "")
-	assert.Equal(t, *e.Node.Nodes[1].Nodes[0].Value, "Y", "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[0].Dir, false, "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[1].Key, "/foo/baz/ttl", "")
-	assert.Equal(t, *e.Node.Nodes[1].Nodes[1].Value, "Y", "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[1].Dir, false, "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[1].TTL, 3, "")
+	var bazNodes NodeExterns
+	for _, node := range e.Node.Nodes {
+		switch node.Key {
+		case "/foo/bar":
+			assert.Equal(t, *node.Value, "X", "")
+			assert.Equal(t, node.Dir, false, "")
+		case "/foo/baz":
+			assert.Equal(t, node.Dir, true, "")
+			assert.Equal(t, len(node.Nodes), 2, "")
+			bazNodes = node.Nodes
+		default:
+			t.Errorf("key = %s, not matched", node.Key)
+		}
+	}
+	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", "")
-	assert.Equal(t, e.Node.Nodes[1].Key, "/foo/y", "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[0].Key, "/foo/y/a", "")
-	assert.Equal(t, e.Node.Nodes[1].Nodes[1].Key, "/foo/y/b", "")
-	assert.Equal(t, e.Node.Nodes[2].Key, "/foo/z", "")
+	var yNodes NodeExterns
+	for _, node := range e.Node.Nodes {
+		switch node.Key {
+		case "/foo/x":
+		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) {