Better test coverage

This commit is contained in:
Louis Taylor 2018-07-26 10:50:28 +01:00
parent 474c8ed27f
commit 791488e2ed
No known key found for this signature in database
GPG Key ID: 8E81A6DAE13E7098
2 changed files with 111 additions and 26 deletions

View File

@ -14,7 +14,7 @@ func ValidateCertificateForIssuer(crt *v1alpha1.Certificate, issuerObj v1alpha1.
issuerType, err := issuer.NameForIssuer(issuerObj)
if err != nil {
el = append(el, field.Invalid(path, err, err.Error()))
el = append(el, field.Invalid(path, err.Error(), err.Error()))
return el
}

View File

@ -5,59 +5,144 @@ import (
"testing"
"github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha1"
"github.com/jetstack/cert-manager/test/util/generate"
"k8s.io/apimachinery/pkg/util/validation/field"
)
func TestValidateCertificateForACMEIssuer(t *testing.T) {
const (
defaultTestIssuerName = "test-issuer"
defaultTestCrtName = "test-crt"
defaultTestNamespace = "default"
)
func TestValidateCertificateForIssuer(t *testing.T) {
fldPath := field.NewPath("spec")
scenarios := map[string]struct {
spec *v1alpha1.CertificateSpec
issuer *v1alpha1.IssuerSpec
crt *v1alpha1.Certificate
issuer *v1alpha1.Issuer
errs []*field.Error
}{
"valid basic certificate": {
spec: &v1alpha1.CertificateSpec{
CommonName: "testcn",
SecretName: "abc",
IssuerRef: validIssuerRef,
crt: &v1alpha1.Certificate{
Spec: v1alpha1.CertificateSpec{
IssuerRef: validIssuerRef,
ACME: &v1alpha1.ACMECertificateConfig{
Config: []v1alpha1.ACMECertificateDomainConfig{
{
Domains: []string{"example.com"},
ACMESolverConfig: v1alpha1.ACMESolverConfig{
HTTP01: &v1alpha1.ACMECertificateHTTP01Config{},
},
},
},
},
},
},
issuer: &v1alpha1.IssuerSpec{},
issuer: generate.Issuer(generate.IssuerConfig{
Name: defaultTestIssuerName,
Namespace: defaultTestNamespace,
}),
},
"certificate with invalid keyAlgorithm": {
spec: &v1alpha1.CertificateSpec{
CommonName: "testcn",
SecretName: "abc",
IssuerRef: validIssuerRef,
KeyAlgorithm: v1alpha1.KeyAlgorithm("blah"),
crt: &v1alpha1.Certificate{
Spec: v1alpha1.CertificateSpec{
KeyAlgorithm: v1alpha1.KeyAlgorithm("blah"),
IssuerRef: validIssuerRef,
ACME: &v1alpha1.ACMECertificateConfig{
Config: []v1alpha1.ACMECertificateDomainConfig{
{
Domains: []string{"example.com"},
ACMESolverConfig: v1alpha1.ACMESolverConfig{
HTTP01: &v1alpha1.ACMECertificateHTTP01Config{},
},
},
},
},
},
},
issuer: generate.Issuer(generate.IssuerConfig{
Name: defaultTestIssuerName,
Namespace: defaultTestNamespace,
}),
errs: []*field.Error{
field.Invalid(fldPath.Child("keyAlgorithm"), v1alpha1.KeyAlgorithm("blah"), "ACME key algorithm must be RSA"),
},
},
"certificate with correct keyAlgorithm for ACME": {
spec: &v1alpha1.CertificateSpec{
CommonName: "testcn",
SecretName: "abc",
IssuerRef: validIssuerRef,
KeyAlgorithm: v1alpha1.RSAKeyAlgorithm,
crt: &v1alpha1.Certificate{
Spec: v1alpha1.CertificateSpec{
KeyAlgorithm: v1alpha1.RSAKeyAlgorithm,
IssuerRef: validIssuerRef,
ACME: &v1alpha1.ACMECertificateConfig{
Config: []v1alpha1.ACMECertificateDomainConfig{
{
Domains: []string{"example.com"},
ACMESolverConfig: v1alpha1.ACMESolverConfig{
HTTP01: &v1alpha1.ACMECertificateHTTP01Config{},
},
},
},
},
},
},
issuer: generate.Issuer(generate.IssuerConfig{
Name: defaultTestIssuerName,
Namespace: defaultTestNamespace,
}),
},
"certificate with incorrect keyAlgorithm for ACME": {
spec: &v1alpha1.CertificateSpec{
CommonName: "testcn",
SecretName: "abc",
IssuerRef: validIssuerRef,
KeyAlgorithm: v1alpha1.ECDSAKeyAlgorithm,
crt: &v1alpha1.Certificate{
Spec: v1alpha1.CertificateSpec{
KeyAlgorithm: v1alpha1.ECDSAKeyAlgorithm,
IssuerRef: validIssuerRef,
ACME: &v1alpha1.ACMECertificateConfig{
Config: []v1alpha1.ACMECertificateDomainConfig{
{
Domains: []string{"example.com"},
ACMESolverConfig: v1alpha1.ACMESolverConfig{
HTTP01: &v1alpha1.ACMECertificateHTTP01Config{},
},
},
},
},
},
},
issuer: generate.Issuer(generate.IssuerConfig{
Name: defaultTestIssuerName,
Namespace: defaultTestNamespace,
}),
errs: []*field.Error{
field.Invalid(fldPath.Child("keyAlgorithm"), v1alpha1.ECDSAKeyAlgorithm, "ACME key algorithm must be RSA"),
},
},
"certificate with unspecified issuer type": {
crt: &v1alpha1.Certificate{
Spec: v1alpha1.CertificateSpec{
KeyAlgorithm: v1alpha1.ECDSAKeyAlgorithm,
IssuerRef: validIssuerRef,
ACME: &v1alpha1.ACMECertificateConfig{
Config: []v1alpha1.ACMECertificateDomainConfig{
{
Domains: []string{"example.com"},
ACMESolverConfig: v1alpha1.ACMESolverConfig{
HTTP01: &v1alpha1.ACMECertificateHTTP01Config{},
},
},
},
},
},
},
issuer: &v1alpha1.Issuer{},
errs: []*field.Error{
field.Invalid(fldPath, "no issuer specified for Issuer '/'", "no issuer specified for Issuer '/'"),
},
},
}
for n, s := range scenarios {
t.Run(n, func(t *testing.T) {
path := field.NewPath("spec")
errs := ValidateCertificateForACMEIssuer(s.spec, s.issuer, path)
errs := ValidateCertificateForIssuer(s.crt, s.issuer)
if len(errs) != len(s.errs) {
t.Errorf("Expected %v but got %v", s.errs, errs)
return