git-lfs/lfs/ntlm_test.go
2015-10-16 11:06:17 -04:00

103 lines
2.7 KiB
Go

package lfs
import (
"bytes"
"encoding/base64"
"io/ioutil"
"net/http"
"strings"
"testing"
"github.com/github/git-lfs/vendor/_nuts/github.com/technoweenie/assert"
)
func TestNtlmClientSession(t *testing.T){
//Make sure to clear ntlmSession so test order doesn't matter.
Config.ntlmSession = nil
creds := Creds{"username":"MOOSEDOMAIN\\canadian", "password":"MooseAntlersYeah"}
_, err := Config.ntlmClientSession(creds)
assert.Equal(t, err, nil)
//The second call should ignore creds and give the session we just created.
badCreds := Creds{"username":"badusername", "password":"MooseAntlersYeah"}
_, err = Config.ntlmClientSession(badCreds)
assert.Equal(t, err, nil)
//clean up
Config.ntlmSession = nil
}
func TestNtlmClientSessionBadCreds(t *testing.T){
//Make sure to clear ntlmSession so test order doesn't matter.
Config.ntlmSession = nil
creds := Creds{"username":"badusername", "password":"MooseAntlersYeah"}
_, err := Config.ntlmClientSession(creds)
assert.NotEqual(t, err, nil)
//clean up
Config.ntlmSession = nil
}
func TestNtlmCloneRequest(t *testing.T){
req1, _ := http.NewRequest("Method", "url", nil)
cloneOfReq1, err := cloneRequest(req1)
assert.Equal(t, err, nil)
assertRequestsEqual(t, req1, cloneOfReq1)
req2, _ := http.NewRequest("Method", "url", bytes.NewReader([]byte("Moose can be request bodies")))
cloneOfReq2, err := cloneRequest(req2)
assert.Equal(t, err, nil)
assertRequestsEqual(t, req2, cloneOfReq2)
}
func assertRequestsEqual(t *testing.T, req1 *http.Request, req2 *http.Request){
assert.Equal(t, req1.Method, req2.Method)
for k, v := range req1.Header {
assert.Equal(t, v, req2.Header[k])
}
if(req1.Body == nil){
assert.Equal(t, req2.Body, nil)
} else {
bytes1, _ := ioutil.ReadAll(req1.Body)
bytes2, _ := ioutil.ReadAll(req2.Body)
assert.Equal(t, bytes.Compare(bytes1,bytes2), 0)
}
}
func TestNtlmHeaderParseValid(t *testing.T) {
res := http.Response{}
res.Header = make(map[string][]string)
res.Header.Add("Www-Authenticate", "NTLM " + base64.StdEncoding.EncodeToString([]byte("I am a moose")))
bytes, err := parseChallengeResponse(&res);
assert.Equal(t, err, nil)
assert.Equal(t, strings.HasPrefix(string(bytes), "NTLM"), false)
}
func TestNtlmHeaderParseInvalidLength(t *testing.T){
defer func (){
r := recover();
assert.NotEqual(t, r, nil)
}()
res := http.Response{}
res.Header = make(map[string][]string)
res.Header.Add("Www-Authenticate", "NTL")
_, _ = parseChallengeResponse(&res)
}
func TestNtlmHeaderParseInvalid(t *testing.T){
res := http.Response{}
res.Header = make(map[string][]string)
res.Header.Add("Www-Authenticate", base64.StdEncoding.EncodeToString([]byte("NTLM I am a moose")))
_, err := parseChallengeResponse(&res)
assert.NotEqual(t, err, nil)
}