2015-03-19 19:30:55 +00:00
|
|
|
package lfs
|
2015-02-17 19:16:59 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/base64"
|
|
|
|
"net/http"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGetCredentials(t *testing.T) {
|
2015-03-19 21:16:52 +00:00
|
|
|
Config.SetConfig("lfs.url", "https://lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "https://lfs-server.com/foo", nil)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
creds, err := getCreds(req)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
if value := creds["username"]; value != "lfs-server.com" {
|
2015-02-17 19:16:59 +00:00
|
|
|
t.Errorf("bad username: %s", value)
|
|
|
|
}
|
|
|
|
|
|
|
|
if value := creds["password"]; value != "monkey" {
|
2015-06-17 20:38:09 +00:00
|
|
|
t.Errorf("bad password: %s", value)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
expected := "Basic " + base64.URLEncoding.EncodeToString([]byte("lfs-server.com:monkey"))
|
2015-02-17 19:16:59 +00:00
|
|
|
if value := req.Header.Get("Authorization"); value != expected {
|
|
|
|
t.Errorf("Bad Authorization. Expected '%s', got '%s'", expected, value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
func TestGetCredentialsWithExistingAuthorization(t *testing.T) {
|
|
|
|
Config.SetConfig("lfs.url", "https://lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "http://lfs-server.com/foo", nil)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
req.Header.Set("Authorization", "Test monkey")
|
|
|
|
|
|
|
|
creds, err := getCreds(req)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
if creds != nil {
|
|
|
|
t.Errorf("Unexpected creds: %v", creds)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
if actual := req.Header.Get("Authorization"); actual != "Test monkey" {
|
|
|
|
t.Errorf("Unexpected Authorization header: %s", actual)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
2015-03-19 21:16:52 +00:00
|
|
|
}
|
2015-02-17 19:16:59 +00:00
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
func TestGetCredentialsWithSchemeMismatch(t *testing.T) {
|
|
|
|
Config.SetConfig("lfs.url", "https://lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "http://lfs-server.com/foo", nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getCreds(req)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds != nil {
|
|
|
|
t.Errorf("Unexpected creds: %v", creds)
|
|
|
|
}
|
|
|
|
|
|
|
|
if actual := req.Header.Get("Authorization"); actual != "" {
|
|
|
|
t.Errorf("Unexpected Authorization header: %s", actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetCredentialsWithHostMismatch(t *testing.T) {
|
|
|
|
Config.SetConfig("lfs.url", "https://lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "https://lfs-server2.com/foo", nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getCreds(req)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds != nil {
|
|
|
|
t.Errorf("Unexpected creds: %v", creds)
|
|
|
|
}
|
|
|
|
|
|
|
|
if actual := req.Header.Get("Authorization"); actual != "" {
|
|
|
|
t.Errorf("Unexpected Authorization header: %s", actual)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
func TestGetCredentialsWithPortMismatch(t *testing.T) {
|
|
|
|
Config.SetConfig("lfs.url", "https://lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "https://lfs-server:8080.com/foo", nil)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
creds, err := getCreds(req)
|
2015-02-17 19:16:59 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds != nil {
|
2015-03-19 21:16:52 +00:00
|
|
|
t.Errorf("Unexpected creds: %v", creds)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
|
|
|
|
2015-03-19 21:16:52 +00:00
|
|
|
if actual := req.Header.Get("Authorization"); actual != "" {
|
|
|
|
t.Errorf("Unexpected Authorization header: %s", actual)
|
2015-02-17 19:16:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-17 20:38:09 +00:00
|
|
|
func TestGetCredentialsWithRfc1738UsernameAndPassword(t *testing.T) {
|
|
|
|
Config.SetConfig("lfs.url", "https://testuser:testpass@lfs-server.com")
|
|
|
|
req, err := http.NewRequest("GET", "https://lfs-server.com/foo", nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getCreds(req)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds != nil {
|
|
|
|
t.Errorf("unexpected creds: %v", creds)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := "Basic " + base64.URLEncoding.EncodeToString([]byte("testuser:testpass"))
|
|
|
|
if value := req.Header.Get("Authorization"); value != expected {
|
|
|
|
t.Errorf("Bad Authorization. Expected '%s', got '%s'", expected, value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-02-17 19:16:59 +00:00
|
|
|
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
|
|
|
|
}
|