2019-03-08 03:30:17 +00:00
|
|
|
package provisioner
|
2018-10-05 21:48:36 +00:00
|
|
|
|
|
|
|
import (
|
2019-03-11 20:25:19 +00:00
|
|
|
"crypto/x509"
|
2018-10-05 21:48:36 +00:00
|
|
|
"crypto/x509/pkix"
|
|
|
|
"net"
|
2019-03-11 20:25:19 +00:00
|
|
|
"net/url"
|
2018-10-05 21:48:36 +00:00
|
|
|
"testing"
|
2019-03-11 20:25:19 +00:00
|
|
|
"time"
|
2018-10-05 21:48:36 +00:00
|
|
|
)
|
|
|
|
|
2019-03-11 20:25:19 +00:00
|
|
|
func Test_emailOnlyIdentity_Valid(t *testing.T) {
|
|
|
|
uri, err := url.Parse("https://example.com/1.0/getUser")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
type args struct {
|
|
|
|
req *x509.CertificateRequest
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
e emailOnlyIdentity
|
|
|
|
args args
|
|
|
|
wantErr bool
|
2018-10-05 21:48:36 +00:00
|
|
|
}{
|
2019-03-11 20:25:19 +00:00
|
|
|
{"ok", "name@smallstep.com", args{&x509.CertificateRequest{EmailAddresses: []string{"name@smallstep.com"}}}, false},
|
|
|
|
{"DNSNames", "name@smallstep.com", args{&x509.CertificateRequest{DNSNames: []string{"foo.bar.zar"}}}, true},
|
|
|
|
{"IPAddresses", "name@smallstep.com", args{&x509.CertificateRequest{IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1)}}}, true},
|
|
|
|
{"URIs", "name@smallstep.com", args{&x509.CertificateRequest{URIs: []*url.URL{uri}}}, true},
|
|
|
|
{"no-emails", "name@smallstep.com", args{&x509.CertificateRequest{EmailAddresses: []string{}}}, true},
|
|
|
|
{"empty-email", "", args{&x509.CertificateRequest{EmailAddresses: []string{""}}}, true},
|
|
|
|
{"multiple-emails", "name@smallstep.com", args{&x509.CertificateRequest{EmailAddresses: []string{"name@smallstep.com", "foo@smallstep.com"}}}, true},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
if err := tt.e.Valid(tt.args.req); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("emailOnlyIdentity.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
|
|
|
}
|
|
|
|
})
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
2019-03-11 20:25:19 +00:00
|
|
|
}
|
2018-10-05 21:48:36 +00:00
|
|
|
|
2019-03-11 20:25:19 +00:00
|
|
|
func Test_commonNameValidator_Valid(t *testing.T) {
|
|
|
|
type args struct {
|
|
|
|
req *x509.CertificateRequest
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
v commonNameValidator
|
|
|
|
args args
|
|
|
|
wantErr bool
|
|
|
|
}{
|
|
|
|
{"ok", "foo.bar.zar", args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: "foo.bar.zar"}}}, false},
|
|
|
|
{"empty", "", args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: ""}}}, true},
|
|
|
|
{"wrong", "foo.bar.zar", args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: "example.com"}}}, true},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
if err := tt.v.Valid(tt.args.req); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("commonNameValidator.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2019-07-15 22:52:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_commonNameSliceValidator_Valid(t *testing.T) {
|
|
|
|
type args struct {
|
|
|
|
req *x509.CertificateRequest
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
v commonNameSliceValidator
|
|
|
|
args args
|
|
|
|
wantErr bool
|
|
|
|
}{
|
|
|
|
{"ok", []string{"foo.bar.zar"}, args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: "foo.bar.zar"}}}, false},
|
|
|
|
{"ok", []string{"example.com", "foo.bar.zar"}, args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: "foo.bar.zar"}}}, false},
|
|
|
|
{"empty", []string{""}, args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: ""}}}, true},
|
|
|
|
{"wrong", []string{"foo.bar.zar"}, args{&x509.CertificateRequest{Subject: pkix.Name{CommonName: "example.com"}}}, true},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
if err := tt.v.Valid(tt.args.req); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("commonNameSliceValidator.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
|
|
|
|
2019-03-11 20:25:19 +00:00
|
|
|
func Test_dnsNamesValidator_Valid(t *testing.T) {
|
|
|
|
type args struct {
|
|
|
|
req *x509.CertificateRequest
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
v dnsNamesValidator
|
|
|
|
args args
|
|
|
|
wantErr bool
|
2018-10-05 21:48:36 +00:00
|
|
|
}{
|
2019-03-11 20:25:19 +00:00
|
|
|
{"ok0", []string{}, args{&x509.CertificateRequest{DNSNames: []string{}}}, false},
|
|
|
|
{"ok1", []string{"foo.bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"foo.bar.zar"}}}, false},
|
|
|
|
{"ok2", []string{"foo.bar.zar", "bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"foo.bar.zar", "bar.zar"}}}, false},
|
|
|
|
{"ok3", []string{"foo.bar.zar", "bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"bar.zar", "foo.bar.zar"}}}, false},
|
|
|
|
{"fail1", []string{"foo.bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"bar.zar"}}}, true},
|
|
|
|
{"fail2", []string{"foo.bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"bar.zar", "foo.bar.zar"}}}, true},
|
|
|
|
{"fail3", []string{"foo.bar.zar", "bar.zar"}, args{&x509.CertificateRequest{DNSNames: []string{"foo.bar.zar", "zar.bar"}}}, true},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
if err := tt.v.Valid(tt.args.req); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("dnsNamesValidator.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
|
|
|
}
|
|
|
|
})
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
2019-03-11 20:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_ipAddressesValidator_Valid(t *testing.T) {
|
|
|
|
ip1 := net.IPv4(10, 3, 2, 1)
|
|
|
|
ip2 := net.IPv4(10, 3, 2, 2)
|
|
|
|
ip3 := net.IPv4(10, 3, 2, 3)
|
2018-10-05 21:48:36 +00:00
|
|
|
|
2019-03-11 20:25:19 +00:00
|
|
|
type args struct {
|
|
|
|
req *x509.CertificateRequest
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
v ipAddressesValidator
|
|
|
|
args args
|
|
|
|
wantErr bool
|
|
|
|
}{
|
|
|
|
{"ok0", []net.IP{}, args{&x509.CertificateRequest{IPAddresses: []net.IP{}}}, false},
|
|
|
|
{"ok1", []net.IP{ip1}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip1}}}, false},
|
|
|
|
{"ok2", []net.IP{ip1, ip2}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip1, ip2}}}, false},
|
|
|
|
{"ok3", []net.IP{ip1, ip2}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip2, ip1}}}, false},
|
|
|
|
{"fail1", []net.IP{ip1}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip2}}}, true},
|
|
|
|
{"fail2", []net.IP{ip1}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip2, ip1}}}, true},
|
|
|
|
{"fail3", []net.IP{ip1, ip2}, args{&x509.CertificateRequest{IPAddresses: []net.IP{ip1, ip3}}}, true},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
if err := tt.v.Valid(tt.args.req); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("ipAddressesValidator.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-11 20:25:19 +00:00
|
|
|
func Test_validityValidator_Valid(t *testing.T) {
|
|
|
|
type fields struct {
|
|
|
|
min time.Duration
|
|
|
|
max time.Duration
|
|
|
|
}
|
|
|
|
type args struct {
|
2018-10-19 05:26:39 +00:00
|
|
|
crt *x509.Certificate
|
2019-03-11 20:25:19 +00:00
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
fields fields
|
|
|
|
args args
|
|
|
|
wantErr bool
|
2018-10-05 21:48:36 +00:00
|
|
|
}{
|
2019-03-11 20:25:19 +00:00
|
|
|
// TODO: Add test cases.
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
2019-03-11 20:25:19 +00:00
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
v := &validityValidator{
|
|
|
|
min: tt.fields.min,
|
|
|
|
max: tt.fields.max,
|
|
|
|
}
|
|
|
|
if err := v.Valid(tt.args.crt); (err != nil) != tt.wantErr {
|
|
|
|
t.Errorf("validityValidator.Valid() error = %v, wantErr %v", err, tt.wantErr)
|
2018-10-05 21:48:36 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|