smallstep-certificates/acme/account_test.go

82 lines
1.9 KiB
Go
Raw Normal View History

2019-05-27 00:41:10 +00:00
package acme
import (
2021-03-24 23:50:35 +00:00
"crypto"
"encoding/base64"
"testing"
2019-05-27 00:41:10 +00:00
2021-03-24 23:50:35 +00:00
"github.com/pkg/errors"
"github.com/smallstep/assert"
"go.step.sm/crypto/jose"
2019-05-27 00:41:10 +00:00
)
2021-03-24 23:50:35 +00:00
func TestKeyToID(t *testing.T) {
2019-05-27 00:41:10 +00:00
type test struct {
2021-03-24 23:50:35 +00:00
jwk *jose.JSONWebKey
exp string
2019-05-27 00:41:10 +00:00
err *Error
}
tests := map[string]func(t *testing.T) test{
2021-03-24 23:50:35 +00:00
"fail/error-generating-thumbprint": func(t *testing.T) test {
jwk, err := jose.GenerateJWK("EC", "P-256", "ES256", "sig", "", 0)
2019-05-27 00:41:10 +00:00
assert.FatalError(t, err)
2021-03-24 23:50:35 +00:00
jwk.Key = "foo"
2019-05-27 00:41:10 +00:00
return test{
2021-03-24 23:50:35 +00:00
jwk: jwk,
err: NewErrorISE("error generating jwk thumbprint: square/go-jose: unknown key type 'string'"),
2019-05-27 00:41:10 +00:00
}
},
"ok": func(t *testing.T) test {
2021-03-24 23:50:35 +00:00
jwk, err := jose.GenerateJWK("EC", "P-256", "ES256", "sig", "", 0)
2019-05-27 00:41:10 +00:00
assert.FatalError(t, err)
2021-03-24 23:50:35 +00:00
kid, err := jwk.Thumbprint(crypto.SHA256)
2019-05-27 00:41:10 +00:00
assert.FatalError(t, err)
return test{
2021-03-24 23:50:35 +00:00
jwk: jwk,
exp: base64.RawURLEncoding.EncodeToString(kid),
2019-05-27 00:41:10 +00:00
}
},
}
for name, run := range tests {
t.Run(name, func(t *testing.T) {
tc := run(t)
2021-03-24 23:50:35 +00:00
if id, err := KeyToID(tc.jwk); err != nil {
2019-05-27 00:41:10 +00:00
if assert.NotNil(t, tc.err) {
2021-03-24 23:50:35 +00:00
switch k := err.(type) {
case *Error:
assert.Equals(t, k.Type, tc.err.Type)
assert.Equals(t, k.Detail, tc.err.Detail)
assert.Equals(t, k.Status, tc.err.Status)
assert.Equals(t, k.Err.Error(), tc.err.Err.Error())
assert.Equals(t, k.Detail, tc.err.Detail)
default:
assert.FatalError(t, errors.New("unexpected error type"))
}
2019-05-27 00:41:10 +00:00
}
} else {
if assert.Nil(t, tc.err) {
2021-03-24 23:50:35 +00:00
assert.Equals(t, id, tc.exp)
2019-05-27 00:41:10 +00:00
}
}
})
}
}
2021-03-24 23:50:35 +00:00
func TestAccount_IsValid(t *testing.T) {
2019-05-27 00:41:10 +00:00
type test struct {
2021-03-24 23:50:35 +00:00
acc *Account
exp bool
2019-05-27 00:41:10 +00:00
}
2021-03-24 23:50:35 +00:00
tests := map[string]test{
"valid": {acc: &Account{Status: StatusValid}, exp: true},
"invalid": {acc: &Account{Status: StatusInvalid}, exp: false},
2019-05-27 00:41:10 +00:00
}
2021-03-24 23:50:35 +00:00
for name, tc := range tests {
2019-05-27 00:41:10 +00:00
t.Run(name, func(t *testing.T) {
2021-03-24 23:50:35 +00:00
assert.Equals(t, tc.acc.IsValid(), tc.exp)
2019-05-27 00:41:10 +00:00
})
}
}