github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/api/client/authorizationUrl_test.go (about) 1 package client 2 3 import ( 4 "crypto/rand" 5 "encoding/hex" 6 "fmt" 7 "net/url" 8 9 . "gopkg.in/check.v1" 10 11 edhelpers "github.com/hoffie/larasync/helpers/ed25519" 12 "github.com/hoffie/larasync/repository" 13 ) 14 15 type AuthorizationURLTests struct { 16 encKey [repository.EncryptionKeySize]byte 17 signKey [PrivateKeySize]byte 18 pubKey [PublicKeySize]byte 19 fingerprint string 20 baseURL string 21 } 22 23 var _ = Suite(&AuthorizationURLTests{}) 24 25 func (t *AuthorizationURLTests) SetUpTest(c *C) { 26 pubKey, signKey, _ := edhelpers.GenerateKey() 27 t.pubKey = *pubKey 28 t.signKey = *signKey 29 t.fingerprint = "test" 30 rand.Read(t.encKey[:]) 31 t.baseURL = "https://example.org/repo" 32 } 33 34 func (t *AuthorizationURLTests) getAuthURL() *AuthorizationURL { 35 auth, _ := NewAuthURL(t.baseURL, &t.signKey, &t.encKey, t.fingerprint) 36 return auth 37 } 38 39 func (t *AuthorizationURLTests) getTestRequestURLString() string { 40 return fmt.Sprintf( 41 "%s/authorizations/%s", 42 t.baseURL, 43 hex.EncodeToString(t.pubKey[:]), 44 ) 45 } 46 47 func (t *AuthorizationURLTests) getTestURLString() string { 48 return fmt.Sprintf( 49 "%s#AuthEncKey=%s&AuthSignKey=%s&Fingerprint=%s", 50 t.getTestRequestURLString(), 51 hex.EncodeToString(t.encKey[:]), 52 hex.EncodeToString(t.signKey[:]), 53 t.fingerprint, 54 ) 55 } 56 57 func (t *AuthorizationURLTests) TestGenerate(c *C) { 58 authURL := t.getAuthURL() 59 c.Assert(authURL.SignKey, DeepEquals, t.signKey) 60 c.Assert(authURL.EncKey, DeepEquals, t.encKey) 61 c.Assert(authURL.Fingerprint, DeepEquals, t.fingerprint) 62 63 c.Assert(authURL.String(), Equals, t.getTestURLString()) 64 } 65 66 func (t *AuthorizationURLTests) TestParse(c *C) { 67 u, err := url.Parse(t.getTestURLString()) 68 c.Assert(err, IsNil) 69 authURL, err := parseAuthURL(u) 70 c.Assert(err, IsNil) 71 c.Assert(authURL.SignKey, DeepEquals, t.signKey) 72 c.Assert(authURL.EncKey, DeepEquals, t.encKey) 73 c.Assert(authURL.Fingerprint, DeepEquals, t.fingerprint) 74 c.Assert(authURL.URL.String(), Equals, t.getTestRequestURLString()) 75 } 76 77 func (t *AuthorizationURLTests) TestGenerateUrl(c *C) { 78 _, err := NewAuthURL("%(asdf", &t.signKey, &t.encKey, t.fingerprint) 79 c.Assert(err, NotNil) 80 } 81 82 func (t *AuthorizationURLTests) TestNoEncKey(c *C) { 83 u, err := url.Parse( 84 fmt.Sprintf( 85 "%s#AuthSignKey=%s", 86 t.getTestRequestURLString(), 87 hex.EncodeToString(t.signKey[:]), 88 ), 89 ) 90 c.Assert(err, IsNil) 91 _, err = parseAuthURL(u) 92 c.Assert(err, NotNil) 93 } 94 95 func (t *AuthorizationURLTests) TestNoSignKey(c *C) { 96 u, err := url.Parse( 97 fmt.Sprintf( 98 "%s#AuthEncKey=%s", 99 t.getTestRequestURLString(), 100 hex.EncodeToString(t.encKey[:]), 101 ), 102 ) 103 c.Assert(err, IsNil) 104 _, err = parseAuthURL(u) 105 c.Assert(err, NotNil) 106 } 107 108 func (t *AuthorizationURLTests) TestNoFingerprint(c *C) { 109 u, err := url.Parse( 110 fmt.Sprintf( 111 "%s#AuthSignKey=%s&AuthEncKey=%s", 112 t.getTestRequestURLString(), 113 hex.EncodeToString(t.signKey[:]), 114 hex.EncodeToString(t.encKey[:]), 115 ), 116 ) 117 c.Assert(err, IsNil) 118 _, err = parseAuthURL(u) 119 c.Assert(err, NotNil) 120 } 121 122 func (t *AuthorizationURLTests) TestTooShortSignKey(c *C) { 123 signKeyString := hex.EncodeToString(t.signKey[:]) 124 u, err := url.Parse( 125 fmt.Sprintf( 126 "%s#AuthEncKey=%s&AuthSignKey=%s", 127 t.getTestRequestURLString(), 128 hex.EncodeToString(t.encKey[:]), 129 signKeyString[:len(signKeyString)-2], 130 ), 131 ) 132 c.Assert(err, IsNil) 133 _, err = parseAuthURL(u) 134 c.Assert(err, NotNil) 135 } 136 137 func (t *AuthorizationURLTests) TestTooShortSignKeyEncodingError(c *C) { 138 signKeyString := hex.EncodeToString(t.signKey[:]) 139 u, err := url.Parse( 140 fmt.Sprintf( 141 "%s#AuthEncKey=%s&AuthSignKey=%s", 142 t.getTestRequestURLString(), 143 hex.EncodeToString(t.encKey[:]), 144 signKeyString[:len(signKeyString)-1], 145 ), 146 ) 147 c.Assert(err, IsNil) 148 _, err = parseAuthURL(u) 149 c.Assert(err, NotNil) 150 } 151 152 func (t *AuthorizationURLTests) TestTooShortEncryptionKey(c *C) { 153 signKeyString := hex.EncodeToString(t.signKey[:]) 154 encKeyString := hex.EncodeToString(t.encKey[:]) 155 u, err := url.Parse( 156 fmt.Sprintf( 157 "%s#AuthEncKey=%s&AuthSignKey=%s", 158 t.getTestRequestURLString(), 159 encKeyString[:len(encKeyString)-2], 160 signKeyString, 161 ), 162 ) 163 c.Assert(err, IsNil) 164 _, err = parseAuthURL(u) 165 c.Assert(err, NotNil) 166 } 167 168 func (t *AuthorizationURLTests) TestTooShortEncryptionKeyEncodingError(c *C) { 169 signKeyString := hex.EncodeToString(t.signKey[:]) 170 encKeyString := hex.EncodeToString(t.encKey[:]) 171 u, err := url.Parse( 172 fmt.Sprintf( 173 "%s#AuthEncKey=%s&AuthSignKey=%s", 174 t.getTestRequestURLString(), 175 encKeyString[:len(encKeyString)-1], 176 signKeyString, 177 ), 178 ) 179 c.Assert(err, IsNil) 180 _, err = parseAuthURL(u) 181 c.Assert(err, NotNil) 182 }