@cryptotaxi247 / kubo / commits / 5ea9a3cde

coreapi: pin tests

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Jan 11, 2018 at 23:34 UTC 5ea9a3cde2cc7fe54bb6fa13d385ef6ed973c32c
2 files changed +210 -1
core/coreapi/pin.go
+1 -1
@@ -80,7 +80,7 @@ type badNode struct {
80 }
81
82 func (s *pinStatus) Ok() bool {
83 - return s.Ok()
83 + return s.ok
84 }
85
86 func (s *pinStatus) BadNodes() []coreiface.BadPinNode {
core/coreapi/pin_test.go new
+209
@@ -0,0 +1,209 @@
1 +package coreapi_test
2 +
3 +import (
4 + "context"
5 + "strings"
6 + "testing"
7 +)
8 +
9 +func TestPinAdd(t *testing.T) {
10 + ctx := context.Background()
11 + _, api, err := makeAPI(ctx)
12 + if err != nil {
13 + t.Error(err)
14 + }
15 +
16 + p, err := api.Unixfs().Add(ctx, strings.NewReader("foo"))
17 + if err != nil {
18 + t.Error(err)
19 + }
20 +
21 + err = api.Pin().Add(ctx, p)
22 + if err != nil {
23 + t.Error(err)
24 + }
25 +}
26 +
27 +func TestPinSimple(t *testing.T) {
28 + ctx := context.Background()
29 + _, api, err := makeAPI(ctx)
30 + if err != nil {
31 + t.Error(err)
32 + }
33 +
34 + p, err := api.Unixfs().Add(ctx, strings.NewReader("foo"))
35 + if err != nil {
36 + t.Error(err)
37 + }
38 +
39 + err = api.Pin().Add(ctx, p)
40 + if err != nil {
41 + t.Error(err)
42 + }
43 +
44 + list, err := api.Pin().Ls(ctx)
45 + if err != nil {
46 + t.Fatal(err)
47 + }
48 +
49 + if len(list) != 1 {
50 + t.Errorf("unexpected pin list len: %d", len(list))
51 + }
52 +
53 + if list[0].Path().String() != p.String() {
54 + t.Error("paths don't match")
55 + }
56 +
57 + if list[0].Type() != "recursive" {
58 + t.Error("unexpected pin type")
59 + }
60 +
61 + err = api.Pin().Rm(ctx, p)
62 + if err != nil {
63 + t.Fatal(err)
64 + }
65 +
66 + list, err = api.Pin().Ls(ctx)
67 + if err != nil {
68 + t.Fatal(err)
69 + }
70 +
71 + if len(list) != 0 {
72 + t.Errorf("unexpected pin list len: %d", len(list))
73 + }
74 +}
75 +
76 +func TestPinRecursive(t *testing.T) {
77 + ctx := context.Background()
78 + nd, api, err := makeAPI(ctx)
79 + if err != nil {
80 + t.Error(err)
81 + }
82 +
83 + p0, err := api.Unixfs().Add(ctx, strings.NewReader("foo"))
84 + if err != nil {
85 + t.Error(err)
86 + }
87 +
88 + p1, err := api.Unixfs().Add(ctx, strings.NewReader("bar"))
89 + if err != nil {
90 + t.Error(err)
91 + }
92 +
93 + p2, err := api.Dag().Put(ctx, strings.NewReader(`{"lnk": {"/": "`+p0.Cid().String()+`"}}`))
94 + if err != nil {
95 + t.Error(err)
96 + }
97 +
98 + p3, err := api.Dag().Put(ctx, strings.NewReader(`{"lnk": {"/": "`+p1.Cid().String()+`"}}`))
99 + if err != nil {
100 + t.Error(err)
101 + }
102 +
103 + err = api.Pin().Add(ctx, p2)
104 + if err != nil {
105 + t.Error(err)
106 + }
107 +
108 + err = api.Pin().Add(ctx, p3, api.Pin().WithRecursive(false))
109 + if err != nil {
110 + t.Error(err)
111 + }
112 +
113 + list, err := api.Pin().Ls(ctx)
114 + if err != nil {
115 + t.Fatal(err)
116 + }
117 +
118 + if len(list) != 3 {
119 + t.Errorf("unexpected pin list len: %d", len(list))
120 + }
121 +
122 + list, err = api.Pin().Ls(ctx, api.Pin().WithType("direct"))
123 + if err != nil {
124 + t.Fatal(err)
125 + }
126 +
127 + if len(list) != 1 {
128 + t.Errorf("unexpected pin list len: %d", len(list))
129 + }
130 +
131 + if list[0].Path().String() != p3.String() {
132 + t.Error("unexpected path")
133 + }
134 +
135 + list, err = api.Pin().Ls(ctx, api.Pin().WithType("recursive"))
136 + if err != nil {
137 + t.Fatal(err)
138 + }
139 +
140 + if len(list) != 1 {
141 + t.Errorf("unexpected pin list len: %d", len(list))
142 + }
143 +
144 + if list[0].Path().String() != p2.String() {
145 + t.Error("unexpected path")
146 + }
147 +
148 + list, err = api.Pin().Ls(ctx, api.Pin().WithType("indirect"))
149 + if err != nil {
150 + t.Fatal(err)
151 + }
152 +
153 + if len(list) != 1 {
154 + t.Errorf("unexpected pin list len: %d", len(list))
155 + }
156 +
157 + if list[0].Path().String() != p0.String() {
158 + t.Error("unexpected path")
159 + }
160 +
161 + res, err := api.Pin().Verify(ctx)
162 + if err != nil {
163 + t.Fatal(err)
164 + }
165 + n := 0
166 + for r := range res {
167 + if !r.Ok() {
168 + t.Error("expected pin to be ok")
169 + }
170 + n++
171 + }
172 +
173 + if n != 1 {
174 + t.Errorf("unexpected verify result count: %d", n)
175 + }
176 +
177 + err = nd.Blockstore.DeleteBlock(p0.Cid())
178 + if err != nil {
179 + t.Fatal(err)
180 + }
181 +
182 + res, err = api.Pin().Verify(ctx)
183 + if err != nil {
184 + t.Fatal(err)
185 + }
186 + n = 0
187 + for r := range res {
188 + if r.Ok() {
189 + t.Error("expected pin to not be ok")
190 + }
191 +
192 + if len(r.BadNodes()) != 1 {
193 + t.Fatalf("unexpected badNodes len")
194 + }
195 +
196 + if r.BadNodes()[0].Path().String() != p0.String() {
197 + t.Error("unexpected badNode path")
198 + }
199 +
200 + if r.BadNodes()[0].Err().Error() != "merkledag: not found" {
201 + t.Errorf("unexpected badNode error: %s", r.BadNodes()[0].Err().Error())
202 + }
203 + n++
204 + }
205 +
206 + if n != 1 {
207 + t.Errorf("unexpected verify result count: %d", n)
208 + }
209 +}