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  }