Trying to get SSL integration test working, having cert issues
This commit is contained in:
parent
f793172a18
commit
4c64e82124
@ -25,6 +25,7 @@ var (
|
||||
repoDir string
|
||||
largeObjects = newLfsStorage()
|
||||
server *httptest.Server
|
||||
serverTLS *httptest.Server
|
||||
|
||||
// maps OIDs to content strings. Both the LFS and Storage test servers below
|
||||
// see OIDs.
|
||||
@ -48,6 +49,8 @@ func main() {
|
||||
|
||||
mux := http.NewServeMux()
|
||||
server = httptest.NewServer(mux)
|
||||
serverTLS = httptest.NewTLSServer(mux)
|
||||
|
||||
stopch := make(chan bool)
|
||||
|
||||
mux.HandleFunc("/shutdown", func(w http.ResponseWriter, r *http.Request) {
|
||||
@ -69,28 +72,41 @@ func main() {
|
||||
gitHandler(w, r)
|
||||
})
|
||||
|
||||
urlname := os.Getenv("LFSTEST_URL")
|
||||
if len(urlname) == 0 {
|
||||
urlname = "lfstest-gitserver"
|
||||
}
|
||||
urlname := writeTestStateFile([]byte(server.URL), "LFSTEST_URL", "lfstest-gitserver")
|
||||
defer os.RemoveAll(urlname)
|
||||
|
||||
file, err := os.Create(urlname)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
// SSL URL must include 'localhost' not IP for cert matching
|
||||
sslurl := strings.Replace(serverTLS.URL, "127.0.0.1", "localhost", 1)
|
||||
sslurlname := writeTestStateFile([]byte(sslurl), "LFSTEST_SSL_URL", "lfstest-gitserver-ssl")
|
||||
defer os.RemoveAll(sslurlname)
|
||||
|
||||
certname := writeTestStateFile(serverTLS.TLS.Certificates[0].Certificate[0], "LFSTEST_CERT", "lfstest-gitserver-cert")
|
||||
defer os.RemoveAll(certname)
|
||||
|
||||
file.Write([]byte(server.URL))
|
||||
file.Close()
|
||||
log.Println(server.URL)
|
||||
|
||||
defer func() {
|
||||
os.RemoveAll(urlname)
|
||||
}()
|
||||
log.Println(serverTLS.URL)
|
||||
|
||||
<-stopch
|
||||
log.Println("git server done")
|
||||
}
|
||||
|
||||
// writeTestStateFile writes contents to either the file referenced by the
|
||||
// environment variable envVar, or defaultFilename if that's not set. Returns
|
||||
// the filename that was used
|
||||
func writeTestStateFile(contents []byte, envVar, defaultFilename string) string {
|
||||
f := os.Getenv(envVar)
|
||||
if len(f) == 0 {
|
||||
f = defaultFilename
|
||||
}
|
||||
file, err := os.Create(f)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
file.Write(contents)
|
||||
file.Close()
|
||||
return f
|
||||
}
|
||||
|
||||
type lfsObject struct {
|
||||
Oid string `json:"oid,omitempty"`
|
||||
Size int64 `json:"size,omitempty"`
|
||||
|
@ -78,3 +78,61 @@ begin_test "clone"
|
||||
)
|
||||
end_test
|
||||
|
||||
begin_test "cloneSSL"
|
||||
(
|
||||
set -e
|
||||
|
||||
reponame="test-cloneSSL"
|
||||
setup_remote_repo "$reponame"
|
||||
clone_repo_ssl "$reponame" "$reponame"
|
||||
|
||||
git lfs track "*.dat" 2>&1 | tee track.log
|
||||
grep "Tracking \*.dat" track.log
|
||||
|
||||
# generate some test data & commits with random LFS data
|
||||
echo "[
|
||||
{
|
||||
\"CommitDate\":\"$(get_date -5d)\",
|
||||
\"Files\":[
|
||||
{\"Filename\":\"file1.dat\",\"Size\":100},
|
||||
{\"Filename\":\"file2.dat\",\"Size\":75}]
|
||||
},
|
||||
{
|
||||
\"CommitDate\":\"$(get_date -1d)\",
|
||||
\"Files\":[
|
||||
{\"Filename\":\"file3.dat\",\"Size\":30}]
|
||||
}
|
||||
]" | lfstest-testutils addcommits
|
||||
|
||||
git push origin master
|
||||
|
||||
# Now SSL clone again with 'git lfs clone', test specific clone dir
|
||||
cd "$TRASHDIR"
|
||||
|
||||
newclonedir="testclone1"
|
||||
git -c http.sslcainfo="$LFS_CERT_FILE" lfs clone "$SSLGITSERVER/$reponame" "$newclonedir" 2>&1 | tee lfsclone.log
|
||||
grep "Cloning into" lfsclone.log
|
||||
grep "Git LFS:" lfsclone.log
|
||||
# should be no filter errors
|
||||
[ ! $(grep "filter" lfsclone.log) ]
|
||||
[ ! $(grep "error" lfsclone.log) ]
|
||||
# should be cloned into location as per arg
|
||||
[ -d "$newclonedir" ]
|
||||
|
||||
# check a few file sizes to make sure pulled
|
||||
pushd "$newclonedir"
|
||||
[ $(wc -c < "file1.dat") -eq 110 ]
|
||||
[ $(wc -c < "file2.dat") -eq 75 ]
|
||||
[ $(wc -c < "file3.dat") -eq 30 ]
|
||||
popd
|
||||
|
||||
|
||||
# Now check SSL clone with standard 'git clone' and smudge download
|
||||
rm -rf "$reponame"
|
||||
git -c http.sslcainfo="$LFS_CERT_FILE" clone "$SSLGITSERVER/$reponame" 2>&1 | tee lfsclone.log
|
||||
grep "Cloning into" lfsclone.log
|
||||
grep "Git LFS:" lfsclone.log
|
||||
|
||||
)
|
||||
end_test
|
||||
|
||||
|
@ -44,6 +44,13 @@ LFS_CONFIG="$REMOTEDIR/config"
|
||||
# section in test/README.md
|
||||
LFS_URL_FILE="$REMOTEDIR/url"
|
||||
|
||||
# This file contains the SSL URL of the test Git server. See the "Test Suite"
|
||||
# section in test/README.md
|
||||
LFS_SSL_URL_FILE="$REMOTEDIR/sslurl"
|
||||
|
||||
# This file contains the self-signed SSL cert of the TLS endpoint of the test Git server.
|
||||
LFS_CERT_FILE="$REMOTEDIR/cert"
|
||||
|
||||
# the fake home dir used for the initial setup
|
||||
TESTHOME="$REMOTEDIR/home"
|
||||
|
||||
|
@ -195,6 +195,23 @@ clone_repo() {
|
||||
echo "$out"
|
||||
}
|
||||
|
||||
|
||||
# clone_repo_ssl clones a repository from the test Git server to the subdirectory
|
||||
# $dir under $TRASHDIR, using the SSL endpoint.
|
||||
# setup_remote_repo() needs to be run first. Output is written to clone_ssl.log.
|
||||
clone_repo_ssl() {
|
||||
cd "$TRASHDIR"
|
||||
|
||||
local reponame="$1"
|
||||
local dir="$2"
|
||||
echo "clone local git repository $reponame to $dir"
|
||||
out=$(git -c http.sslcainfo="$LFS_CERT_FILE" clone "$SSLGITSERVER/$reponame" "$dir" 2>&1)
|
||||
cd "$dir"
|
||||
|
||||
git config credential.helper lfstest
|
||||
echo "$out" > clone_ssl.log
|
||||
echo "$out"
|
||||
}
|
||||
# setup initializes the clean, isolated environment for integration tests.
|
||||
setup() {
|
||||
cd "$ROOTDIR"
|
||||
@ -221,7 +238,7 @@ setup() {
|
||||
GO15VENDOREXPERIMENT=0 go build -o "$BINPATH/git-lfs-test-server-api" "test/git-lfs-test-server-api/main.go" "test/git-lfs-test-server-api/testdownload.go" "test/git-lfs-test-server-api/testupload.go"
|
||||
fi
|
||||
|
||||
LFSTEST_URL="$LFS_URL_FILE" LFSTEST_DIR="$REMOTEDIR" lfstest-gitserver > "$REMOTEDIR/gitserver.log" 2>&1 &
|
||||
LFSTEST_URL="$LFS_URL_FILE" LFSTEST_SSL_URL="$LFS_SSL_URL_FILE" LFSTEST_DIR="$REMOTEDIR" LFSTEST_CERT="$LFS_CERT_FILE" lfstest-gitserver > "$REMOTEDIR/gitserver.log" 2>&1 &
|
||||
|
||||
# Set up the initial git config and osx keychain if applicable
|
||||
HOME="$TESTHOME"
|
||||
@ -246,6 +263,8 @@ setup() {
|
||||
echo "CREDS: $CREDSDIR"
|
||||
echo "lfstest-gitserver:"
|
||||
echo " LFSTEST_URL=$LFS_URL_FILE"
|
||||
echo " LFSTEST_SSL_URL=$LFS_SSL_URL_FILE"
|
||||
echo " LFSTEST_CERT=$LFS_CERT_FILE"
|
||||
echo " LFSTEST_DIR=$REMOTEDIR"
|
||||
echo "GIT:"
|
||||
git config --global --get-regexp "lfs|credential|user"
|
||||
@ -266,6 +285,7 @@ setup() {
|
||||
fi
|
||||
|
||||
wait_for_file "$LFS_URL_FILE"
|
||||
wait_for_file "$LFS_SSL_URL_FILE"
|
||||
|
||||
echo
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ else
|
||||
fi
|
||||
|
||||
GITSERVER=$(cat "$LFS_URL_FILE")
|
||||
SSLGITSERVER=$(cat "$LFS_SSL_URL_FILE")
|
||||
cd "$TRASHDIR"
|
||||
|
||||
# Mark the beginning of a test. A subshell should immediately follow this
|
||||
|
Loading…
Reference in New Issue
Block a user