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

     1  package regclient
     2  
     3  import (
     4  	"context"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	crypto "github.com/libp2p/go-libp2p-core/crypto"
     9  	testkeys "github.com/qri-io/qri/auth/key/test"
    10  	"github.com/qri-io/qri/config"
    11  	testcfg "github.com/qri-io/qri/config/test"
    12  	"github.com/qri-io/qri/dsref"
    13  	"github.com/qri-io/qri/p2p"
    14  	"github.com/qri-io/qri/registry"
    15  	"github.com/qri-io/qri/registry/regserver/handlers"
    16  	"github.com/qri-io/qri/remote"
    17  	repotest "github.com/qri-io/qri/repo/test"
    18  )
    19  
    20  type TestRunner struct {
    21  	Reg           registry.Registry
    22  	RegServer     *httptest.Server
    23  	Client        *Client
    24  	ClientPrivKey crypto.PrivKey
    25  }
    26  
    27  func NewTestRunner(t *testing.T) (*TestRunner, func()) {
    28  	ctx, cancel := context.WithCancel(context.Background())
    29  
    30  	// build registry
    31  	tmpRepo, err := repotest.NewTempRepo("registry", "regclient-tests", repotest.NewTestCrypto())
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	r, err := tmpRepo.Repo(ctx)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	localResolver := dsref.SequentialResolver(r.Dscache(), r)
    42  	node, err := p2p.NewQriNode(r, testcfg.DefaultP2PForTesting(), r.Bus(), localResolver)
    43  	if err != nil {
    44  		t.Fatal(err)
    45  	}
    46  
    47  	rem, err := remote.NewServer(node, &config.RemoteServer{
    48  		AcceptSizeMax: -1,
    49  		Enabled:       true,
    50  		AllowRemoves:  true,
    51  	}, r.Logbook(), r.Bus())
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  
    56  	reg := registry.Registry{
    57  		Profiles: registry.NewMemProfiles(),
    58  		Search:   &registry.MockSearch{},
    59  		Remote:   rem,
    60  	}
    61  	ts := httptest.NewServer(handlers.NewRoutes(reg))
    62  
    63  	// build client
    64  	pk1 := testkeys.GetKeyData(10).PrivKey
    65  
    66  	c := NewClient(&Config{
    67  		Location: ts.URL,
    68  	})
    69  
    70  	tr := &TestRunner{
    71  		Reg:           reg,
    72  		RegServer:     ts,
    73  		Client:        c,
    74  		ClientPrivKey: pk1,
    75  	}
    76  
    77  	cleanup := func() {
    78  		cancel()
    79  		ts.Close()
    80  		tmpRepo.Delete()
    81  	}
    82  	return tr, cleanup
    83  }