From 466bca78410ea9cf361f870644171bfeb3a5210b Mon Sep 17 00:00:00 2001 From: Rick Olson Date: Tue, 17 Feb 2015 12:16:59 -0700 Subject: [PATCH] some tests around getRequestCreds() --- hawser/client.go | 8 ++-- hawser/client_test.go | 14 ------ hawser/credentials_test.go | 94 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 hawser/credentials_test.go diff --git a/hawser/client.go b/hawser/client.go index e8908fb4..fe8077c0 100644 --- a/hawser/client.go +++ b/hawser/client.go @@ -453,12 +453,12 @@ func request(method, oid string) (*http.Request, Creds, error) { u := Config.ObjectUrl(oid) req, err := http.NewRequest(method, u.String(), nil) req.Header.Set("User-Agent", UserAgent) - if err == nil { - creds, err := getRequestCreds(req) - return req, creds, err + if err != nil { + return req, nil, err } - return req, nil, err + creds, err := getRequestCreds(req) + return req, creds, err } func getRequestCreds(req *http.Request) (Creds, error) { diff --git a/hawser/client_test.go b/hawser/client_test.go index c391cd0c..114bc7c4 100644 --- a/hawser/client_test.go +++ b/hawser/client_test.go @@ -206,12 +206,6 @@ func TestPost(t *testing.T) { } } -func init() { - execCreds = func(input Creds, subCommand string) (credentialFetcher, error) { - return &testCredentialFetcher{input}, nil - } -} - func tempdir(t *testing.T) string { dir, err := ioutil.TempDir("", "hawser-test-hawser") if err != nil { @@ -219,11 +213,3 @@ func tempdir(t *testing.T) string { } return dir } - -type testCredentialFetcher struct { - Creds Creds -} - -func (c *testCredentialFetcher) Credentials() Creds { - return c.Creds -} diff --git a/hawser/credentials_test.go b/hawser/credentials_test.go new file mode 100644 index 00000000..a4f86f4c --- /dev/null +++ b/hawser/credentials_test.go @@ -0,0 +1,94 @@ +package hawser + +import ( + "encoding/base64" + "net/http" + "testing" +) + +func TestGetCredentials(t *testing.T) { + req, err := http.NewRequest("GET", "http://example.com", nil) + if err != nil { + t.Fatal(err) + } + + creds, err := getRequestCreds(req) + if err != nil { + t.Fatal(err) + } + + if value := creds["username"]; value != "example.com" { + t.Errorf("bad username: %s", value) + } + + if value := creds["password"]; value != "monkey" { + t.Errorf("bad username: %s", value) + } + + expected := "Basic " + base64.URLEncoding.EncodeToString([]byte("example.com:monkey")) + if value := req.Header.Get("Authorization"); value != expected { + t.Errorf("Bad Authorization. Expected '%s', got '%s'", expected, value) + } +} + +func TestGetCredentialsWithPort(t *testing.T) { + req, err := http.NewRequest("GET", "http://example.com:123", nil) + if err != nil { + t.Fatal(err) + } + + creds, err := getRequestCreds(req) + if err != nil { + t.Fatal(err) + } + + if value := creds["username"]; value != "example.com:123" { + t.Errorf("bad username: %s", value) + } + + if value := creds["password"]; value != "monkey" { + t.Errorf("bad username: %s", value) + } + + expected := "Basic " + base64.URLEncoding.EncodeToString([]byte("example.com:123:monkey")) + if value := req.Header.Get("Authorization"); value != expected { + t.Errorf("Bad Authorization. Expected '%s', got '%s'", expected, value) + } +} + +func TestGetCredentialsWithAuthorization(t *testing.T) { + req, err := http.NewRequest("GET", "http://example.com", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Authorization", "") + + creds, err := getRequestCreds(req) + if err != nil { + t.Fatal(err) + } + + if creds != nil { + t.Errorf("Unexpected credentials: %v", creds) + } + + if value := req.Header.Get("Authorization"); value != "" { + t.Errorf("Unexpected authorization: %s", value) + } +} + +func init() { + execCreds = func(input Creds, subCommand string) (credentialFetcher, error) { + return &testCredentialFetcher{input}, nil + } +} + +type testCredentialFetcher struct { + Creds Creds +} + +func (c *testCredentialFetcher) Credentials() Creds { + c.Creds["username"] = c.Creds["host"] + c.Creds["password"] = "monkey" + return c.Creds +}