aboutsummaryrefslogtreecommitdiffstats
path: root/utils/merkletrie/noder/noder_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'utils/merkletrie/noder/noder_test.go')
-rw-r--r--utils/merkletrie/noder/noder_test.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/utils/merkletrie/noder/noder_test.go b/utils/merkletrie/noder/noder_test.go
new file mode 100644
index 0000000..14bef4a
--- /dev/null
+++ b/utils/merkletrie/noder/noder_test.go
@@ -0,0 +1,94 @@
+package noder
+
+import . "gopkg.in/check.v1"
+
+type NoderSuite struct{}
+
+var _ = Suite(&NoderSuite{})
+
+type noderMock struct {
+ name string
+ hash []byte
+ isDir bool
+ children []Noder
+}
+
+func (n noderMock) String() string { return n.Name() }
+func (n noderMock) Hash() []byte { return n.hash }
+func (n noderMock) Name() string { return n.name }
+func (n noderMock) IsDir() bool { return n.isDir }
+func (n noderMock) Children() ([]Noder, error) { return n.children, nil }
+func (n noderMock) NumChildren() (int, error) { return len(n.children), nil }
+
+// Returns a sequence with the noders 3, 2, and 1 from the
+// following diagram:
+//
+// 3
+// |
+// 2
+// |
+// 1
+// / \
+// c1 c2
+//
+// This is also the path of "1".
+func nodersFixture() []Noder {
+ n1 := &noderMock{
+ name: "1",
+ hash: []byte{0x00, 0x01, 0x02},
+ isDir: true,
+ children: childrenFixture(),
+ }
+ n2 := &noderMock{name: "2"}
+ n3 := &noderMock{name: "3"}
+ return []Noder{n3, n2, n1}
+}
+
+// Returns a collection of 2 noders: c1, c2.
+func childrenFixture() []Noder {
+ c1 := &noderMock{name: "c1"}
+ c2 := &noderMock{name: "c2"}
+ return []Noder{c1, c2}
+}
+
+// Returns the same as nodersFixture but sorted by name, this is: "1",
+// "2" and then "3".
+func sortedNodersFixture() []Noder {
+ n1 := &noderMock{
+ name: "1",
+ hash: []byte{0x00, 0x01, 0x02},
+ isDir: true,
+ children: childrenFixture(),
+ }
+ n2 := &noderMock{name: "2"}
+ n3 := &noderMock{name: "3"}
+ return []Noder{n1, n2, n3} // the same as nodersFixture but sorted by name
+}
+
+// returns nodersFixture as the path of "1".
+func pathFixture() Path {
+ return Path(nodersFixture())
+}
+
+func (s *NoderSuite) TestString(c *C) {
+ c.Assert(pathFixture().String(), Equals, "3/2/1")
+}
+
+func (s *NoderSuite) TestLast(c *C) {
+ c.Assert(pathFixture().Last().Name(), Equals, "1")
+}
+
+func (s *NoderSuite) TestPathImplementsNoder(c *C) {
+ p := pathFixture()
+ c.Assert(p.Name(), Equals, "1")
+ c.Assert(p.Hash(), DeepEquals, []byte{0x00, 0x01, 0x02})
+ c.Assert(p.IsDir(), Equals, true)
+
+ children, err := p.Children()
+ c.Assert(err, IsNil)
+ c.Assert(children, DeepEquals, childrenFixture())
+
+ numChildren, err := p.NumChildren()
+ c.Assert(err, IsNil)
+ c.Assert(numChildren, Equals, 2)
+}