forked from TrueCloudLab/certificates
Improve identity tests.
This commit is contained in:
parent
d85386d0b4
commit
25144539f8
6 changed files with 148 additions and 11 deletions
|
@ -76,11 +76,38 @@ func TestLoadClient(t *testing.T) {
|
||||||
want *Client
|
want *Client
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{"ok", func() { IdentityFile = "testdata/config/identity.json"; DefaultsFile = "testdata/config/defaults.json" }, expected, false},
|
{"ok", func() {
|
||||||
{"fail identity", func() { IdentityFile = "testdata/config/missing.json"; DefaultsFile = "testdata/config/defaults.json" }, nil, true},
|
IdentityFile = "testdata/config/identity.json"
|
||||||
{"fail identity", func() { IdentityFile = "testdata/config/fail.json"; DefaultsFile = "testdata/config/defaults.json" }, nil, true},
|
DefaultsFile = "testdata/config/defaults.json"
|
||||||
{"fail defaults", func() { IdentityFile = "testdata/config/identity.json"; DefaultsFile = "testdata/config/missing.json" }, nil, true},
|
}, expected, false},
|
||||||
{"fail defaults", func() { IdentityFile = "testdata/config/identity.json"; DefaultsFile = "testdata/config/fail.json" }, nil, true},
|
{"fail identity", func() {
|
||||||
|
IdentityFile = "testdata/config/missing.json"
|
||||||
|
DefaultsFile = "testdata/config/defaults.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail identity", func() {
|
||||||
|
IdentityFile = "testdata/config/fail.json"
|
||||||
|
DefaultsFile = "testdata/config/defaults.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail defaults", func() {
|
||||||
|
IdentityFile = "testdata/config/identity.json"
|
||||||
|
DefaultsFile = "testdata/config/missing.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail defaults", func() {
|
||||||
|
IdentityFile = "testdata/config/identity.json"
|
||||||
|
DefaultsFile = "testdata/config/fail.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail ca", func() {
|
||||||
|
IdentityFile = "testdata/config/identity.json"
|
||||||
|
DefaultsFile = "testdata/config/badca.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail root", func() {
|
||||||
|
IdentityFile = "testdata/config/identity.json"
|
||||||
|
DefaultsFile = "testdata/config/badroot.json"
|
||||||
|
}, nil, true},
|
||||||
|
{"fail type", func() {
|
||||||
|
IdentityFile = "testdata/config/badIdentity.json"
|
||||||
|
DefaultsFile = "testdata/config/defaults.json"
|
||||||
|
}, nil, true},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
|
|
@ -58,21 +58,26 @@ func LoadDefaultIdentity() (*Identity, error) {
|
||||||
return identity, nil
|
return identity, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// configDir and identityDir are used in WriteDefaultIdentity for testing
|
||||||
|
// purposes.
|
||||||
|
var (
|
||||||
|
configDir = filepath.Join(config.StepPath(), "config")
|
||||||
|
identityDir = filepath.Join(config.StepPath(), "identity")
|
||||||
|
)
|
||||||
|
|
||||||
// WriteDefaultIdentity writes the given certificates and key and the
|
// WriteDefaultIdentity writes the given certificates and key and the
|
||||||
// identity.json pointing to the new files.
|
// identity.json pointing to the new files.
|
||||||
func WriteDefaultIdentity(certChain []api.Certificate, key crypto.PrivateKey) error {
|
func WriteDefaultIdentity(certChain []api.Certificate, key crypto.PrivateKey) error {
|
||||||
base := filepath.Join(config.StepPath(), "config")
|
if err := os.MkdirAll(configDir, 0700); err != nil {
|
||||||
if err := os.MkdirAll(base, 0700); err != nil {
|
|
||||||
return errors.Wrap(err, "error creating config directory")
|
return errors.Wrap(err, "error creating config directory")
|
||||||
}
|
}
|
||||||
|
|
||||||
base = filepath.Join(config.StepPath(), "identity")
|
if err := os.MkdirAll(identityDir, 0700); err != nil {
|
||||||
if err := os.MkdirAll(base, 0700); err != nil {
|
|
||||||
return errors.Wrap(err, "error creating identity directory")
|
return errors.Wrap(err, "error creating identity directory")
|
||||||
}
|
}
|
||||||
|
|
||||||
certFilename := filepath.Join(base, "identity.crt")
|
certFilename := filepath.Join(identityDir, "identity.crt")
|
||||||
keyFilename := filepath.Join(base, "identity_key")
|
keyFilename := filepath.Join(identityDir, "identity_key")
|
||||||
|
|
||||||
// Write certificate
|
// Write certificate
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
package identity
|
package identity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/smallstep/cli/crypto/pemutil"
|
||||||
|
|
||||||
|
"github.com/smallstep/certificates/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLoadDefaultIdentity(t *testing.T) {
|
func TestLoadDefaultIdentity(t *testing.T) {
|
||||||
|
@ -164,3 +172,83 @@ func Test_fileExists(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWriteDefaultIdentity(t *testing.T) {
|
||||||
|
tmpDir, err := ioutil.TempDir(os.TempDir(), "go-tests")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
oldConfigDir := configDir
|
||||||
|
oldIdentityDir := identityDir
|
||||||
|
oldIdentityFile := IdentityFile
|
||||||
|
defer func() {
|
||||||
|
configDir = oldConfigDir
|
||||||
|
identityDir = oldIdentityDir
|
||||||
|
IdentityFile = oldIdentityFile
|
||||||
|
os.RemoveAll(tmpDir)
|
||||||
|
}()
|
||||||
|
|
||||||
|
certs, err := pemutil.ReadCertificateBundle("testdata/identity/identity.crt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
key, err := pemutil.Read("testdata/identity/identity_key")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var certChain []api.Certificate
|
||||||
|
for _, c := range certs {
|
||||||
|
certChain = append(certChain, api.Certificate{Certificate: c})
|
||||||
|
}
|
||||||
|
|
||||||
|
configDir = filepath.Join(tmpDir, "config")
|
||||||
|
identityDir = filepath.Join(tmpDir, "identity")
|
||||||
|
IdentityFile = filepath.Join(tmpDir, "config", "identity.json")
|
||||||
|
|
||||||
|
type args struct {
|
||||||
|
certChain []api.Certificate
|
||||||
|
key crypto.PrivateKey
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
prepare func()
|
||||||
|
args args
|
||||||
|
wantErr bool
|
||||||
|
}{
|
||||||
|
{"ok", func() {}, args{certChain, key}, false},
|
||||||
|
{"fail mkdir config", func() {
|
||||||
|
configDir = filepath.Join(tmpDir, "identity", "identity.crt")
|
||||||
|
identityDir = filepath.Join(tmpDir, "identity")
|
||||||
|
}, args{certChain, key}, true},
|
||||||
|
{"fail mkdir identity", func() {
|
||||||
|
configDir = filepath.Join(tmpDir, "config")
|
||||||
|
identityDir = filepath.Join(tmpDir, "identity", "identity.crt")
|
||||||
|
}, args{certChain, key}, true},
|
||||||
|
{"fail certificate", func() {
|
||||||
|
configDir = filepath.Join(tmpDir, "config")
|
||||||
|
identityDir = filepath.Join(tmpDir, "bad-dir")
|
||||||
|
os.MkdirAll(identityDir, 0600)
|
||||||
|
}, args{certChain, key}, true},
|
||||||
|
{"fail key", func() {
|
||||||
|
configDir = filepath.Join(tmpDir, "config")
|
||||||
|
identityDir = filepath.Join(tmpDir, "identity")
|
||||||
|
}, args{certChain, "badKey"}, true},
|
||||||
|
{"fail write identity", func() {
|
||||||
|
configDir = filepath.Join(tmpDir, "bad-dir")
|
||||||
|
identityDir = filepath.Join(tmpDir, "identity")
|
||||||
|
IdentityFile = filepath.Join(configDir, "identity.json")
|
||||||
|
os.MkdirAll(configDir, 0600)
|
||||||
|
}, args{certChain, key}, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
tt.prepare()
|
||||||
|
if err := WriteDefaultIdentity(tt.args.certChain, tt.args.key); (err != nil) != tt.wantErr {
|
||||||
|
t.Errorf("WriteDefaultIdentity() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
5
ca/identity/testdata/config/badIdentity.json
vendored
Normal file
5
ca/identity/testdata/config/badIdentity.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"type": "",
|
||||||
|
"crt": "testdata/identity/identity.crt",
|
||||||
|
"key": "testdata/identity/identity_key"
|
||||||
|
}
|
6
ca/identity/testdata/config/badca.json
vendored
Normal file
6
ca/identity/testdata/config/badca.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"ca-url": ":",
|
||||||
|
"ca-config": "testdata/config/ca.json",
|
||||||
|
"fingerprint": "9dc35eef23a234b2520516a3169090d7ec2fc61323bdd6e4fde08bcfec5d0931",
|
||||||
|
"root": "testdata/certs/root_ca.crt"
|
||||||
|
}
|
6
ca/identity/testdata/config/badroot.json
vendored
Normal file
6
ca/identity/testdata/config/badroot.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"ca-url": "https://127.0.0.1",
|
||||||
|
"ca-config": "testdata/config/ca.json",
|
||||||
|
"fingerprint": "9dc35eef23a234b2520516a3169090d7ec2fc61323bdd6e4fde08bcfec5d0931",
|
||||||
|
"root": "testdata/certs/missing.crt"
|
||||||
|
}
|
Loading…
Reference in a new issue