mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-10-30 18:17:55 +00:00
Merge multiple functions for creating consul containers into one. (#6612)
Merge both functions for creating mongodb containers into one. Add retries to docker container cleanups. Require $VAULT_ACC be set to enable AWS tests.
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -48,10 +49,7 @@ func prepareRadiusTestContainer(t *testing.T) (func(), string, int) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
port, _ := strconv.Atoi(resource.GetPort("1812/udp"))
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
@@ -45,10 +46,7 @@ func prepareCassandraTestContainer(t *testing.T) (func(), string, int) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
port, _ := strconv.Atoi(resource.GetPort("9042/tcp"))
|
||||
|
||||
@@ -5,114 +5,17 @@ import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
consulapi "github.com/hashicorp/consul/api"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/consul"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
func prepareTestContainer(t *testing.T, version string) (cleanup func(), retAddress string, consulToken string) {
|
||||
consulToken = os.Getenv("CONSUL_HTTP_TOKEN")
|
||||
retAddress = os.Getenv("CONSUL_HTTP_ADDR")
|
||||
if retAddress != "" {
|
||||
return func() {}, retAddress, consulToken
|
||||
}
|
||||
|
||||
pool, err := dockertest.NewPool("")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to connect to docker: %s", err)
|
||||
}
|
||||
|
||||
config := `acl { enabled = true default_policy = "deny" }`
|
||||
if strings.HasPrefix(version, "1.3") {
|
||||
config = `datacenter = "test" acl_default_policy = "deny" acl_datacenter = "test" acl_master_token = "test"`
|
||||
}
|
||||
|
||||
dockerOptions := &dockertest.RunOptions{
|
||||
Repository: "consul",
|
||||
Tag: version,
|
||||
Cmd: []string{"agent", "-dev", "-client", "0.0.0.0", "-hcl", config},
|
||||
}
|
||||
resource, err := pool.RunWithOptions(dockerOptions)
|
||||
if err != nil {
|
||||
t.Fatalf("Could not start local Consul %s docker container: %s", version, err)
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
retAddress = fmt.Sprintf("localhost:%s", resource.GetPort("8500/tcp"))
|
||||
|
||||
// exponential backoff-retry
|
||||
if err = pool.Retry(func() error {
|
||||
var err error
|
||||
consulConfig := consulapi.DefaultNonPooledConfig()
|
||||
consulConfig.Address = retAddress
|
||||
consul, err := consulapi.NewClient(consulConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// For version of Consul < 1.4
|
||||
if strings.HasPrefix(version, "1.3") {
|
||||
consulToken = "test"
|
||||
_, err = consul.KV().Put(&consulapi.KVPair{
|
||||
Key: "setuptest",
|
||||
Value: []byte("setuptest"),
|
||||
}, &consulapi.WriteOptions{
|
||||
Token: consulToken,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// New default behavior
|
||||
aclbootstrap, _, err := consul.ACL().Bootstrap()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
consulToken = aclbootstrap.SecretID
|
||||
t.Logf("Generated Master token: %s", consulToken)
|
||||
policy := &consulapi.ACLPolicy{
|
||||
Name: "test",
|
||||
Description: "test",
|
||||
Rules: `node_prefix "" {
|
||||
policy = "write"
|
||||
}
|
||||
|
||||
service_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
`,
|
||||
}
|
||||
q := &consulapi.WriteOptions{
|
||||
Token: consulToken,
|
||||
}
|
||||
_, _, err = consul.ACL().PolicyCreate(policy, q)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
cleanup()
|
||||
t.Fatalf("Could not connect to docker: %s", err)
|
||||
}
|
||||
return cleanup, retAddress, consulToken
|
||||
}
|
||||
|
||||
func TestBackend_Config_Access(t *testing.T) {
|
||||
t.Run("config_access", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -135,7 +38,7 @@ func testBackendConfigAccess(t *testing.T, version string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, version)
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, version)
|
||||
defer cleanup()
|
||||
|
||||
connData := map[string]interface{}{
|
||||
@@ -200,7 +103,7 @@ func testBackendRenewRevoke(t *testing.T, version string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, version)
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, version)
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"address": connURL,
|
||||
@@ -305,7 +208,7 @@ func testBackendRenewRevoke14(t *testing.T, version string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, version)
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, version)
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"address": connURL,
|
||||
@@ -414,7 +317,7 @@ func TestBackend_LocalToken(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, "1.4.0-rc1")
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, "1.4.0-rc1")
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"address": connURL,
|
||||
@@ -556,7 +459,7 @@ func testBackendManagement(t *testing.T, version string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, version)
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, version)
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"address": connURL,
|
||||
@@ -600,7 +503,7 @@ func testBackendBasic(t *testing.T, version string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup, connURL, connToken := prepareTestContainer(t, version)
|
||||
cleanup, connURL, connToken := consul.PrepareTestContainer(t, version)
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"address": connURL,
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"github.com/go-test/deep"
|
||||
"github.com/hashicorp/vault/api"
|
||||
"github.com/hashicorp/vault/helper/namespace"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
vaulthttp "github.com/hashicorp/vault/http"
|
||||
"github.com/hashicorp/vault/plugins/database/postgresql"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
@@ -50,10 +51,7 @@ func preparePostgresTestContainer(t *testing.T, s logical.Storage, b logical.Bac
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("postgres://postgres:secret@localhost:%s/database?sslmode=disable", resource.GetPort("5432/tcp"))
|
||||
|
||||
@@ -4,73 +4,20 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/mongodb"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
dockertest "gopkg.in/ory-am/dockertest.v2"
|
||||
)
|
||||
|
||||
var (
|
||||
testImagePull sync.Once
|
||||
)
|
||||
|
||||
func prepareTestContainer(t *testing.T, s logical.Storage, b logical.Backend) (cid dockertest.ContainerID, retURI string) {
|
||||
if os.Getenv("MONGODB_URI") != "" {
|
||||
return "", os.Getenv("MONGODB_URI")
|
||||
}
|
||||
|
||||
// Without this the checks for whether the container has started seem to
|
||||
// never actually pass. There's really no reason to expose the test
|
||||
// containers, so don't.
|
||||
dockertest.BindDockerToLocalhost = "yep"
|
||||
|
||||
testImagePull.Do(func() {
|
||||
dockertest.Pull(dockertest.MongoDBImageName)
|
||||
})
|
||||
|
||||
cid, connErr := dockertest.ConnectToMongoDB(60, 500*time.Millisecond, func(connURI string) bool {
|
||||
connURI = "mongodb://" + connURI
|
||||
// This will cause a validation to run
|
||||
resp, err := b.HandleRequest(context.Background(), &logical.Request{
|
||||
Storage: s,
|
||||
Operation: logical.UpdateOperation,
|
||||
Path: "config/connection",
|
||||
Data: map[string]interface{}{
|
||||
"uri": connURI,
|
||||
},
|
||||
})
|
||||
if err != nil || (resp != nil && resp.IsError()) {
|
||||
// It's likely not up and running yet, so return false and try again
|
||||
return false
|
||||
}
|
||||
if resp == nil {
|
||||
t.Fatal("expected warning")
|
||||
}
|
||||
|
||||
retURI = connURI
|
||||
return true
|
||||
})
|
||||
|
||||
if connErr != nil {
|
||||
t.Fatalf("could not connect to database: %v", connErr)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func cleanupTestContainer(t *testing.T, cid dockertest.ContainerID) {
|
||||
err := cid.KillRemove()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackend_config_connection(t *testing.T) {
|
||||
var resp *logical.Response
|
||||
var err error
|
||||
@@ -112,10 +59,8 @@ func TestBackend_basic(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cid, connURI := prepareTestContainer(t, config.StorageView, b)
|
||||
if cid != "" {
|
||||
defer cleanupTestContainer(t, cid)
|
||||
}
|
||||
cleanup, connURI := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"uri": connURI,
|
||||
}
|
||||
@@ -138,10 +83,8 @@ func TestBackend_roleCrud(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cid, connURI := prepareTestContainer(t, config.StorageView, b)
|
||||
if cid != "" {
|
||||
defer cleanupTestContainer(t, cid)
|
||||
}
|
||||
cleanup, connURI := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"uri": connURI,
|
||||
}
|
||||
@@ -166,10 +109,8 @@ func TestBackend_leaseWriteRead(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cid, connURI := prepareTestContainer(t, config.StorageView, b)
|
||||
if cid != "" {
|
||||
defer cleanupTestContainer(t, cid)
|
||||
}
|
||||
cleanup, connURI := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
connData := map[string]interface{}{
|
||||
"uri": connURI,
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
@@ -31,10 +32,7 @@ func prepareTestContainer(t *testing.T) (func(), string) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL := fmt.Sprintf("root:secret@(localhost:%s)/mysql?parseTime=true", resource.GetPort("3306/tcp"))
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
nomadapi "github.com/hashicorp/nomad/api"
|
||||
"github.com/hashicorp/vault/helper/testhelpers"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -41,10 +42,7 @@ func prepareTestContainer(t *testing.T) (cleanup func(), retAddress string, noma
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retAddress = fmt.Sprintf("http://localhost:%s/", resource.GetPort("4646/tcp"))
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/lib/pq"
|
||||
@@ -34,10 +35,7 @@ func prepareTestContainer(t *testing.T) (cleanup func(), retURL string) {
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("postgres://postgres:secret@localhost:%s/database?sslmode=disable", resource.GetPort("5432/tcp"))
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical"
|
||||
"github.com/hashicorp/vault/sdk/helper/jsonutil"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
@@ -42,10 +43,7 @@ func prepareRabbitMQTestContainer(t *testing.T) (func(), string, int) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
port, _ := strconv.Atoi(resource.GetPort("15672/tcp"))
|
||||
|
||||
@@ -86,8 +86,11 @@ func TestGetOrDefaultRegion_ConfigFilesPreferredThird(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetOrDefaultRegion_ConfigFileUnfound(t *testing.T) {
|
||||
configuredRegion := ""
|
||||
if enabled := os.Getenv("VAULT_ACC"); enabled == "" {
|
||||
t.Skip()
|
||||
}
|
||||
|
||||
configuredRegion := ""
|
||||
cleanupEnv := setEnvRegion(t, "")
|
||||
defer cleanupEnv()
|
||||
|
||||
@@ -125,6 +128,10 @@ func TestGetOrDefaultRegion_EC2InstanceMetadataPreferredFourth(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetOrDefaultRegion_DefaultsToDefaultRegionWhenRegionUnavailable(t *testing.T) {
|
||||
if enabled := os.Getenv("VAULT_ACC"); enabled == "" {
|
||||
t.Skip()
|
||||
}
|
||||
|
||||
configuredRegion := ""
|
||||
|
||||
cleanupEnv := setEnvRegion(t, "")
|
||||
|
||||
105
helper/testhelpers/consul/consulhelper.go
Normal file
105
helper/testhelpers/consul/consulhelper.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package consul
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
consulapi "github.com/hashicorp/consul/api"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
func PrepareTestContainer(t *testing.T, version string) (cleanup func(), retAddress string, consulToken string) {
|
||||
t.Logf("preparing test container")
|
||||
consulToken = os.Getenv("CONSUL_HTTP_TOKEN")
|
||||
retAddress = os.Getenv("CONSUL_HTTP_ADDR")
|
||||
if retAddress != "" {
|
||||
return func() {}, retAddress, consulToken
|
||||
}
|
||||
|
||||
pool, err := dockertest.NewPool("")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to connect to docker: %s", err)
|
||||
}
|
||||
|
||||
config := `acl { enabled = true default_policy = "deny" }`
|
||||
if strings.HasPrefix(version, "1.3") {
|
||||
config = `datacenter = "test" acl_default_policy = "deny" acl_datacenter = "test" acl_master_token = "test"`
|
||||
}
|
||||
|
||||
dockerOptions := &dockertest.RunOptions{
|
||||
Repository: "consul",
|
||||
Tag: version,
|
||||
Cmd: []string{"agent", "-dev", "-client", "0.0.0.0", "-hcl", config},
|
||||
}
|
||||
resource, err := pool.RunWithOptions(dockerOptions)
|
||||
if err != nil {
|
||||
t.Fatalf("Could not start local Consul %s docker container: %s", version, err)
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retAddress = fmt.Sprintf("localhost:%s", resource.GetPort("8500/tcp"))
|
||||
|
||||
// exponential backoff-retry
|
||||
if err = pool.Retry(func() error {
|
||||
var err error
|
||||
consulConfig := consulapi.DefaultNonPooledConfig()
|
||||
consulConfig.Address = retAddress
|
||||
consul, err := consulapi.NewClient(consulConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// For version of Consul < 1.4
|
||||
if strings.HasPrefix(version, "1.3") {
|
||||
consulToken = "test"
|
||||
_, err = consul.KV().Put(&consulapi.KVPair{
|
||||
Key: "setuptest",
|
||||
Value: []byte("setuptest"),
|
||||
}, &consulapi.WriteOptions{
|
||||
Token: consulToken,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// New default behavior
|
||||
aclbootstrap, _, err := consul.ACL().Bootstrap()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
consulToken = aclbootstrap.SecretID
|
||||
t.Logf("Generated Master token: %s", consulToken)
|
||||
policy := &consulapi.ACLPolicy{
|
||||
Name: "test",
|
||||
Description: "test",
|
||||
Rules: `node_prefix "" {
|
||||
policy = "write"
|
||||
}
|
||||
|
||||
service_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
`,
|
||||
}
|
||||
q := &consulapi.WriteOptions{
|
||||
Token: consulToken,
|
||||
}
|
||||
_, _, err = consul.ACL().PolicyCreate(policy, q)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
cleanup()
|
||||
t.Fatalf("Could not connect to docker: %s", err)
|
||||
}
|
||||
return cleanup, retAddress, consulToken
|
||||
}
|
||||
25
helper/testhelpers/docker/testhelpers.go
Normal file
25
helper/testhelpers/docker/testhelpers.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package docker
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/mitchellh/go-testing-interface"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
func CleanupResource(t testing.T, pool *dockertest.Pool, resource *dockertest.Resource) {
|
||||
var err error
|
||||
for i := 0; i < 10; i++ {
|
||||
err = pool.Purge(resource)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
|
||||
if strings.Contains(err.Error(), "No such container") {
|
||||
return
|
||||
}
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
56
helper/testhelpers/mongodb/mongodbhelper.go
Normal file
56
helper/testhelpers/mongodb/mongodbhelper.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package mongodb
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/ory/dockertest"
|
||||
"gopkg.in/mgo.v2"
|
||||
)
|
||||
|
||||
func PrepareTestContainer(t *testing.T, version string) (cleanup func(), retURL string) {
|
||||
if os.Getenv("MONGODB_URL") != "" {
|
||||
return func() {}, os.Getenv("MONGODB_URL")
|
||||
}
|
||||
|
||||
pool, err := dockertest.NewPool("")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to connect to docker: %s", err)
|
||||
}
|
||||
|
||||
resource, err := pool.Run("mongo", "latest", []string{})
|
||||
if err != nil {
|
||||
t.Fatalf("Could not start local mongo docker container: %s", err)
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
addr := fmt.Sprintf("localhost:%s", resource.GetPort("27017/tcp"))
|
||||
retURL = "mongodb://" + addr
|
||||
|
||||
// exponential backoff-retry
|
||||
if err = pool.Retry(func() error {
|
||||
session, err := mgo.DialWithInfo(&mgo.DialInfo{
|
||||
Addrs: []string{addr},
|
||||
Timeout: 10 * time.Second,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Close()
|
||||
|
||||
session.SetSyncTimeout(1 * time.Minute)
|
||||
session.SetSocketTimeout(1 * time.Minute)
|
||||
return session.Ping()
|
||||
}); err != nil {
|
||||
cleanup()
|
||||
t.Fatalf("Could not connect to mongo docker container: %s", err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -70,7 +71,7 @@ func prepareCassandraTestContainer(t *testing.T) (func(), string) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
pool.Purge(resource)
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
setup := func() error {
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/ory/dockertest"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
"github.com/ory/dockertest"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
@@ -41,10 +41,7 @@ func prepareCockroachDBTestContainer(t *testing.T) (cleanup func(), retURL, tabl
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("postgresql://root@localhost:%s/?sslmode=disable", resource.GetPort("26257/tcp"))
|
||||
|
||||
@@ -9,13 +9,12 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
|
||||
"github.com/hashicorp/consul/api"
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/consul"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/helper/strutil"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
dockertest "gopkg.in/ory-am/dockertest.v2"
|
||||
)
|
||||
|
||||
type consulConf map[string]string
|
||||
@@ -25,12 +24,6 @@ var (
|
||||
testImagePull sync.Once
|
||||
)
|
||||
|
||||
func testHostIP() string {
|
||||
a := addrCount
|
||||
addrCount++
|
||||
return fmt.Sprintf("127.0.0.%d", a)
|
||||
}
|
||||
|
||||
func testConsulBackend(t *testing.T) *ConsulBackend {
|
||||
return testConsulBackendConfig(t, &consulConf{})
|
||||
}
|
||||
@@ -492,20 +485,17 @@ func TestConsul_serviceID(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConsulBackend(t *testing.T) {
|
||||
var token string
|
||||
consulToken := os.Getenv("CONSUL_HTTP_TOKEN")
|
||||
addr := os.Getenv("CONSUL_HTTP_ADDR")
|
||||
if addr == "" {
|
||||
cid, connURL := prepareTestContainer(t)
|
||||
if cid != "" {
|
||||
defer cleanupTestContainer(t, cid)
|
||||
}
|
||||
addr = connURL
|
||||
token = dockertest.ConsulACLMasterToken
|
||||
cleanup, connURL, token := consul.PrepareTestContainer(t, "1.4.0-rc1")
|
||||
defer cleanup()
|
||||
addr, consulToken = connURL, token
|
||||
}
|
||||
|
||||
conf := api.DefaultConfig()
|
||||
conf.Address = addr
|
||||
conf.Token = token
|
||||
conf.Token = consulToken
|
||||
client, err := api.NewClient(conf)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
@@ -533,20 +523,17 @@ func TestConsulBackend(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConsulHABackend(t *testing.T) {
|
||||
var token string
|
||||
consulToken := os.Getenv("CONSUL_HTTP_TOKEN")
|
||||
addr := os.Getenv("CONSUL_HTTP_ADDR")
|
||||
if addr == "" {
|
||||
cid, connURL := prepareTestContainer(t)
|
||||
if cid != "" {
|
||||
defer cleanupTestContainer(t, cid)
|
||||
}
|
||||
addr = connURL
|
||||
token = dockertest.ConsulACLMasterToken
|
||||
cleanup, connURL, token := consul.PrepareTestContainer(t, "1.4.0-rc1")
|
||||
defer cleanup()
|
||||
addr, consulToken = connURL, token
|
||||
}
|
||||
|
||||
conf := api.DefaultConfig()
|
||||
conf.Address = addr
|
||||
conf.Token = token
|
||||
conf.Token = consulToken
|
||||
client, err := api.NewClient(conf)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
@@ -589,61 +576,3 @@ func TestConsulHABackend(t *testing.T) {
|
||||
t.Fatalf("bad addr: %v", host)
|
||||
}
|
||||
}
|
||||
|
||||
func prepareTestContainer(t *testing.T) (cid dockertest.ContainerID, retAddress string) {
|
||||
if os.Getenv("CONSUL_HTTP_ADDR") != "" {
|
||||
return "", os.Getenv("CONSUL_HTTP_ADDR")
|
||||
}
|
||||
|
||||
// Without this the checks for whether the container has started seem to
|
||||
// never actually pass. There's really no reason to expose the test
|
||||
// containers, so don't.
|
||||
dockertest.BindDockerToLocalhost = "yep"
|
||||
|
||||
testImagePull.Do(func() {
|
||||
dockertest.Pull(dockertest.ConsulImageName)
|
||||
})
|
||||
|
||||
try := 0
|
||||
cid, connErr := dockertest.ConnectToConsul(60, 500*time.Millisecond, func(connAddress string) bool {
|
||||
try += 1
|
||||
// Build a client and verify that the credentials work
|
||||
config := api.DefaultConfig()
|
||||
config.Address = connAddress
|
||||
config.Token = dockertest.ConsulACLMasterToken
|
||||
client, err := api.NewClient(config)
|
||||
if err != nil {
|
||||
if try > 50 {
|
||||
panic(err)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
_, err = client.KV().Put(&api.KVPair{
|
||||
Key: "setuptest",
|
||||
Value: []byte("setuptest"),
|
||||
}, nil)
|
||||
if err != nil {
|
||||
if try > 50 {
|
||||
panic(err)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
retAddress = connAddress
|
||||
return true
|
||||
})
|
||||
|
||||
if connErr != nil {
|
||||
t.Fatalf("could not connect to consul: %v", connErr)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func cleanupTestContainer(t *testing.T, cid dockertest.ContainerID) {
|
||||
err := cid.KillRemove()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -72,10 +73,7 @@ func prepareCouchdbDBTestContainer(t *testing.T) (cleanup func(), retAddress, us
|
||||
|
||||
retAddress = "http://localhost:" + resource.GetPort("5984/tcp")
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local DynamoDB: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
// exponential backoff-retry, because the couchDB may not be able to accept
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/go-test/deep"
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -380,10 +381,7 @@ func prepareDynamoDBTestContainer(t *testing.T) (cleanup func(), retAddress stri
|
||||
|
||||
retAddress = "http://localhost:" + resource.GetPort("8000/tcp")
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local DynamoDB: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
// exponential backoff-retry, because the DynamoDB may not be able to accept
|
||||
|
||||
@@ -151,8 +151,18 @@ func prepareFoundationDBTestDirectory(t *testing.T, topDir string) (func(), stri
|
||||
clusterFile := tmpFile.Name()
|
||||
|
||||
cleanup := func() {
|
||||
pool.Purge(resource)
|
||||
var err error
|
||||
for i := 0; i < 10; i++ {
|
||||
err = pool.Purge(resource)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
}
|
||||
os.Remove(clusterFile)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
setup := func() error {
|
||||
|
||||
@@ -6,11 +6,12 @@ import (
|
||||
"testing"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/hashicorp/vault/sdk/physical"
|
||||
"github.com/ory/dockertest"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
func TestPostgreSQLBackend(t *testing.T) {
|
||||
@@ -100,10 +101,7 @@ func prepareTestContainer(t *testing.T, logger log.Logger) (cleanup func(), retC
|
||||
retConnString = fmt.Sprintf("postgres://postgres@localhost:%v/postgres?sslmode=disable", resource.GetPort("5432/tcp"))
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup docker Postgres: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
// Provide a test function to the pool to test if docker instance service is up.
|
||||
|
||||
@@ -26,6 +26,10 @@ func TestS3BackendSseKms(t *testing.T) {
|
||||
}
|
||||
|
||||
func DoS3BackendTest(t *testing.T, kmsKeyId string) {
|
||||
if enabled := os.Getenv("VAULT_ACC"); enabled == "" {
|
||||
t.Skip()
|
||||
}
|
||||
|
||||
credsConfig := &awsutil.CredentialsConfig{}
|
||||
|
||||
credsChain, err := credsConfig.GenerateCredentialChain()
|
||||
|
||||
@@ -2,15 +2,15 @@ package cassandra
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"fmt"
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
"github.com/hashicorp/errwrap"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
@@ -40,10 +40,7 @@ func prepareCassandraTestContainer(t *testing.T) (func(), string, int) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
port, _ := strconv.Atoi(resource.GetPort("9042/tcp"))
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/errwrap"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
influx "github.com/influxdata/influxdb/client/v2"
|
||||
"github.com/ory/dockertest"
|
||||
@@ -37,10 +38,7 @@ func prepareInfluxdbTestContainer(t *testing.T) (func(), string, int) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
port, _ := strconv.Atoi(resource.GetPort("8086/tcp"))
|
||||
|
||||
@@ -3,72 +3,21 @@ package mongodb
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
mgo "gopkg.in/mgo.v2"
|
||||
|
||||
"strings"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/mongodb"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
"github.com/ory/dockertest"
|
||||
"gopkg.in/mgo.v2"
|
||||
)
|
||||
|
||||
const testMongoDBRole = `{ "db": "admin", "roles": [ { "role": "readWrite" } ] }`
|
||||
|
||||
const testMongoDBWriteConcern = `{ "wmode": "majority", "wtimeout": 5000 }`
|
||||
|
||||
func prepareMongoDBTestContainer(t *testing.T) (cleanup func(), retURL string) {
|
||||
if os.Getenv("MONGODB_URL") != "" {
|
||||
return func() {}, os.Getenv("MONGODB_URL")
|
||||
}
|
||||
|
||||
pool, err := dockertest.NewPool("")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to connect to docker: %s", err)
|
||||
}
|
||||
|
||||
resource, err := pool.Run("mongo", "latest", []string{})
|
||||
if err != nil {
|
||||
t.Fatalf("Could not start local mongo docker container: %s", err)
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("mongodb://localhost:%s", resource.GetPort("27017/tcp"))
|
||||
|
||||
// exponential backoff-retry
|
||||
if err = pool.Retry(func() error {
|
||||
var err error
|
||||
dialInfo, err := parseMongoURL(retURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
session, err := mgo.DialWithInfo(dialInfo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Close()
|
||||
session.SetSyncTimeout(1 * time.Minute)
|
||||
session.SetSocketTimeout(1 * time.Minute)
|
||||
return session.Ping()
|
||||
}); err != nil {
|
||||
cleanup()
|
||||
t.Fatalf("Could not connect to mongo docker container: %s", err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func TestMongoDB_Initialize(t *testing.T) {
|
||||
cleanup, connURL := prepareMongoDBTestContainer(t)
|
||||
cleanup, connURL := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
|
||||
connectionDetails := map[string]interface{}{
|
||||
@@ -92,7 +41,7 @@ func TestMongoDB_Initialize(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMongoDB_CreateUser(t *testing.T) {
|
||||
cleanup, connURL := prepareMongoDBTestContainer(t)
|
||||
cleanup, connURL := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
|
||||
connectionDetails := map[string]interface{}{
|
||||
@@ -125,7 +74,7 @@ func TestMongoDB_CreateUser(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMongoDB_CreateUser_writeConcern(t *testing.T) {
|
||||
cleanup, connURL := prepareMongoDBTestContainer(t)
|
||||
cleanup, connURL := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
|
||||
connectionDetails := map[string]interface{}{
|
||||
@@ -159,7 +108,7 @@ func TestMongoDB_CreateUser_writeConcern(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMongoDB_RevokeUser(t *testing.T) {
|
||||
cleanup, connURL := prepareMongoDBTestContainer(t)
|
||||
cleanup, connURL := mongodb.PrepareTestContainer(t, "latest")
|
||||
defer cleanup()
|
||||
|
||||
connectionDetails := map[string]interface{}{
|
||||
|
||||
@@ -9,9 +9,9 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/vault/sdk/database/helper/credsutil"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
"github.com/hashicorp/vault/sdk/database/helper/credsutil"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
@@ -36,10 +36,7 @@ func prepareMySQLTestContainer(t *testing.T, legacy bool) (cleanup func(), retUR
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("root:secret@(localhost:%s)/mysql?parseTime=true", resource.GetPort("3306/tcp"))
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
@@ -34,10 +35,7 @@ func preparePostgresTestContainer(t *testing.T) (cleanup func(), retURL string)
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
err := pool.Purge(resource)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retURL = fmt.Sprintf("postgres://postgres:secret@localhost:%s/database?sslmode=disable", resource.GetPort("5432/tcp"))
|
||||
|
||||
@@ -1,29 +1,24 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
"github.com/hashicorp/vault/api"
|
||||
"github.com/hashicorp/vault/audit"
|
||||
auditFile "github.com/hashicorp/vault/builtin/audit/file"
|
||||
credUserpass "github.com/hashicorp/vault/builtin/credential/userpass"
|
||||
"github.com/hashicorp/vault/builtin/logical/database"
|
||||
"github.com/hashicorp/vault/builtin/logical/pki"
|
||||
"github.com/hashicorp/vault/builtin/logical/transit"
|
||||
"github.com/hashicorp/vault/helper/builtinplugins"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/http"
|
||||
"github.com/hashicorp/vault/sdk/logical"
|
||||
"github.com/hashicorp/vault/vault"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
|
||||
auditFile "github.com/hashicorp/vault/builtin/audit/file"
|
||||
credUserpass "github.com/hashicorp/vault/builtin/credential/userpass"
|
||||
vaulthttp "github.com/hashicorp/vault/http"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
@@ -67,7 +62,7 @@ func testVaultServerCoreConfig(t testing.TB, coreConfig *vault.CoreConfig) (*api
|
||||
t.Helper()
|
||||
|
||||
cluster := vault.NewTestCluster(t, coreConfig, &vault.TestClusterOptions{
|
||||
HandlerFunc: vaulthttp.Handler,
|
||||
HandlerFunc: http.Handler,
|
||||
})
|
||||
cluster.Start()
|
||||
|
||||
@@ -89,48 +84,6 @@ func testVaultServerCoreConfig(t testing.TB, coreConfig *vault.CoreConfig) (*api
|
||||
return client, unsealKeys, func() { defer cluster.Cleanup() }
|
||||
}
|
||||
|
||||
// testVaultServerBad creates an http server that returns a 500 on each request
|
||||
// to simulate failures.
|
||||
func testVaultServerBad(t testing.TB) (*api.Client, func()) {
|
||||
t.Helper()
|
||||
|
||||
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
server := &http.Server{
|
||||
Addr: "127.0.0.1:0",
|
||||
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
http.Error(w, "500 internal server error", http.StatusInternalServerError)
|
||||
}),
|
||||
ReadTimeout: 1 * time.Second,
|
||||
ReadHeaderTimeout: 1 * time.Second,
|
||||
WriteTimeout: 1 * time.Second,
|
||||
IdleTimeout: 1 * time.Second,
|
||||
}
|
||||
|
||||
go func() {
|
||||
if err := server.Serve(listener); err != nil && err != http.ErrServerClosed {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}()
|
||||
|
||||
client, err := api.NewClient(&api.Config{
|
||||
Address: "http://" + listener.Addr().String(),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return client, func() {
|
||||
ctx, done := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer done()
|
||||
|
||||
server.Shutdown(ctx)
|
||||
}
|
||||
}
|
||||
|
||||
// testPostgresDB creates a testing postgres database in a Docker container,
|
||||
// returning the connection URL and the associated closer function.
|
||||
func testPostgresDB(t testing.TB) (string, func()) {
|
||||
@@ -148,9 +101,7 @@ func testPostgresDB(t testing.TB) (string, func()) {
|
||||
}
|
||||
|
||||
cleanup := func() {
|
||||
if err := pool.Purge(resource); err != nil {
|
||||
t.Fatalf("failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
addr := fmt.Sprintf("postgres://postgres:secret@localhost:%s/database?sslmode=disable", resource.GetPort("5432/tcp"))
|
||||
|
||||
@@ -3,19 +3,24 @@ package transit
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
uuid "github.com/hashicorp/go-uuid"
|
||||
"github.com/hashicorp/go-uuid"
|
||||
"github.com/hashicorp/vault/api"
|
||||
"github.com/hashicorp/vault/helper/testhelpers/docker"
|
||||
"github.com/hashicorp/vault/sdk/helper/logging"
|
||||
"github.com/ory/dockertest"
|
||||
)
|
||||
|
||||
func TestTransitSeal_Lifecycle(t *testing.T) {
|
||||
if os.Getenv("VAULT_ACC") == "" {
|
||||
t.Skip()
|
||||
}
|
||||
cleanup, retAddress, token, mountPath, keyName, _ := prepareTestContainer(t)
|
||||
defer cleanup()
|
||||
|
||||
@@ -49,6 +54,9 @@ func TestTransitSeal_Lifecycle(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTransitSeal_TokenRenewal(t *testing.T) {
|
||||
if os.Getenv("VAULT_ACC") == "" {
|
||||
t.Skip()
|
||||
}
|
||||
cleanup, retAddress, token, mountPath, keyName, tlsConfig := prepareTestContainer(t)
|
||||
defer cleanup()
|
||||
|
||||
@@ -135,9 +143,7 @@ func prepareTestContainer(t *testing.T) (cleanup func(), retAddress, token, moun
|
||||
}
|
||||
|
||||
cleanup = func() {
|
||||
if err := pool.Purge(resource); err != nil {
|
||||
t.Fatalf("Failed to cleanup local container: %s", err)
|
||||
}
|
||||
docker.CleanupResource(t, pool, resource)
|
||||
}
|
||||
|
||||
retAddress = fmt.Sprintf("http://127.0.0.1:%s", resource.GetPort("8200/tcp"))
|
||||
|
||||
Reference in New Issue
Block a user