vault/helper/testhelpers/minimal/minimal.go

82 lines
2.7 KiB
Go

package minimal
import (
"github.com/hashicorp/go-hclog"
logicalKv "github.com/hashicorp/vault-plugin-secrets-kv"
"github.com/hashicorp/vault/audit"
auditFile "github.com/hashicorp/vault/builtin/audit/file"
auditSocket "github.com/hashicorp/vault/builtin/audit/socket"
auditSyslog "github.com/hashicorp/vault/builtin/audit/syslog"
logicalDb "github.com/hashicorp/vault/builtin/logical/database"
"github.com/hashicorp/vault/builtin/plugin"
"github.com/hashicorp/vault/helper/builtinplugins"
"github.com/hashicorp/vault/http"
"github.com/hashicorp/vault/sdk/helper/logging"
"github.com/hashicorp/vault/sdk/logical"
"github.com/hashicorp/vault/sdk/physical/inmem"
"github.com/hashicorp/vault/vault"
"github.com/mitchellh/copystructure"
"github.com/mitchellh/go-testing-interface"
)
// NewTestSoloCluster is a simpler version of NewTestCluster that only creates
// single-node clusters. It is intentionally minimalist, if you need something
// from vault.TestClusterOptions, use NewTestCluster instead. It should work fine
// with a nil config argument. There is no need to call Start or Cleanup or
// TestWaitActive on the resulting cluster.
func NewTestSoloCluster(t testing.T, config *vault.CoreConfig) *vault.TestCluster {
logger := logging.NewVaultLogger(hclog.Trace).Named(t.Name())
mycfg := &vault.CoreConfig{}
if config != nil {
// It's rude to modify an input argument as a side-effect
copy, err := copystructure.Copy(config)
if err != nil {
t.Fatal(err)
}
mycfg = copy.(*vault.CoreConfig)
}
if mycfg.Physical == nil {
// Don't use NewTransactionalInmem because that would enable replication,
// which we don't care about in our case (use NewTestCluster for that.)
inm, err := inmem.NewInmem(nil, logger)
if err != nil {
t.Fatal(err)
}
mycfg.Physical = inm
}
if mycfg.CredentialBackends == nil {
mycfg.CredentialBackends = map[string]logical.Factory{
"plugin": plugin.Factory,
}
}
if mycfg.LogicalBackends == nil {
mycfg.LogicalBackends = map[string]logical.Factory{
"plugin": plugin.Factory,
"database": logicalDb.Factory,
// This is also available in the plugin catalog, but is here due to the need to
// automatically mount it.
"kv": logicalKv.Factory,
}
}
if mycfg.AuditBackends == nil {
mycfg.AuditBackends = map[string]audit.Factory{
"file": auditFile.Factory,
"socket": auditSocket.Factory,
"syslog": auditSyslog.Factory,
}
}
if mycfg.BuiltinRegistry == nil {
mycfg.BuiltinRegistry = builtinplugins.Registry
}
cluster := vault.NewTestCluster(t, mycfg, &vault.TestClusterOptions{
NumCores: 1,
HandlerFunc: http.Handler,
Logger: logger,
})
t.Cleanup(cluster.Cleanup)
return cluster
}