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  }