~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/usso/oauth_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2015 Canonical Ltd.
 
2
// Licensed under the LGPLv3, see LICENSE file for details.
 
3
 
 
4
package usso
 
5
 
 
6
import (
 
7
        "net/http"
 
8
        "net/url"
 
9
 
 
10
        . "gopkg.in/check.v1"
 
11
)
 
12
 
 
13
type OAuthTestSuite struct {
 
14
        ssodata SSOData
 
15
        rp      RequestParameters
 
16
        request *http.Request
 
17
}
 
18
 
 
19
var _ = Suite(&OAuthTestSuite{})
 
20
 
 
21
func (suite *OAuthTestSuite) SetUpTest(c *C) {
 
22
        baseUrl := "https://localhost"
 
23
        suite.ssodata = SSOData{ConsumerKey: consumerKey,
 
24
                ConsumerSecret: consumerSecret, Realm: realm, TokenKey: tokenKey,
 
25
                TokenName: tokenName, TokenSecret: tokenSecret}
 
26
        suite.rp = RequestParameters{BaseURL: baseUrl, HTTPMethod: "GET",
 
27
                Nonce: "10888885", Timestamp: "1358853126"}
 
28
        suite.request, _ = http.NewRequest("GET", baseUrl, nil)
 
29
}
 
30
 
 
31
// It is possible to sign a request with oauth_signature_method = PLAINTEXT
 
32
func (suite *OAuthTestSuite) TestSignRequestPlainText(c *C) {
 
33
        suite.rp.SignatureMethod = PLAINTEXT{}
 
34
        err := suite.ssodata.SignRequest(&suite.rp, suite.request)
 
35
        if err != nil {
 
36
                c.Log(err)
 
37
                c.FailNow()
 
38
        }
 
39
        authHeader := suite.request.Header["Authorization"][0]
 
40
        c.Assert(authHeader, Matches, `^OAuth.*`)
 
41
        c.Assert(authHeader, Matches, `.*realm="API".*`)
 
42
        c.Assert(authHeader, Matches,
 
43
                `.*oauth_consumer_key="`+url.QueryEscape(
 
44
                        suite.ssodata.ConsumerKey)+`".*`)
 
45
        c.Assert(authHeader, Matches,
 
46
                `.*oauth_token="`+url.QueryEscape(suite.ssodata.TokenKey)+`".*`)
 
47
        c.Assert(authHeader, Matches,
 
48
                `.*oauth_signature="`+url.QueryEscape(
 
49
                        suite.ssodata.ConsumerSecret)+`&`+url.QueryEscape(
 
50
                        suite.ssodata.TokenSecret)+`.*`)
 
51
}
 
52
 
 
53
// It is possible to sign a request  with oauth_signature_method = SHA1
 
54
func (suite *OAuthTestSuite) TestSignRequestSHA1(c *C) {
 
55
        suite.rp.SignatureMethod = HMACSHA1{}
 
56
        err := suite.ssodata.SignRequest(&suite.rp, suite.request)
 
57
        if err != nil {
 
58
                c.Log(err)
 
59
                c.FailNow()
 
60
        }
 
61
        authHeader := suite.request.Header["Authorization"][0]
 
62
        c.Assert(authHeader, Matches, `^OAuth.*`)
 
63
        c.Assert(authHeader, Matches, `.*realm="API".*`)
 
64
        c.Assert(authHeader, Matches,
 
65
                `.*oauth_consumer_key="`+url.QueryEscape(
 
66
                        suite.ssodata.ConsumerKey)+`".*`)
 
67
        c.Assert(authHeader, Matches,
 
68
                `.*oauth_token="`+url.QueryEscape(suite.ssodata.TokenKey)+`".*`)
 
69
        c.Assert(authHeader, Matches,
 
70
                `.*oauth_signature="`+"amJnYeek4G9ObTgTiE2y6cwTyPg="+`.*`)
 
71
}
 
72
 
 
73
func (suite *OAuthTestSuite) TestSignRequestSHA1WithParams(c *C) {
 
74
        rp := suite.rp
 
75
        rp.SignatureMethod = HMACSHA1{}
 
76
        rp.Params = url.Values{
 
77
                "a": []string{"B", "A"},
 
78
                "z": []string{""},
 
79
        }
 
80
        err := suite.ssodata.SignRequest(&rp, suite.request)
 
81
        if err != nil {
 
82
                c.Log(err)
 
83
                c.FailNow()
 
84
        }
 
85
        authHeader := suite.request.Header["Authorization"][0]
 
86
        c.Assert(authHeader, Matches, `^OAuth.*`)
 
87
        c.Assert(authHeader, Matches, `.*realm="API".*`)
 
88
        c.Assert(authHeader, Matches,
 
89
                `.*oauth_consumer_key="`+url.QueryEscape(
 
90
                        suite.ssodata.ConsumerKey)+`".*`)
 
91
        c.Assert(authHeader, Matches,
 
92
                `.*oauth_token="`+url.QueryEscape(suite.ssodata.TokenKey)+`".*`)
 
93
        c.Assert(authHeader, Matches,
 
94
                `.*oauth_signature="`+"a/PwZ4HMX0FptNA4KRFl1jIqlOg="+`.*`)
 
95
}