@@ -3,7 +3,6 @@ package agent
33import (
44 "testing"
55
6- "github.com/skevetter/devpod/cmd/flags"
76 "github.com/stretchr/testify/assert"
87 "github.com/stretchr/testify/suite"
98)
@@ -16,61 +15,43 @@ func TestGitSSHSignatureSuite(t *testing.T) {
1615 suite .Run (t , new (GitSSHSignatureTestSuite ))
1716}
1817
19- func (s * GitSSHSignatureTestSuite ) TestAcceptsUnknownFlags () {
20- cmd := NewGitSSHSignatureCmd (& flags.GlobalFlags {})
21-
22- // Git passes: -Y sign -n git -f /path/to/key -U /dev/stdin /tmp/buffer
23- // -U is an unknown flag that consumes /dev/stdin as its value.
24- // /tmp/buffer remains as a positional argument.
25- err := cmd .ParseFlags (
26- []string {
27- "-Y" ,
28- "sign" ,
29- "-n" ,
30- "git" ,
31- "-f" ,
32- "/path/to/key" ,
33- "-U" ,
34- "/dev/stdin" ,
35- "/tmp/buffer" ,
36- },
37- )
38- assert .NoError (s .T (), err , "flag parsing should succeed with unknown flag -U" )
39-
40- args := cmd .Flags ().Args ()
41- s .Require ().NotEmpty (args , "should have positional args" )
42- assert .Equal (s .T (), "/tmp/buffer" , args [len (args )- 1 ],
43- "buffer file should be preserved as last positional arg" )
18+ func (s * GitSSHSignatureTestSuite ) TestParseBasicSignArgs () {
19+ args := []string {"-Y" , "sign" , "-n" , "git" , "-f" , "/path/to/key.pub" , "/tmp/buffer" }
20+ result := parseSSHKeygenArgs (args )
21+ assert .Equal (s .T (), "sign" , result .command )
22+ assert .Equal (s .T (), "git" , result .namespace )
23+ assert .Equal (s .T (), "/path/to/key.pub" , result .certPath )
24+ assert .Equal (s .T (), "/tmp/buffer" , result .bufferFile )
4425}
4526
46- func (s * GitSSHSignatureTestSuite ) TestBufferFileAsPositionalArg () {
47- cmd := NewGitSSHSignatureCmd (& flags.GlobalFlags {})
48-
49- err := cmd .ParseFlags (
50- []string {"-Y" , "sign" , "-n" , "git" , "-f" , "/path/to/key" , "/tmp/buffer" },
51- )
52- assert .NoError (s .T (), err )
53-
54- args := cmd .Flags ().Args ()
55- s .Require ().NotEmpty (args , "should have positional args" )
56- assert .Equal (s .T (), "/tmp/buffer" , args [len (args )- 1 ],
57- "last positional arg should be the buffer file" )
27+ func (s * GitSSHSignatureTestSuite ) TestParseWithAgentFlag () {
28+ // When the signing key is loaded in the ssh-agent, git passes -U (a boolean
29+ // "use agent" flag) immediately before the buffer file. The buffer file must
30+ // still be recognised as the last non-flag argument.
31+ args := []string {"-Y" , "sign" , "-n" , "git" , "-f" , "/path/to/key.pub" , "-U" , "/tmp/buffer" }
32+ result := parseSSHKeygenArgs (args )
33+ assert .Equal (s .T (), "sign" , result .command )
34+ assert .Equal (s .T (), "/path/to/key.pub" , result .certPath )
35+ assert .Equal (s .T (), "/tmp/buffer" , result .bufferFile )
5836}
5937
60- func (s * GitSSHSignatureTestSuite ) TestKnownFlagsParsed () {
61- cmd := NewGitSSHSignatureCmd (& flags.GlobalFlags {})
62-
63- err := cmd .ParseFlags (
64- []string {"-Y" , "sign" , "-n" , "git" , "-f" , "/path/to/key" , "/tmp/buffer" },
65- )
66- assert .NoError (s .T (), err )
38+ func (s * GitSSHSignatureTestSuite ) TestParseNonSignCommand () {
39+ args := []string {"-Y" , "verify" , "-n" , "git" , "-f" , "/path/to/key.pub" , "/tmp/buffer" }
40+ result := parseSSHKeygenArgs (args )
41+ assert .Equal (s .T (), "verify" , result .command )
42+ }
6743
68- val , err := cmd .Flags ().GetString ("command" )
69- assert .NoError (s .T (), err )
70- assert .Equal (s .T (), "sign" , val , "command flag should be 'sign'" )
44+ func (s * GitSSHSignatureTestSuite ) TestParseMissingBufferFile () {
45+ // All args end in a flag — no buffer file present.
46+ args := []string {"-Y" , "sign" , "-n" , "git" , "-f" , "/path/to/key.pub" , "-U" }
47+ result := parseSSHKeygenArgs (args )
48+ assert .Equal (s .T (), "" , result .bufferFile )
49+ }
7150
72- args := cmd .Flags ().Args ()
73- s .Require ().NotEmpty (args , "should have positional args" )
74- assert .Equal (s .T (), "/tmp/buffer" , args [len (args )- 1 ],
75- "last positional arg should be the buffer file" )
51+ func (s * GitSSHSignatureTestSuite ) TestParseDefaultsToSign () {
52+ // If -Y is absent the command defaults to "sign".
53+ args := []string {"-n" , "git" , "-f" , "/path/to/key.pub" , "/tmp/buffer" }
54+ result := parseSSHKeygenArgs (args )
55+ assert .Equal (s .T (), "sign" , result .command )
56+ assert .Equal (s .T (), "/tmp/buffer" , result .bufferFile )
7657}
0 commit comments