Refactor PKI tests for speed (#15999)
* Refactor role issuance tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 5.879s After: github.com/hashicorp/vault/builtin/logical/pki 1.063s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor role key bit tests to use direct backend Also removes redundant cases. Before: github.com/hashicorp/vault/builtin/logical/pki 136.605s After: github.com/hashicorp/vault/builtin/logical/pki 24.713s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor common name test to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.767s After: github.com/hashicorp/vault/builtin/logical/pki 0.611s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor device cert tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.725s After: github.com/hashicorp/vault/builtin/logical/pki 0.402s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor invalid parameter test to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 3.777s After: github.com/hashicorp/vault/builtin/logical/pki 0.021s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor Alt Issuer tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.560s After: github.com/hashicorp/vault/builtin/logical/pki 0.111s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor root idempotency tests to use direct backend As a result, we've had to import a root cert from elsewhere in the test suite, rather than using the one off the cluster. Before: github.com/hashicorp/vault/builtin/logical/pki 4.399s After: github.com/hashicorp/vault/builtin/logical/pki 0.523s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Move PKI direct backend helpers to common location Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor OID SANs test to direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 5.284s After: github.com/hashicorp/vault/builtin/logical/pki 0.808s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor allowed serial numbers test to direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.789s After: github.com/hashicorp/vault/builtin/logical/pki 0.600s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor URI SANs to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.245s After: github.com/hashicorp/vault/builtin/logical/pki 0.600s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor Full Chain CA tests to direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 14.503s After: github.com/hashicorp/vault/builtin/logical/pki 2.082s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Update Allow Past CA tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.323s After: github.com/hashicorp/vault/builtin/logical/pki 0.322s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Convert existing-key root test to direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.430s After: github.com/hashicorp/vault/builtin/logical/pki 0.370s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor CRL enable/disable tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 5.738s After: github.com/hashicorp/vault/builtin/logical/pki 2.482s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Update intermediate existing key tests to use direct backend Before: github.com/hashicorp/vault/builtin/logical/pki 4.182s After: github.com/hashicorp/vault/builtin/logical/pki 0.416s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com> * Refactor Issuance TTL verification tests to use direct backend Also shorten sleep duration slightly by precisely calculating it relative to the actual cert life time. Before: github.com/hashicorp/vault/builtin/logical/pki 19.755s After: github.com/hashicorp/vault/builtin/logical/pki 11.521s Signed-off-by: Alexander Scheel <alex.scheel@hashicorp.com>
This commit is contained in:
parent
11121a829a
commit
3496bc0416
File diff suppressed because it is too large
Load Diff
|
@ -14,37 +14,6 @@ import (
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CBReq(b *backend, s logical.Storage, operation logical.Operation, path string, data map[string]interface{}) (*logical.Response, error) {
|
|
||||||
resp, err := b.HandleRequest(context.Background(), &logical.Request{
|
|
||||||
Operation: operation,
|
|
||||||
Path: path,
|
|
||||||
Data: data,
|
|
||||||
Storage: s,
|
|
||||||
MountPoint: "pki/",
|
|
||||||
})
|
|
||||||
if err != nil || resp == nil {
|
|
||||||
return resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if msg, ok := resp.Data["error"]; ok && msg != nil && len(msg.(string)) > 0 {
|
|
||||||
return resp, fmt.Errorf("%s", msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func CBRead(b *backend, s logical.Storage, path string) (*logical.Response, error) {
|
|
||||||
return CBReq(b, s, logical.ReadOperation, path, make(map[string]interface{}))
|
|
||||||
}
|
|
||||||
|
|
||||||
func CBWrite(b *backend, s logical.Storage, path string, data map[string]interface{}) (*logical.Response, error) {
|
|
||||||
return CBReq(b, s, logical.UpdateOperation, path, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CBDelete(b *backend, s logical.Storage, path string) (*logical.Response, error) {
|
|
||||||
return CBReq(b, s, logical.DeleteOperation, path, make(map[string]interface{}))
|
|
||||||
}
|
|
||||||
|
|
||||||
// For speed, all keys are ECDSA.
|
// For speed, all keys are ECDSA.
|
||||||
type CBGenerateKey struct {
|
type CBGenerateKey struct {
|
||||||
Name string
|
Name string
|
||||||
|
|
|
@ -5,36 +5,14 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/vault/api"
|
|
||||||
vaulthttp "github.com/hashicorp/vault/http"
|
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
"github.com/hashicorp/vault/vault"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBackend_CRL_EnableDisable(t *testing.T) {
|
func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
coreConfig := &vault.CoreConfig{
|
b, s := createBackendWithStorage(t)
|
||||||
LogicalBackends: map[string]logical.Factory{
|
|
||||||
"pki": Factory,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
cluster := vault.NewTestCluster(t, coreConfig, &vault.TestClusterOptions{
|
|
||||||
HandlerFunc: vaulthttp.Handler,
|
|
||||||
})
|
|
||||||
cluster.Start()
|
|
||||||
defer cluster.Cleanup()
|
|
||||||
|
|
||||||
client := cluster.Cores[0].Client
|
resp, err := CBWrite(b, s, "root/generate/internal", map[string]interface{}{
|
||||||
var err error
|
|
||||||
err = client.Sys().Mount("pki", &api.MountInput{
|
|
||||||
Type: "pki",
|
|
||||||
Config: api.MountConfigInput{
|
|
||||||
DefaultLeaseTTL: "16h",
|
|
||||||
MaxLeaseTTL: "60h",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
resp, err := client.Logical().Write("pki/root/generate/internal", map[string]interface{}{
|
|
||||||
"ttl": "40h",
|
"ttl": "40h",
|
||||||
"common_name": "myvault.com",
|
"common_name": "myvault.com",
|
||||||
})
|
})
|
||||||
|
@ -43,7 +21,7 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
}
|
}
|
||||||
caSerial := resp.Data["serial_number"]
|
caSerial := resp.Data["serial_number"]
|
||||||
|
|
||||||
_, err = client.Logical().Write("pki/roles/test", map[string]interface{}{
|
_, err = CBWrite(b, s, "roles/test", map[string]interface{}{
|
||||||
"allow_bare_domains": true,
|
"allow_bare_domains": true,
|
||||||
"allow_subdomains": true,
|
"allow_subdomains": true,
|
||||||
"allowed_domains": "foobar.com",
|
"allowed_domains": "foobar.com",
|
||||||
|
@ -55,7 +33,7 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
|
|
||||||
serials := make(map[int]string)
|
serials := make(map[int]string)
|
||||||
for i := 0; i < 6; i++ {
|
for i := 0; i < 6; i++ {
|
||||||
resp, err := client.Logical().Write("pki/issue/test", map[string]interface{}{
|
resp, err := CBWrite(b, s, "issue/test", map[string]interface{}{
|
||||||
"common_name": "test.foobar.com",
|
"common_name": "test.foobar.com",
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,7 +43,7 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
test := func(numRevokedExpected int, expectedSerials ...string) {
|
test := func(numRevokedExpected int, expectedSerials ...string) {
|
||||||
certList := getCrlCertificateList(t, client, "pki")
|
certList := getParsedCrlFromBackend(t, b, s, "crl").TBSCertList
|
||||||
lenList := len(certList.RevokedCertificates)
|
lenList := len(certList.RevokedCertificates)
|
||||||
if lenList != numRevokedExpected {
|
if lenList != numRevokedExpected {
|
||||||
t.Fatalf("expected %d revoked certificates, found %d", numRevokedExpected, lenList)
|
t.Fatalf("expected %d revoked certificates, found %d", numRevokedExpected, lenList)
|
||||||
|
@ -77,14 +55,14 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
revoke := func(serialIndex int) {
|
revoke := func(serialIndex int) {
|
||||||
resp, err = client.Logical().Write("pki/revoke", map[string]interface{}{
|
resp, err = CBWrite(b, s, "revoke", map[string]interface{}{
|
||||||
"serial_number": serials[serialIndex],
|
"serial_number": serials[serialIndex],
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err = client.Logical().Write("pki/revoke", map[string]interface{}{
|
resp, err = CBWrite(b, s, "revoke", map[string]interface{}{
|
||||||
"serial_number": caSerial,
|
"serial_number": caSerial,
|
||||||
})
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -93,7 +71,7 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle := func(disabled bool) {
|
toggle := func(disabled bool) {
|
||||||
_, err = client.Logical().Write("pki/config/crl", map[string]interface{}{
|
_, err = CBWrite(b, s, "config/crl", map[string]interface{}{
|
||||||
"disable": disabled,
|
"disable": disabled,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -121,12 +99,12 @@ func TestBackend_CRL_EnableDisable(t *testing.T) {
|
||||||
test(6)
|
test(6)
|
||||||
|
|
||||||
// The rotate command should reset the update time of the CRL.
|
// The rotate command should reset the update time of the CRL.
|
||||||
crlCreationTime1 := getCrlCertificateList(t, client, "pki").ThisUpdate
|
crlCreationTime1 := getParsedCrlFromBackend(t, b, s, "crl").TBSCertList.ThisUpdate
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
_, err = client.Logical().Read("pki/crl/rotate")
|
_, err = CBRead(b, s, "crl/rotate")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
crlCreationTime2 := getCrlCertificateList(t, client, "pki").ThisUpdate
|
crlCreationTime2 := getParsedCrlFromBackend(t, b, s, "crl").TBSCertList.ThisUpdate
|
||||||
require.NotEqual(t, crlCreationTime1, crlCreationTime2)
|
require.NotEqual(t, crlCreationTime1, crlCreationTime2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -239,3 +239,55 @@ func getParsedCrlAtPath(t *testing.T, client *api.Client, path string) *pkix.Cer
|
||||||
}
|
}
|
||||||
return crl
|
return crl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getParsedCrlFromBackend(t *testing.T, b *backend, s logical.Storage, path string) *pkix.CertificateList {
|
||||||
|
resp, err := CBRead(b, s, path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
crl, err := x509.ParseDERCRL(resp.Data[logical.HTTPRawBody].([]byte))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return crl
|
||||||
|
}
|
||||||
|
|
||||||
|
// Direct storage backend helpers (b, s := createBackendWithStorage(t)) which
|
||||||
|
// are mostly compatible with client.Logical() operations. The main difference
|
||||||
|
// is that the JSON round-tripping hasn't occurred, so values are as the
|
||||||
|
// backend returns them (e.g., []string instead of []interface{}).
|
||||||
|
func CBReq(b *backend, s logical.Storage, operation logical.Operation, path string, data map[string]interface{}) (*logical.Response, error) {
|
||||||
|
resp, err := b.HandleRequest(context.Background(), &logical.Request{
|
||||||
|
Operation: operation,
|
||||||
|
Path: path,
|
||||||
|
Data: data,
|
||||||
|
Storage: s,
|
||||||
|
MountPoint: "pki/",
|
||||||
|
})
|
||||||
|
if err != nil || resp == nil {
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg, ok := resp.Data["error"]; ok && msg != nil && len(msg.(string)) > 0 {
|
||||||
|
return resp, fmt.Errorf("%s", msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CBRead(b *backend, s logical.Storage, path string) (*logical.Response, error) {
|
||||||
|
return CBReq(b, s, logical.ReadOperation, path, make(map[string]interface{}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func CBWrite(b *backend, s logical.Storage, path string, data map[string]interface{}) (*logical.Response, error) {
|
||||||
|
return CBReq(b, s, logical.UpdateOperation, path, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CBList(b *backend, s logical.Storage, path string) (*logical.Response, error) {
|
||||||
|
return CBReq(b, s, logical.ListOperation, path, make(map[string]interface{}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func CBDelete(b *backend, s logical.Storage, path string) (*logical.Response, error) {
|
||||||
|
return CBReq(b, s, logical.DeleteOperation, path, make(map[string]interface{}))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue