github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/api/client/base_test.go (about)

     1  package client
     2  
     3  import (
     4  	"crypto/rand"
     5  	"os"
     6  	"path"
     7  	"path/filepath"
     8  
     9  	"github.com/hoffie/larasync/api/common"
    10  	edhelpers "github.com/hoffie/larasync/helpers/ed25519"
    11  	"github.com/hoffie/larasync/helpers/x509"
    12  	"github.com/hoffie/larasync/repository"
    13  
    14  	. "gopkg.in/check.v1"
    15  )
    16  
    17  func newBaseTest() BaseTest {
    18  	return BaseTest{}
    19  }
    20  
    21  type BaseTest struct {
    22  	rm             *repository.Manager
    23  	repositoryName string
    24  	repos          string
    25  	certFile       string
    26  	keyFile        string
    27  	pubKey         [PublicKeySize]byte
    28  	privateKey     [PrivateKeySize]byte
    29  	encryptionKey  [repository.EncryptionKeySize]byte
    30  	hashingKey     [repository.HashingKeySize]byte
    31  	client         *Client
    32  	server         *TestServer
    33  }
    34  
    35  func (t *BaseTest) serverURL(c *C) string {
    36  	return "https://" + path.Join(t.server.hostAndPort, "repositories", t.repositoryName)
    37  }
    38  
    39  func (t *BaseTest) SetUpTest(c *C) {
    40  	t.createRepoManager(c)
    41  
    42  	t.repositoryName = "test"
    43  	c.Assert(t.rm.Exists(t.repositoryName), Equals, false)
    44  
    45  	var err error
    46  	t.server, err = NewTestServer(t.certFile, t.keyFile, t.rm)
    47  	c.Assert(err, IsNil)
    48  
    49  	_, err = rand.Read(t.encryptionKey[:])
    50  	c.Assert(err, IsNil)
    51  
    52  	_, err = rand.Read(t.hashingKey[:])
    53  	c.Assert(err, IsNil)
    54  
    55  	t.client = New(
    56  		t.serverURL(c), "",
    57  		func(string) bool { return true })
    58  	t.client.SetSigningPrivateKey(t.privateKey)
    59  }
    60  
    61  func (t *BaseTest) SetUpSuite(c *C) {
    62  	byteArray := make([]byte, PrivateKeySize)
    63  	_, err := rand.Read(byteArray)
    64  	c.Assert(err, IsNil)
    65  	t.privateKey, err = common.PassphraseToKey(byteArray)
    66  	c.Assert(err, IsNil)
    67  	t.pubKey = edhelpers.GetPublicKeyFromPrivate(t.privateKey)
    68  	t.createServerCert(c)
    69  }
    70  
    71  func (t *BaseTest) TearDownTest(c *C) {
    72  	t.server.Close()
    73  	os.RemoveAll(t.repos)
    74  }
    75  
    76  func (t *BaseTest) repositoryPath(c *C) string {
    77  	return filepath.Join(t.repos, t.repositoryName)
    78  }
    79  
    80  func (t *BaseTest) getClientRepository(c *C) *repository.ClientRepository {
    81  	repo := repository.NewClient(t.repositoryPath(c))
    82  	err := repo.SetKeysFromAuth(&repository.Authorization{
    83  		SigningKey:    t.privateKey,
    84  		EncryptionKey: t.encryptionKey,
    85  		HashingKey:    t.hashingKey,
    86  	})
    87  	c.Assert(err, IsNil)
    88  	return repo
    89  }
    90  
    91  func (t *BaseTest) createRepoManager(c *C) {
    92  	t.repos = c.MkDir()
    93  	rm, err := repository.NewManager(t.repos)
    94  	c.Assert(err, IsNil)
    95  	t.rm = rm
    96  }
    97  
    98  func (t *BaseTest) createServerCert(c *C) {
    99  	dir := c.MkDir()
   100  	t.certFile = filepath.Join(dir, "server.crt")
   101  	t.keyFile = filepath.Join(dir, "server.key")
   102  	err := x509.GenerateServerCertFiles(t.certFile, t.keyFile)
   103  	c.Assert(err, IsNil)
   104  }
   105  
   106  func (t *BaseTest) createRepository(c *C) *repository.Repository {
   107  	err := t.rm.Create(t.repositoryName, t.pubKey[:])
   108  	if err != nil && !os.IsExist(err) {
   109  		c.Assert(err, IsNil)
   110  	}
   111  	return t.getRepository(c)
   112  }
   113  
   114  func (t *BaseTest) getRepository(c *C) *repository.Repository {
   115  	rep, err := t.rm.Open(t.repositoryName)
   116  	c.Assert(err, IsNil)
   117  	return rep
   118  }