summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorWill Chandler <wchandler@gitlab.com>2021-12-22 13:30:21 -0500
committerWill Chandler <wchandler@gitlab.com>2021-12-22 14:00:15 -0500
commit922bb8ff61578a68126ba215e94e0c3d4c34bbf9 (patch)
treeb717250cdb4aec4460941a304959769bdf8b438d /cmd
parent2941910e8c3b76cdede7d4ba113e70e906e4aadf (diff)
downloadgitlab-shell-922bb8ff61578a68126ba215e94e0c3d4c34bbf9.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')
-rw-r--r--cmd/gitlab-sshd/acceptance_test.go50
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:])
}