github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/repo/fs/fs_test.go (about) 1 package fsrepo 2 3 import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "testing" 8 9 "github.com/qri-io/qfs" 10 "github.com/qri-io/qfs/muxfs" 11 "github.com/qri-io/qri/auth/key" 12 testcfg "github.com/qri-io/qri/config/test" 13 "github.com/qri-io/qri/dscache" 14 "github.com/qri-io/qri/dsref" 15 dsrefspec "github.com/qri-io/qri/dsref/spec" 16 "github.com/qri-io/qri/event" 17 "github.com/qri-io/qri/logbook" 18 "github.com/qri-io/qri/logbook/oplog" 19 "github.com/qri-io/qri/profile" 20 "github.com/qri-io/qri/repo" 21 reporef "github.com/qri-io/qri/repo/ref" 22 "github.com/qri-io/qri/repo/test/spec" 23 ) 24 25 func TestRepo(t *testing.T) { 26 path, err := ioutil.TempDir("", "qri_repo_test") 27 if err != nil { 28 t.Fatal(err) 29 } 30 31 rmf := func(t *testing.T) (repo.Repo, func()) { 32 if err := os.RemoveAll(path); err != nil { 33 t.Fatalf("error removing files: %q", err) 34 } 35 36 pro, err := profile.NewProfile(testcfg.DefaultProfileForTesting()) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 ctx := context.Background() 42 bus := event.NewBus(ctx) 43 fs, err := muxfs.New(ctx, []qfs.Config{ 44 {Type: "mem"}, 45 {Type: "local"}, 46 }) 47 if err != nil { 48 t.Fatal(err) 49 } 50 51 keyStore, err := key.NewMemStore() 52 if err != nil { 53 t.Fatal(err) 54 } 55 56 pros, err := profile.NewMemStore(ctx, pro, keyStore) 57 if err != nil { 58 t.Fatal(err) 59 } 60 61 book, err := logbook.NewJournal(*pro, bus, fs, "/mem/logbook.qfb") 62 if err != nil { 63 t.Fatal(err) 64 } 65 66 cache := dscache.NewDscache(ctx, fs, bus, pro.Peername, "") 67 68 r, err := NewRepo(ctx, path, fs, book, cache, pros, bus) 69 if err != nil { 70 t.Fatalf("error creating repo: %s", err.Error()) 71 } 72 73 cleanup := func() { 74 if err := os.RemoveAll(path); err != nil { 75 t.Errorf("error cleaning up after test: %s", err) 76 } 77 } 78 79 return r, cleanup 80 } 81 82 spec.RunRepoTests(t, rmf) 83 84 if err := os.RemoveAll(path); err != nil { 85 t.Errorf("error cleaning up after test: %s", err.Error()) 86 } 87 } 88 89 func TestResolveRef(t *testing.T) { 90 path, err := ioutil.TempDir("", "qri_repo_test") 91 if err != nil { 92 t.Fatal(err) 93 } 94 defer os.RemoveAll(path) 95 96 pro, err := profile.NewProfile(testcfg.DefaultProfileForTesting()) 97 if err != nil { 98 t.Fatal(err) 99 } 100 101 ctx := context.Background() 102 bus := event.NewBus(ctx) 103 fs, err := muxfs.New(ctx, []qfs.Config{ 104 {Type: "mem"}, 105 {Type: "local"}, 106 }) 107 if err != nil { 108 t.Fatal(err) 109 } 110 111 keyStore, err := key.NewMemStore() 112 if err != nil { 113 t.Fatal(err) 114 } 115 116 pros, err := profile.NewMemStore(ctx, pro, keyStore) 117 if err != nil { 118 t.Fatal(err) 119 } 120 121 book, err := logbook.NewJournal(*pro, bus, fs, "/mem/logbook.qfb") 122 if err != nil { 123 t.Fatal(err) 124 } 125 126 cache := dscache.NewDscache(ctx, fs, bus, "", "") 127 128 r, err := NewRepo(ctx, path, fs, book, cache, pros, bus) 129 if err != nil { 130 t.Fatalf("error creating repo: %s", err.Error()) 131 } 132 133 dsrefspec.AssertResolverSpec(t, r, func(ref dsref.Ref, author *profile.Profile, log *oplog.Log) error { 134 datasetRef := reporef.RefFromDsref(ref) 135 err := r.PutRef(datasetRef) 136 if err != nil { 137 t.Fatal(err) 138 } 139 return r.Logbook().MergeLog(ctx, author.PubKey, log) 140 }) 141 }