@@ -87,6 +87,52 @@ func (m sshTestOptionsModifier) Modify(cert *ssh.Certificate, opts provisioner.S
87
87
return fmt .Errorf (string (m ))
88
88
}
89
89
90
+ func TestAuthority_initHostOnly (t * testing.T ) {
91
+ auth := testAuthority (t , func (a * Authority ) error {
92
+ a .config .SSH .UserKey = ""
93
+ return nil
94
+ })
95
+
96
+ // Check keys
97
+ keys , err := auth .GetSSHRoots (context .Background ())
98
+ assert .NoError (t , err )
99
+ assert .Len (t , 1 , keys .HostKeys )
100
+ assert .Len (t , 0 , keys .UserKeys )
101
+
102
+ // Check templates, user templates should work fine.
103
+ _ , err = auth .GetSSHConfig (context .Background (), "user" , nil )
104
+ assert .NoError (t , err )
105
+
106
+ _ , err = auth .GetSSHConfig (context .Background (), "host" , map [string ]string {
107
+ "Certificate" : "ssh_host_ecdsa_key-cert.pub" ,
108
+ "Key" : "ssh_host_ecdsa_key" ,
109
+ })
110
+ assert .Error (t , err )
111
+ }
112
+
113
+ func TestAuthority_initUserOnly (t * testing.T ) {
114
+ auth := testAuthority (t , func (a * Authority ) error {
115
+ a .config .SSH .HostKey = ""
116
+ return nil
117
+ })
118
+
119
+ // Check keys
120
+ keys , err := auth .GetSSHRoots (context .Background ())
121
+ assert .NoError (t , err )
122
+ assert .Len (t , 0 , keys .HostKeys )
123
+ assert .Len (t , 1 , keys .UserKeys )
124
+
125
+ // Check templates, host templates should work fine.
126
+ _ , err = auth .GetSSHConfig (context .Background (), "host" , map [string ]string {
127
+ "Certificate" : "ssh_host_ecdsa_key-cert.pub" ,
128
+ "Key" : "ssh_host_ecdsa_key" ,
129
+ })
130
+ assert .NoError (t , err )
131
+
132
+ _ , err = auth .GetSSHConfig (context .Background (), "user" , nil )
133
+ assert .Error (t , err )
134
+ }
135
+
90
136
func TestAuthority_SignSSH (t * testing.T ) {
91
137
key , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
92
138
assert .FatalError (t , err )
@@ -153,6 +199,8 @@ func TestAuthority_SignSSH(t *testing.T) {
153
199
}{
154
200
{"ok-user" , fields {signer , signer }, args {pub , provisioner.SignSSHOptions {}, []provisioner.SignOption {userTemplate , userOptions }}, want {CertType : ssh .UserCert }, false },
155
201
{"ok-host" , fields {signer , signer }, args {pub , provisioner.SignSSHOptions {}, []provisioner.SignOption {hostTemplate , hostOptions }}, want {CertType : ssh .HostCert }, false },
202
+ {"ok-user-only" , fields {signer , nil }, args {pub , provisioner.SignSSHOptions {}, []provisioner.SignOption {userTemplate , userOptions }}, want {CertType : ssh .UserCert }, false },
203
+ {"ok-host-only" , fields {nil , signer }, args {pub , provisioner.SignSSHOptions {}, []provisioner.SignOption {hostTemplate , hostOptions }}, want {CertType : ssh .HostCert }, false },
156
204
{"ok-opts-type-user" , fields {signer , signer }, args {pub , provisioner.SignSSHOptions {CertType : "user" }, []provisioner.SignOption {userTemplate }}, want {CertType : ssh .UserCert }, false },
157
205
{"ok-opts-type-host" , fields {signer , signer }, args {pub , provisioner.SignSSHOptions {CertType : "host" }, []provisioner.SignOption {hostTemplate }}, want {CertType : ssh .HostCert }, false },
158
206
{"ok-opts-principals" , fields {signer , signer }, args {pub , provisioner.SignSSHOptions {CertType : "user" , Principals : []string {"user" }}, []provisioner.SignOption {userTemplateWithUser }}, want {CertType : ssh .UserCert , Principals : []string {"user" }}, false },
0 commit comments