files2.0: Call close in adder
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Dec 6, 2018 at 09:29 UTC
ff42aa50d0287612c7244a276081586e416a5c3c
2 files changed
+71
core/coreapi/unixfs_test.go
+70
@@ -830,3 +830,73 @@ func TestLsNonUnixfs(t *testing.T) {
830
t.Fatalf("expected 0 links, got %d", len(links))
831
}
832
}
833
+
834
+type closeTestF struct {
835
+ files.File
836
+ closed bool
837
+
838
+ t *testing.T
839
+}
840
+
841
+type closeTestD struct {
842
+ files.Directory
843
+ closed bool
844
+
845
+ t *testing.T
846
+}
847
+
848
+func (f *closeTestD) Close() error {
849
+ if f.closed {
850
+ f.t.Fatal("already closed")
851
+ }
852
+ f.closed = true
853
+ return nil
854
+}
855
+
856
+func (f *closeTestF) Close() error {
857
+ if f.closed {
858
+ f.t.Fatal("already closed")
859
+ }
860
+ f.closed = true
861
+ return nil
862
+}
863
+
864
+func TestAddCloses(t *testing.T) {
865
+ ctx := context.Background()
866
+ _, api, err := makeAPI(ctx)
867
+ if err != nil {
868
+ t.Error(err)
869
+ }
870
+
871
+ n4 := &closeTestF{files.FileFrom([]byte("foo")), false, t}
872
+ d3 := &closeTestD{files.DirFrom(map[string]files.Node{
873
+ "sub": n4,
874
+ }), false, t}
875
+ n2 := &closeTestF{files.FileFrom([]byte("bar")), false, t}
876
+ n1 := &closeTestF{files.FileFrom([]byte("baz")), false, t}
877
+ d0 := &closeTestD{files.DirFrom(map[string]files.Node{
878
+ "a": d3,
879
+ "b": n1,
880
+ "c": n2,
881
+ }), false, t}
882
+
883
+ _, err = api.Unixfs().Add(ctx, d0)
884
+ if err != nil {
885
+ t.Error(err)
886
+ }
887
+
888
+ d0.Close() // Adder doesn't close top-level file
889
+
890
+ for i, n := range []*closeTestF{n1, n2, n4} {
891
+ if !n.closed {
892
+ t.Errorf("file %d not closed!", i)
893
+ }
894
+ }
895
+
896
+ for i, n := range []*closeTestD{d0, d3} {
897
+ if !n.closed {
898
+ t.Errorf("dir %d not closed!", i)
899
+ }
900
+ }
901
+
902
+}
core/coreunix/add.go
+1
@@ -446,6 +446,7 @@ func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
446
}
447
448
func (adder *Adder) addFile(path string, file files.Node) error {
449
+ defer file.Close()
450
err := adder.maybePauseForGC()
451
if err != nil {
452
return err