gopkg.in/goose.v2@v2.0.1/testservices/identityservice/legacy_test.go (about) 1 package identityservice 2 3 import ( 4 "io/ioutil" 5 "net/http" 6 7 gc "gopkg.in/check.v1" 8 9 "gopkg.in/goose.v2/testing/httpsuite" 10 ) 11 12 type LegacySuite struct { 13 httpsuite.HTTPSuite 14 } 15 16 var _ = gc.Suite(&LegacySuite{}) 17 18 func (s *LegacySuite) setupLegacy(user, secret string) (token, managementURL string) { 19 managementURL = s.Server.URL 20 identity := NewLegacy() 21 // Ensure that it conforms to the interface 22 var _ IdentityService = identity 23 identity.SetManagementURL(managementURL) 24 identity.SetupHTTP(s.Mux) 25 if user != "" { 26 userInfo := identity.AddUser(user, secret, "tenant", "default") 27 token = userInfo.Token 28 } 29 return 30 } 31 32 func LegacyAuthRequest(URL, user, key string) (*http.Response, error) { 33 client := http.DefaultClient 34 request, err := http.NewRequest("GET", URL, nil) 35 if err != nil { 36 return nil, err 37 } 38 if user != "" { 39 request.Header.Set("X-Auth-User", user) 40 } 41 if key != "" { 42 request.Header.Set("X-Auth-Key", key) 43 } 44 return client.Do(request) 45 } 46 47 func AssertUnauthorized(c *gc.C, response *http.Response) { 48 content, err := ioutil.ReadAll(response.Body) 49 c.Assert(err, gc.IsNil) 50 response.Body.Close() 51 c.Check(response.Header.Get("X-Auth-Token"), gc.Equals, "") 52 c.Check(response.Header.Get("X-Server-Management-Url"), gc.Equals, "") 53 c.Check(string(content), gc.Equals, "") 54 c.Check(response.StatusCode, gc.Equals, http.StatusUnauthorized) 55 } 56 57 func (s *LegacySuite) TestLegacyFailedAuth(c *gc.C) { 58 s.setupLegacy("", "") 59 // No headers set for Authentication 60 response, err := LegacyAuthRequest(s.Server.URL, "", "") 61 c.Assert(err, gc.IsNil) 62 AssertUnauthorized(c, response) 63 } 64 65 func (s *LegacySuite) TestLegacyFailedOnlyUser(c *gc.C) { 66 s.setupLegacy("", "") 67 // Missing secret key 68 response, err := LegacyAuthRequest(s.Server.URL, "user", "") 69 c.Assert(err, gc.IsNil) 70 AssertUnauthorized(c, response) 71 } 72 73 func (s *LegacySuite) TestLegacyNoSuchUser(c *gc.C) { 74 s.setupLegacy("user", "key") 75 // No user matching the username 76 response, err := LegacyAuthRequest(s.Server.URL, "notuser", "key") 77 c.Assert(err, gc.IsNil) 78 AssertUnauthorized(c, response) 79 } 80 81 func (s *LegacySuite) TestLegacyInvalidAuth(c *gc.C) { 82 s.setupLegacy("user", "secret-key") 83 // Wrong key 84 response, err := LegacyAuthRequest(s.Server.URL, "user", "bad-key") 85 c.Assert(err, gc.IsNil) 86 AssertUnauthorized(c, response) 87 } 88 89 func (s *LegacySuite) TestLegacyAuth(c *gc.C) { 90 token, serverURL := s.setupLegacy("user", "secret-key") 91 response, err := LegacyAuthRequest(s.Server.URL, "user", "secret-key") 92 c.Assert(err, gc.IsNil) 93 content, err := ioutil.ReadAll(response.Body) 94 response.Body.Close() 95 c.Check(response.Header.Get("X-Auth-Token"), gc.Equals, token) 96 c.Check(response.Header.Get("X-Server-Management-Url"), gc.Equals, serverURL+"/compute") 97 c.Check(response.Header.Get("X-Storage-Url"), gc.Equals, serverURL+"/object-store") 98 c.Check(string(content), gc.Equals, "") 99 c.Check(response.StatusCode, gc.Equals, http.StatusNoContent) 100 }