Introduce generalized statusCoder errors and loads of ssh unit tests.
* StatusCoder api errors that have friendly user messages. * Unit tests for SSH sign/renew/rekey/revoke across all provisioners.
This commit is contained in:
parent
3ce267cdd6
commit
c387b21808
75 changed files with 5292 additions and 2201 deletions
|
@ -28,6 +28,7 @@ import (
|
|||
"github.com/smallstep/assert"
|
||||
"github.com/smallstep/certificates/authority"
|
||||
"github.com/smallstep/certificates/authority/provisioner"
|
||||
"github.com/smallstep/certificates/errs"
|
||||
"github.com/smallstep/certificates/logging"
|
||||
"github.com/smallstep/certificates/sshutil"
|
||||
"github.com/smallstep/certificates/templates"
|
||||
|
@ -914,7 +915,7 @@ func Test_caHandler_Renew(t *testing.T) {
|
|||
{"ok", cs, parseCertificate(certPEM), parseCertificate(rootPEM), nil, http.StatusCreated},
|
||||
{"no tls", nil, nil, nil, nil, http.StatusBadRequest},
|
||||
{"no peer certificates", &tls.ConnectionState{}, nil, nil, nil, http.StatusBadRequest},
|
||||
{"renew error", cs, nil, nil, fmt.Errorf("an error"), http.StatusForbidden},
|
||||
{"renew error", cs, nil, nil, errs.Forbidden(fmt.Errorf("an error")), http.StatusForbidden},
|
||||
}
|
||||
|
||||
expected := []byte(`{"crt":"` + strings.Replace(certPEM, "\n", `\n`, -1) + `\n","ca":"` + strings.Replace(rootPEM, "\n", `\n`, -1) + `\n","certChain":["` + strings.Replace(certPEM, "\n", `\n`, -1) + `\n","` + strings.Replace(rootPEM, "\n", `\n`, -1) + `\n"]}`)
|
||||
|
@ -934,13 +935,13 @@ func Test_caHandler_Renew(t *testing.T) {
|
|||
res := w.Result()
|
||||
|
||||
if res.StatusCode != tt.statusCode {
|
||||
t.Errorf("caHandler.Root StatusCode = %d, wants %d", res.StatusCode, tt.statusCode)
|
||||
t.Errorf("caHandler.Renew StatusCode = %d, wants %d", res.StatusCode, tt.statusCode)
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
res.Body.Close()
|
||||
if err != nil {
|
||||
t.Errorf("caHandler.Root unexpected error = %v", err)
|
||||
t.Errorf("caHandler.Renew unexpected error = %v", err)
|
||||
}
|
||||
if tt.statusCode < http.StatusBadRequest {
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expected) {
|
||||
|
@ -1009,8 +1010,12 @@ func Test_caHandler_Provisioners(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expectedError400 := []byte(`{"status":400,"message":"Bad Request"}`)
|
||||
expectedError500 := []byte(`{"status":500,"message":"Internal Server Error"}`)
|
||||
expectedError400 := errs.BadRequest(errors.New("force"))
|
||||
expectedError400Bytes, err := json.Marshal(expectedError400)
|
||||
assert.FatalError(t, err)
|
||||
expectedError500 := errs.InternalServerError(errors.New("force"))
|
||||
expectedError500Bytes, err := json.Marshal(expectedError500)
|
||||
assert.FatalError(t, err)
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
h := &caHandler{
|
||||
|
@ -1035,12 +1040,12 @@ func Test_caHandler_Provisioners(t *testing.T) {
|
|||
} else {
|
||||
switch tt.statusCode {
|
||||
case 400:
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError400) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError400)
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError400Bytes) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError400Bytes)
|
||||
}
|
||||
case 500:
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError500) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError500)
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError500Bytes) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError500Bytes)
|
||||
}
|
||||
default:
|
||||
t.Errorf("caHandler.Provisioner unexpected status code = %d", tt.statusCode)
|
||||
|
@ -1077,7 +1082,9 @@ func Test_caHandler_ProvisionerKey(t *testing.T) {
|
|||
}
|
||||
|
||||
expected := []byte(`{"key":"` + privKey + `"}`)
|
||||
expectedError := []byte(`{"status":404,"message":"Not Found"}`)
|
||||
expectedError404 := errs.NotFound(errors.New("force"))
|
||||
expectedError404Bytes, err := json.Marshal(expectedError404)
|
||||
assert.FatalError(t, err)
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
@ -1101,8 +1108,8 @@ func Test_caHandler_ProvisionerKey(t *testing.T) {
|
|||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expected)
|
||||
}
|
||||
} else {
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError)
|
||||
if !bytes.Equal(bytes.TrimSpace(body), expectedError404Bytes) {
|
||||
t.Errorf("caHandler.Provisioners Body = %s, wants %s", body, expectedError404Bytes)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue