@cryptotaxi247 / kubo / commits / c6f8e7e2a

coreapi unixfs: test recursive adding

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

Łukasz Magiera committed Oct 3, 2018 at 22:06 UTC c6f8e7e2a6d92dd16dc5376cbc930dea68731cec
3 files changed +92 -21
core/coreapi/unixfile.go
+1 -2
@@ -163,7 +163,7 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
163
164 switch dn := nd.(type) {
165 case *dag.ProtoNode:
166 - fsn, err := ft.FSNodeFromBytes(nd.RawData())
166 + fsn, err := ft.FSNodeFromBytes(dn.Data())
167 if err != nil {
168 return nil, err
169 }
@@ -172,7 +172,6 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
172 }
173
174 case *dag.RawNode:
175 -
175 r := ioutil.NopCloser(bytes.NewReader(dn.RawData()))
176 fi := &sizeInfo{
177 size: int64(len(dn.RawData())),
core/coreapi/unixfs_test.go
+89 -17
@@ -142,11 +142,12 @@ func TestAdd(t *testing.T) {
142 }
143
144 cases := []struct {
145 - name string
146 - data func() files.File
147 - path string
148 - err string
149 - opts []options.UnixfsAddOption
145 + name string
146 + data func() files.File
147 + path string
148 + err string
149 + recursive bool
150 + opts []options.UnixfsAddOption
151 }{
152 // Simple cases
153 {
@@ -231,11 +232,45 @@ func TestAdd(t *testing.T) {
232 path: hello,
233 opts: []options.UnixfsAddOption{options.Unixfs.Local(true)},
234 },
235 + // multi file
236 + {
237 + name: "simpleDir",
238 + data: func() files.File {
239 + return files.NewSliceFile("t", "t", []files.File{
240 + files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
241 + files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
242 + })
243 + },
244 + recursive: true,
245 + path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
246 + },
247 + {
248 + name: "twoLevelDir",
249 + data: func() files.File {
250 + return files.NewSliceFile("t", "t", []files.File{
251 + files.NewSliceFile("t/abc", "t/abc", []files.File{
252 + files.NewReaderFile("t/abc/def", "t/abc/def", ioutil.NopCloser(strings.NewReader("world")), nil),
253 + }),
254 + files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
255 + files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
256 + })
257 + },
258 + recursive: true,
259 + path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
260 + },
261 }
262
263 for _, testCase := range cases {
264 t.Run(testCase.name, func(t *testing.T) {
238 - p, err := api.Unixfs().Add(ctx, testCase.data(), testCase.opts...)
265 +
266 + data := testCase.data()
267 + if testCase.recursive {
268 + data = files.NewSliceFile("", "", []files.File{
269 + data,
270 + })
271 + }
272 +
273 + p, err := api.Unixfs().Add(ctx, data, testCase.opts...)
274 if testCase.err != "" {
275 if err == nil {
276 t.Fatalf("expected an error: %s", testCase.err)
@@ -246,27 +281,64 @@ func TestAdd(t *testing.T) {
281 return
282 }
283 if err != nil {
249 - t.Error(err)
284 + t.Fatal(err)
285 }
286
287 if p.String() != testCase.path {
288 t.Errorf("expected path %s, got: %s", testCase.path, p)
289 }
290
256 - /*r, err := api.Unixfs().Cat(ctx, p)
257 - if err != nil {
258 - t.Fatal(err)
291 + var cmpFile func(orig files.File, got files.File)
292 + cmpFile = func(orig files.File, got files.File) {
293 + if orig.IsDirectory() != got.IsDirectory() {
294 + t.Fatal("file type mismatch")
295 + }
296 +
297 + if !orig.IsDirectory() {
298 + defer orig.Close()
299 + defer got.Close()
300 +
301 + do, err := ioutil.ReadAll(orig)
302 + if err != nil {
303 + t.Fatal(err)
304 + }
305 +
306 + dg, err := ioutil.ReadAll(got)
307 + if err != nil {
308 + t.Fatal(err)
309 + }
310 +
311 + if !bytes.Equal(do, dg) {
312 + t.Fatal("data not equal")
313 + }
314 +
315 + return
316 + }
317 +
318 + for {
319 + fo, err := orig.NextFile()
320 + fg, err2 := got.NextFile()
321 +
322 + if err != nil {
323 + if err == io.EOF && err2 == io.EOF {
324 + break
325 + }
326 + t.Fatal(err)
327 + }
328 + if err2 != nil {
329 + t.Fatal(err)
330 + }
331 +
332 + cmpFile(fo, fg)
333 + }
334 }
260 - buf := make([]byte, len(testCase.data))
261 - _, err = io.ReadFull(r, buf)
335 +
336 + f, err := api.Unixfs().Get(ctx, p)
337 if err != nil {
263 - t.Error(err)
338 + t.Fatal(err)
339 }
340
266 - if string(buf) != testCase.data {
267 - t.Fatalf("expected [%s], got [%s] [err=%s]", helloStr, string(buf), err)
268 - }*/
269 -
341 + cmpFile(testCase.data(), f)
342 })
343 }
344 }
core/coreunix/add.go
+2 -2
@@ -415,14 +415,14 @@ func (adder *Adder) AddAllAndPin(file files.File) (ipld.Node, error) {
415 // single files.File f is treated as a directory, affecting hidden file
416 // semantics.
417 for {
418 - file, err := file.NextFile()
418 + f, err := file.NextFile()
419 if err == io.EOF {
420 // Finished the list of files.
421 break
422 } else if err != nil {
423 return nil, err
424 }
425 - if err := adder.addFile(file); err != nil {
425 + if err := adder.addFile(f); err != nil {
426 return nil, err
427 }
428 }