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  }