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 }