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  }