diff options
author | Will Chandler <wchandler@gitlab.com> | 2021-12-22 13:30:21 -0500 |
---|---|---|
committer | Will Chandler <wchandler@gitlab.com> | 2021-12-22 14:00:15 -0500 |
commit | 922bb8ff61578a68126ba215e94e0c3d4c34bbf9 (patch) | |
tree | b717250cdb4aec4460941a304959769bdf8b438d /cmd/gitlab-sshd | |
parent | 2941910e8c3b76cdede7d4ba113e70e906e4aadf (diff) | |
download | gitlab-shell-wc-sshd-upload-pack.tar.gz |
Send full git request/response in SSHD testswc-sshd-upload-pack
Before 9deaf47f1ecb00f0f36d18ee4a0fb1576f5a0efe, Gitaly would return
success for `SSHUploadPack` and `SSHUploadArchive` regardless of the
exit code of the `git upload-pack|archive` process. As a result, the
gitlab-sshd acceptance tests could rely on no errors being returned from
Gitaly.
Currently these tests send the minimum request needed to start a
session, causing the server git process to fail as the `0000` flush
packet to end the session is never sent.
This commit fixes the tests by sending the full request/response needed
for a successful git operation.
Diffstat (limited to 'cmd/gitlab-sshd')
-rw-r--r-- | cmd/gitlab-sshd/acceptance_test.go | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/cmd/gitlab-sshd/acceptance_test.go b/cmd/gitlab-sshd/acceptance_test.go index 2b4f1ab..aa0f196 100644 --- a/cmd/gitlab-sshd/acceptance_test.go +++ b/cmd/gitlab-sshd/acceptance_test.go @@ -408,17 +408,33 @@ func TestGitUploadPackSuccess(t *testing.T) { ensureGitalyRepository(t) client := runSSHD(t, successAPI(t)) - session, err := client.NewSession() require.NoError(t, err) defer session.Close() - output, err := session.Output(fmt.Sprintf("git-upload-pack %s", testRepo)) + stdin, err := session.StdinPipe() require.NoError(t, err) - outputLines := strings.Split(string(output), "\n") + stdout, err := session.StdoutPipe() + require.NoError(t, err) + + reader := bufio.NewReader(stdout) + + err = session.Start(fmt.Sprintf("git-upload-pack %s", testRepo)) + require.NoError(t, err) - require.Regexp(t, "^[0-9a-f]{44} HEAD.+", outputLines[0]) + line, err := reader.ReadString('\n') + require.NoError(t, err) + require.Regexp(t, "^[0-9a-f]{44} HEAD.+", line) + + // Gracefully close connection + _, err = fmt.Fprintln(stdin, "0000") + require.NoError(t, err) + + output, err := io.ReadAll(stdout) + require.NoError(t, err) + + outputLines := strings.Split(string(output), "\n") for i := 1; i < (len(outputLines) - 1); i++ { require.Regexp(t, "^[0-9a-f]{44} refs/(heads|tags)/[^ ]+", outputLines[i]) @@ -436,11 +452,29 @@ func TestGitUploadArchiveSuccess(t *testing.T) { require.NoError(t, err) defer session.Close() - output, err := session.Output(fmt.Sprintf("git-upload-archive %s", testRepo)) + stdin, err := session.StdinPipe() require.NoError(t, err) - outputLines := strings.Split(string(output), "\n") + stdout, err := session.StdoutPipe() + require.NoError(t, err) + + reader := bufio.NewReader(stdout) + + err = session.Start(fmt.Sprintf("git-upload-archive %s", testRepo)) + require.NoError(t, err) + + _, err = fmt.Fprintln(stdin, "0012argument HEAD\n0000") + + line, err := reader.ReadString('\n') + require.Equal(t, "0008ACK\n", line) + require.NoError(t, err) + + // Gracefully close connection + _, err = fmt.Fprintln(stdin, "0000") + require.NoError(t, err) + + output, err := io.ReadAll(stdout) + require.NoError(t, err) - require.Equal(t, "0008ACK", outputLines[0]) - require.Regexp(t, "^0000", outputLines[1]) + require.Equal(t, []byte("0000"), output[len(output)-4:]) } |