github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/certs_test.go (about) 1 package cmd 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 "os" 8 "testing" 9 10 "github.com/drycc/controller-sdk-go/api" 11 "github.com/drycc/workflow-cli/pkg/testutil" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestCertsList(t *testing.T) { 16 t.Parallel() 17 cf, server, err := testutil.NewTestServerAndClient() 18 if err != nil { 19 t.Fatal(err) 20 } 21 defer server.Close() 22 var b bytes.Buffer 23 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 24 25 server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) { 26 testutil.SetHeaders(w) 27 fmt.Fprintf(w, `{ 28 "count": 4, 29 "next": null, 30 "previous": null, 31 "results": [ 32 { 33 "name": "test-example-com", 34 "common_name": "test.example.com", 35 "san": [ 36 "test.com", 37 "example.com" 38 ], 39 "domains": [ 40 "test.com", 41 "example.com" 42 ], 43 "created": "2016-06-09T00:00:00UTC", 44 "updated": "2016-06-09T00:00:00UTC", 45 "expires": "2014-11-10T00:00:00UTC", 46 "fingerprint": "12:34:56:78:90" 47 }, 48 { 49 "name": "test-drycc-com", 50 "common_name": "test.drycc.com", 51 "created": "2016-06-09T00:00:00UTC", 52 "updated": "2016-06-09T00:00:00UTC", 53 "expires": "2016-08-01T00:00:00UTC", 54 "fingerprint": "ab:12:ab:12:ab" 55 }, 56 { 57 "name": "test1", 58 "common_name": "1.test.drycc.com", 59 "expires": "2016-06-11T00:00:00UTC" 60 }, 61 { 62 "name": "test2", 63 "common_name": "2.test.drycc.com", 64 "expires": "2018-01-01T00:00:00UTC" 65 } 66 ] 67 }`) 68 }) 69 70 err = cmdr.CertsList(-1) 71 assert.NoError(t, err) 72 73 assert.Equal(t, b.String(), `NAME COMMON-NAME EXPIRES SAN DOMAINS 74 test-example-com test.example.com 10 Nov 2014 test.com,example.com test.com,example.com 75 test-drycc-com test.drycc.com 1 Aug 2016 <none> <none> 76 test1 1.test.drycc.com 11 Jun 2016 <none> <none> 77 test2 2.test.drycc.com 1 Jan 2018 <none> <none> 78 `, "output") 79 80 cf, server, err = testutil.NewTestServerAndClient() 81 if err != nil { 82 t.Fatal(err) 83 } 84 defer server.Close() 85 86 cmdr.ConfigFile = cf 87 b.Reset() 88 89 server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) { 90 testutil.SetHeaders(w) 91 fmt.Fprintf(w, `{ 92 "count": 0, 93 "next": null, 94 "previous": null, 95 "results": [] 96 }`) 97 }) 98 99 err = cmdr.CertsList(-1) 100 assert.NoError(t, err) 101 102 assert.Equal(t, b.String(), "No certs\n", "output") 103 } 104 105 func TestCertsListLimit(t *testing.T) { 106 t.Parallel() 107 cf, server, err := testutil.NewTestServerAndClient() 108 if err != nil { 109 t.Fatal(err) 110 } 111 defer server.Close() 112 var b bytes.Buffer 113 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 114 115 server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) { 116 testutil.SetHeaders(w) 117 fmt.Fprintf(w, `{ 118 "count": 4, 119 "next": null, 120 "previous": null, 121 "results": [ 122 { 123 "name": "test-example-com", 124 "common_name": "test.example.com", 125 "san": [ 126 "test.com", 127 "drycc.com", 128 "example.com" 129 ], 130 "domains": [ 131 "test.com", 132 "drycc.com", 133 "example.com" 134 ], 135 "created": "2016-06-09T00:00:00UTC", 136 "updated": "2016-06-09T00:00:00UTC", 137 "expires": "2014-11-10T00:00:00UTC", 138 "fingerprint": "12:34:56:78:90" 139 } 140 ] 141 }`) 142 }) 143 144 err = cmdr.CertsList(1) 145 assert.NoError(t, err) 146 147 assert.Equal(t, b.String(), `NAME COMMON-NAME EXPIRES SAN DOMAINS 148 test-example-com test.example.com 10 Nov 2014 test.com,drycc.com,example.com test.com,drycc.com,example.com 149 `, "output") 150 151 } 152 153 func TestCertsInfo(t *testing.T) { 154 t.Parallel() 155 cf, server, err := testutil.NewTestServerAndClient() 156 if err != nil { 157 t.Fatal(err) 158 } 159 defer server.Close() 160 var b bytes.Buffer 161 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 162 163 server.Mux.HandleFunc("/v2/certs/test-example-com", func(w http.ResponseWriter, _ *http.Request) { 164 testutil.SetHeaders(w) 165 fmt.Fprintf(w, `{ 166 "name": "test-example-com", 167 "owner": "admin", 168 "issuer": "testca", 169 "subject": "testing", 170 "common_name": "test.drycc.com", 171 "created": "2016-06-09T00:00:00UTC", 172 "updated": "2016-06-09T00:00:00UTC", 173 "expires": "2016-06-09T00:00:00UTC", 174 "starts": "2016-06-09T00:00:00UTC", 175 "fingerprint": "ab:12:ab:12:ab", 176 "san": [ 177 "test.com", 178 "example.com" 179 ], 180 "domains": [ 181 "test.com", 182 "example.com" 183 ] 184 }`) 185 }) 186 187 err = cmdr.CertInfo("test-example-com") 188 assert.NoError(t, err) 189 assert.Equal(t, b.String(), `Name: test-example-com 190 Common Name(s): test.drycc.com 191 Expires At: 9 Jun 2016 192 Starts At: 9 Jun 2016 193 Fingerprint: ab:12:ab:12:ab 194 Subject Alt Name: test.com,example.com 195 Issuer: testca 196 Subject: testing 197 198 Connected Domains: test.com,example.com 199 Owner: admin 200 Created: 2016-06-09T00:00:00Z 201 Updated: 2016-06-09T00:00:00Z 202 `, "output") 203 204 server.Mux.HandleFunc("/v2/certs/test-drycc-com", func(w http.ResponseWriter, _ *http.Request) { 205 testutil.SetHeaders(w) 206 fmt.Fprintf(w, `{ 207 "name": "test-drycc-com" 208 }`) 209 }) 210 b.Reset() 211 212 err = cmdr.CertInfo("test-drycc-com") 213 assert.NoError(t, err) 214 assert.Equal(t, b.String(), `Name: test-drycc-com 215 Common Name(s): <none> 216 Expires At: <none> 217 Starts At: <none> 218 Fingerprint: <none> 219 Subject Alt Name: <none> 220 Issuer: <none> 221 Subject: <none> 222 223 Connected Domains: <none> 224 Owner: <none> 225 Created: <none> 226 Updated: <none> 227 `, "output") 228 } 229 230 func TestCertsRemove(t *testing.T) { 231 t.Parallel() 232 cf, server, err := testutil.NewTestServerAndClient() 233 if err != nil { 234 t.Fatal(err) 235 } 236 defer server.Close() 237 var b bytes.Buffer 238 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 239 240 server.Mux.HandleFunc("/v2/certs/test-example-com", func(w http.ResponseWriter, _ *http.Request) { 241 testutil.SetHeaders(w) 242 w.WriteHeader(http.StatusNoContent) 243 }) 244 245 err = cmdr.CertRemove("test-example-com") 246 assert.NoError(t, err) 247 248 assert.Equal(t, testutil.StripProgress(b.String()), "Removing test-example-com... done\n", "output") 249 } 250 251 func TestCertsAttach(t *testing.T) { 252 t.Parallel() 253 cf, server, err := testutil.NewTestServerAndClient() 254 if err != nil { 255 t.Fatal(err) 256 } 257 defer server.Close() 258 var b bytes.Buffer 259 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 260 261 server.Mux.HandleFunc("/v2/certs/test-example-com/domain/", func(w http.ResponseWriter, r *http.Request) { 262 testutil.SetHeaders(w) 263 testutil.AssertBody(t, api.CertAttachRequest{Domain: "drycc.com"}, r) 264 w.WriteHeader(http.StatusCreated) 265 }) 266 267 err = cmdr.CertAttach("test-example-com", "drycc.com") 268 assert.NoError(t, err) 269 270 assert.Equal(t, testutil.StripProgress(b.String()), "Attaching certificate test-example-com to domain drycc.com... done\n", "output") 271 } 272 273 func TestCertsDetach(t *testing.T) { 274 t.Parallel() 275 cf, server, err := testutil.NewTestServerAndClient() 276 if err != nil { 277 t.Fatal(err) 278 } 279 defer server.Close() 280 var b bytes.Buffer 281 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 282 283 server.Mux.HandleFunc("/v2/certs/test-example-com/domain/drycc.com", func(w http.ResponseWriter, _ *http.Request) { 284 testutil.SetHeaders(w) 285 w.WriteHeader(http.StatusNoContent) 286 }) 287 288 err = cmdr.CertDetach("test-example-com", "drycc.com") 289 assert.NoError(t, err) 290 291 assert.Equal(t, testutil.StripProgress(b.String()), "Detaching certificate test-example-com from domain drycc.com... done\n", "output") 292 } 293 294 func TestCertsAdd(t *testing.T) { 295 t.Parallel() 296 cf, server, err := testutil.NewTestServerAndClient() 297 if err != nil { 298 t.Fatal(err) 299 } 300 defer server.Close() 301 var b bytes.Buffer 302 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 303 304 server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, r *http.Request) { 305 testutil.SetHeaders(w) 306 testutil.AssertBody(t, api.CertCreateRequest{Certificate: "cert", Key: "key", Name: "testcert"}, r) 307 w.WriteHeader(http.StatusCreated) 308 fmt.Fprintf(w, "{}") 309 }) 310 311 keyFile, err := os.CreateTemp("", "drycc-cli-unit-test-key") 312 assert.NoError(t, err) 313 _, err = keyFile.Write([]byte("key")) 314 assert.NoError(t, err) 315 keyFile.Close() 316 317 certFile, err := os.CreateTemp("", "drycc-cli-unit-test-cert") 318 assert.NoError(t, err) 319 _, err = certFile.Write([]byte("cert")) 320 assert.NoError(t, err) 321 certFile.Close() 322 323 err = cmdr.CertAdd(certFile.Name(), keyFile.Name(), "testcert") 324 assert.NoError(t, err) 325 326 assert.Equal(t, testutil.StripProgress(b.String()), "Adding SSL endpoint... done\n", "output") 327 }