github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/remote/mock/client_test.go (about)

     1  package mock
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/ipfs/go-ipfs/core"
     9  	"github.com/qri-io/qri/base/dsfs"
    10  	testcfg "github.com/qri-io/qri/config/test"
    11  	"github.com/qri-io/qri/dsref"
    12  	"github.com/qri-io/qri/event"
    13  	"github.com/qri-io/qri/p2p"
    14  	p2ptest "github.com/qri-io/qri/p2p/test"
    15  )
    16  
    17  func TestMockClient(t *testing.T) {
    18  	tr, cleanup := newTestRunner(t)
    19  	defer cleanup()
    20  
    21  	c, err := NewClient(tr.Ctx, tr.NodeA, event.NilBus)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	ref := dsref.MustParse("this/should_get_made_on_the_fly")
    27  	if _, err := c.PullDataset(tr.Ctx, &ref, ""); err != nil {
    28  		t.Error(err)
    29  	}
    30  
    31  	resolve := dsref.MustParse("wut/create_me")
    32  	if _, err := c.NewRemoteRefResolver("").ResolveRef(tr.Ctx, &resolve); err != nil {
    33  		t.Error(err)
    34  	}
    35  
    36  	ref = dsref.MustParse("wut/create_me")
    37  	if _, err = c.PullDataset(tr.Ctx, &ref, ""); err != nil {
    38  		t.Error(err)
    39  	}
    40  }
    41  
    42  type testRunner struct {
    43  	Ctx   context.Context
    44  	NodeA *p2p.QriNode
    45  }
    46  
    47  func newTestRunner(t *testing.T) (tr *testRunner, cleanup func()) {
    48  	var err error
    49  	ctx, cancel := context.WithCancel(context.Background())
    50  	tr = &testRunner{
    51  		Ctx: ctx,
    52  	}
    53  	prevTs := dsfs.Timestamp
    54  	dsfs.Timestamp = func() time.Time { return time.Time{} }
    55  
    56  	nodes, _, err := p2ptest.MakeIPFSSwarm(tr.Ctx, true, 2)
    57  	if err != nil {
    58  		t.Fatal(err)
    59  	}
    60  
    61  	tr.NodeA = qriNode(ctx, t, tr, "A", nodes[0])
    62  
    63  	cleanup = func() {
    64  		dsfs.Timestamp = prevTs
    65  		cancel()
    66  	}
    67  	return tr, cleanup
    68  }
    69  
    70  func qriNode(ctx context.Context, t *testing.T, tr *testRunner, peername string, node *core.IpfsNode) *p2p.QriNode {
    71  	repo, err := p2ptest.MakeRepoFromIPFSNode(tr.Ctx, node, peername, event.NewBus(ctx))
    72  	if err != nil {
    73  		t.Fatal(err)
    74  	}
    75  
    76  	localResolver := dsref.SequentialResolver(repo.Dscache(), repo)
    77  	qriNode, err := p2p.NewQriNode(repo, testcfg.DefaultP2PForTesting(), repo.Bus(), localResolver)
    78  	if err != nil {
    79  		t.Fatal(err)
    80  	}
    81  
    82  	return qriNode
    83  }