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:
@ -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())),
|
||||||
|
@ -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)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user