mirror of
https://github.com/ipfs/kubo.git
synced 2025-08-06 19:44:01 +08:00
files2.0: Call close in adder
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
This commit is contained in:
@ -830,3 +830,73 @@ func TestLsNonUnixfs(t *testing.T) {
|
|||||||
t.Fatalf("expected 0 links, got %d", len(links))
|
t.Fatalf("expected 0 links, got %d", len(links))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type closeTestF struct {
|
||||||
|
files.File
|
||||||
|
closed bool
|
||||||
|
|
||||||
|
t *testing.T
|
||||||
|
}
|
||||||
|
|
||||||
|
type closeTestD struct {
|
||||||
|
files.Directory
|
||||||
|
closed bool
|
||||||
|
|
||||||
|
t *testing.T
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *closeTestD) Close() error {
|
||||||
|
if f.closed {
|
||||||
|
f.t.Fatal("already closed")
|
||||||
|
}
|
||||||
|
f.closed = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *closeTestF) Close() error {
|
||||||
|
if f.closed {
|
||||||
|
f.t.Fatal("already closed")
|
||||||
|
}
|
||||||
|
f.closed = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddCloses(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
_, api, err := makeAPI(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
n4 := &closeTestF{files.FileFrom([]byte("foo")), false, t}
|
||||||
|
d3 := &closeTestD{files.DirFrom(map[string]files.Node{
|
||||||
|
"sub": n4,
|
||||||
|
}), false, t}
|
||||||
|
n2 := &closeTestF{files.FileFrom([]byte("bar")), false, t}
|
||||||
|
n1 := &closeTestF{files.FileFrom([]byte("baz")), false, t}
|
||||||
|
d0 := &closeTestD{files.DirFrom(map[string]files.Node{
|
||||||
|
"a": d3,
|
||||||
|
"b": n1,
|
||||||
|
"c": n2,
|
||||||
|
}), false, t}
|
||||||
|
|
||||||
|
_, err = api.Unixfs().Add(ctx, d0)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d0.Close() // Adder doesn't close top-level file
|
||||||
|
|
||||||
|
for i, n := range []*closeTestF{n1, n2, n4} {
|
||||||
|
if !n.closed {
|
||||||
|
t.Errorf("file %d not closed!", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, n := range []*closeTestD{d0, d3} {
|
||||||
|
if !n.closed {
|
||||||
|
t.Errorf("dir %d not closed!", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -446,6 +446,7 @@ func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (adder *Adder) addFile(path string, file files.Node) error {
|
func (adder *Adder) addFile(path string, file files.Node) error {
|
||||||
|
defer file.Close()
|
||||||
err := adder.maybePauseForGC()
|
err := adder.maybePauseForGC()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user