1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-05-21 08:56:37 +08:00

coreapi unixfs: test recursive adding

License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
This commit is contained in:
Łukasz Magiera
2018-10-03 22:06:35 +02:00
parent 8dda69575a
commit c6f8e7e2a6
3 changed files with 92 additions and 21 deletions

View File

@ -163,7 +163,7 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
switch dn := nd.(type) { switch dn := nd.(type) {
case *dag.ProtoNode: case *dag.ProtoNode:
fsn, err := ft.FSNodeFromBytes(nd.RawData()) fsn, err := ft.FSNodeFromBytes(dn.Data())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -172,7 +172,6 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
} }
case *dag.RawNode: case *dag.RawNode:
r := ioutil.NopCloser(bytes.NewReader(dn.RawData())) r := ioutil.NopCloser(bytes.NewReader(dn.RawData()))
fi := &sizeInfo{ fi := &sizeInfo{
size: int64(len(dn.RawData())), size: int64(len(dn.RawData())),

View File

@ -142,11 +142,12 @@ func TestAdd(t *testing.T) {
} }
cases := []struct { cases := []struct {
name string name string
data func() files.File data func() files.File
path string path string
err string err string
opts []options.UnixfsAddOption recursive bool
opts []options.UnixfsAddOption
}{ }{
// Simple cases // Simple cases
{ {
@ -231,11 +232,45 @@ func TestAdd(t *testing.T) {
path: hello, path: hello,
opts: []options.UnixfsAddOption{options.Unixfs.Local(true)}, opts: []options.UnixfsAddOption{options.Unixfs.Local(true)},
}, },
// multi file
{
name: "simpleDir",
data: func() files.File {
return files.NewSliceFile("t", "t", []files.File{
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
})
},
recursive: true,
path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
},
{
name: "twoLevelDir",
data: func() files.File {
return files.NewSliceFile("t", "t", []files.File{
files.NewSliceFile("t/abc", "t/abc", []files.File{
files.NewReaderFile("t/abc/def", "t/abc/def", ioutil.NopCloser(strings.NewReader("world")), nil),
}),
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
})
},
recursive: true,
path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
},
} }
for _, testCase := range cases { for _, testCase := range cases {
t.Run(testCase.name, func(t *testing.T) { t.Run(testCase.name, func(t *testing.T) {
p, err := api.Unixfs().Add(ctx, testCase.data(), testCase.opts...)
data := testCase.data()
if testCase.recursive {
data = files.NewSliceFile("", "", []files.File{
data,
})
}
p, err := api.Unixfs().Add(ctx, data, testCase.opts...)
if testCase.err != "" { if testCase.err != "" {
if err == nil { if err == nil {
t.Fatalf("expected an error: %s", testCase.err) t.Fatalf("expected an error: %s", testCase.err)
@ -246,27 +281,64 @@ func TestAdd(t *testing.T) {
return return
} }
if err != nil { if err != nil {
t.Error(err) t.Fatal(err)
} }
if p.String() != testCase.path { if p.String() != testCase.path {
t.Errorf("expected path %s, got: %s", testCase.path, p) t.Errorf("expected path %s, got: %s", testCase.path, p)
} }
/*r, err := api.Unixfs().Cat(ctx, p) var cmpFile func(orig files.File, got files.File)
cmpFile = func(orig files.File, got files.File) {
if orig.IsDirectory() != got.IsDirectory() {
t.Fatal("file type mismatch")
}
if !orig.IsDirectory() {
defer orig.Close()
defer got.Close()
do, err := ioutil.ReadAll(orig)
if err != nil {
t.Fatal(err)
}
dg, err := ioutil.ReadAll(got)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(do, dg) {
t.Fatal("data not equal")
}
return
}
for {
fo, err := orig.NextFile()
fg, err2 := got.NextFile()
if err != nil {
if err == io.EOF && err2 == io.EOF {
break
}
t.Fatal(err)
}
if err2 != nil {
t.Fatal(err)
}
cmpFile(fo, fg)
}
}
f, err := api.Unixfs().Get(ctx, p)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
buf := make([]byte, len(testCase.data))
_, err = io.ReadFull(r, buf)
if err != nil {
t.Error(err)
}
if string(buf) != testCase.data {
t.Fatalf("expected [%s], got [%s] [err=%s]", helloStr, string(buf), err)
}*/
cmpFile(testCase.data(), f)
}) })
} }
} }

View File

@ -415,14 +415,14 @@ func (adder *Adder) AddAllAndPin(file files.File) (ipld.Node, error) {
// single files.File f is treated as a directory, affecting hidden file // single files.File f is treated as a directory, affecting hidden file
// semantics. // semantics.
for { for {
file, err := file.NextFile() f, err := file.NextFile()
if err == io.EOF { if err == io.EOF {
// Finished the list of files. // Finished the list of files.
break break
} else if err != nil { } else if err != nil {
return nil, err return nil, err
} }
if err := adder.addFile(file); err != nil { if err := adder.addFile(f); err != nil {
return nil, err return nil, err
} }
} }