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
}