mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-17 20:17:00 +02:00
82 lines
2.7 KiB
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
|
|
}
|