github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/base/dsfs/package_test.go (about) 1 package dsfs 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/qri-io/qfs" 11 "github.com/qri-io/qfs/qipfs" 12 "golang.org/x/net/context" 13 ) 14 15 func TestPackageFilepath(t *testing.T) { 16 ctx, cancel := context.WithCancel(context.Background()) 17 defer cancel() 18 19 ipfs, destroy, err := makeTestIPFSRepo(ctx, "") 20 if err != nil { 21 t.Errorf("error creating IPFS test repo: %s", err.Error()) 22 return 23 } 24 defer destroy() 25 26 mem := qfs.NewMemFS() 27 28 cases := []struct { 29 fs qfs.Filesystem 30 path string 31 pf PackageFile 32 out string 33 }{ 34 {ipfs, "/ipfs/foo", PackageFileDataset, "/ipfs/foo/dataset.json"}, 35 {ipfs, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M", PackageFileDataset, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json"}, 36 {ipfs, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json", PackageFileDataset, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json"}, 37 {ipfs, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json", PackageFileMeta, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/meta.json"}, 38 {ipfs, "QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M", PackageFileDataset, "/ipfs/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json"}, 39 40 {mem, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M", PackageFileDataset, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json"}, 41 {mem, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json", PackageFileDataset, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json"}, 42 {mem, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/dataset.json", PackageFileMeta, "/mem/QmZfwmhbcgSDGqGaoMMYx8jxBGauZw75zPjnZAyfwPso7M/meta.json"}, 43 } 44 45 for i, c := range cases { 46 t.Run(fmt.Sprintf("case_%d", i), func(t *testing.T) { 47 got := PackageFilepath(c.fs, c.path, c.pf) 48 if got != c.out { 49 t.Errorf("result mismatch. expected: '%s', got: '%s'", c.path, c.pf) 50 } 51 }) 52 } 53 } 54 55 func makeTestIPFSRepo(ctx context.Context, path string) (fs *qipfs.Filestore, destroy func(), err error) { 56 if path == "" { 57 tmp, err := ioutil.TempDir("", "temp-ipfs-repo") 58 if err != nil { 59 panic(err) 60 } 61 path = filepath.Join(tmp, ".ipfs") 62 } 63 err = qipfs.InitRepo(path, "") 64 if err != nil { 65 return 66 } 67 68 qfsFilestore, err := qipfs.NewFilesystem(ctx, map[string]interface{}{"path": path}) 69 if err != nil { 70 return 71 } 72 73 fs, ok := qfsFilestore.(*qipfs.Filestore) 74 if !ok { 75 return nil, nil, fmt.Errorf("created filestore is not of type ipfs") 76 } 77 78 destroy = func() { 79 os.RemoveAll(path) 80 } 81 82 return 83 }