@cryptotaxi247 / kubo / commits / ff42aa50d

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