Skip to content

Commit 22cb2b8

Browse files
committed
Use Vault NewTestServer in suite_test.go
Signed-off-by: Somtochi Onyekwere <somtochionyekwere@gmail.com>
1 parent d49d7ca commit 22cb2b8

File tree

3 files changed

+53
-60
lines changed

3 files changed

+53
-60
lines changed

controllers/kustomization_decryptor_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,17 @@ func TestKustomizationReconciler_Decryptor(t *testing.T) {
6060

6161
cli, err := api.NewClient(api.DefaultConfig())
6262
g.Expect(err).NotTo(HaveOccurred(), "failed to create vault client")
63+
cli.SetToken(os.Getenv("VAULT_TOKEN"))
6364

65+
enginePath := "sops"
66+
err = cli.Sys().Mount(enginePath, &api.MountInput{
67+
Type: "transit",
68+
Description: "backend transit used by SOPS",
69+
})
70+
g.Expect(err).NotTo(HaveOccurred(), "failed to mount transit on engine path")
6471
// create a master key on the vault transit engine
6572
path, data := "sops/keys/firstkey", map[string]interface{}{"type": "rsa-4096"}
73+
6674
_, err = cli.Logical().Write(path, data)
6775
g.Expect(err).NotTo(HaveOccurred(), "failed to write key")
6876

@@ -127,7 +135,7 @@ func TestKustomizationReconciler_Decryptor(t *testing.T) {
127135
StringData: map[string]string{
128136
"pgp.asc": string(pgpKey),
129137
"age.agekey": string(ageKey),
130-
"sops.vault-token": "secret",
138+
"sops.vault-token": os.Getenv("VAULT_TOKEN"),
131139
},
132140
}
133141

controllers/suite_test.go

+34-37
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ import (
3737
"github.com/fluxcd/pkg/runtime/testenv"
3838
"github.com/fluxcd/pkg/testserver"
3939
sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
40-
"github.com/hashicorp/vault/api"
41-
"github.com/ory/dockertest"
40+
vaulttransit "github.com/hashicorp/vault/builtin/logical/transit"
41+
vaulthttp "github.com/hashicorp/vault/http"
42+
"github.com/hashicorp/vault/sdk/logical"
43+
"github.com/hashicorp/vault/vault"
4244
corev1 "k8s.io/api/core/v1"
4345
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4446
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -121,12 +123,12 @@ func runInContext(registerControllers func(*testenv.Environment), run func() err
121123
}
122124

123125
// Create a Vault test instance.
124-
pool, resource, err := createVaultTestInstance()
126+
cluster, err := createVaultTestInstance()
125127
if err != nil {
126128
panic(fmt.Sprintf("Failed to create Vault instance: %v", err))
127129
}
128130
defer func() {
129-
pool.Purge(resource)
131+
cluster.Cleanup()
130132
}()
131133

132134
runErr := run()
@@ -374,44 +376,39 @@ func createArtifact(artifactServer *testserver.ArtifactServer, fixture, path str
374376
return fmt.Sprintf("%x", h.Sum(nil)), nil
375377
}
376378

377-
func createVaultTestInstance() (*dockertest.Pool, *dockertest.Resource, error) {
378-
// uses a sensible default on windows (tcp/http) and linux/osx (socket)
379-
pool, err := dockertest.NewPool("")
380-
if err != nil {
381-
return nil, nil, fmt.Errorf("Could not connect to docker: %s", err)
379+
func createVaultTestInstance() (*vault.TestCluster, error) {
380+
// this is set to prevent "certificate signed by unknown authority" errors
381+
os.Setenv("VAULT_SKIP_VERIFY", "true")
382+
os.Setenv("VAULT_INSECURE", "true")
383+
t := &testing.T{}
384+
coreConfig := &vault.CoreConfig{
385+
LogicalBackends: map[string]logical.Factory{
386+
"transit": vaulttransit.Factory,
387+
},
382388
}
389+
cluster := vault.NewTestCluster(t, coreConfig, &vault.TestClusterOptions{
390+
HandlerFunc: vaulthttp.Handler,
391+
NumCores: 1,
392+
})
393+
cluster.Start()
394+
395+
if err := vault.TestWaitActiveWithError(cluster.Cores[0].Core); err != nil {
396+
return nil, fmt.Errorf("test core not active: %s", err)
397+
}
398+
399+
testClient := cluster.Cores[0].Client
383400

384-
// pulls an image, creates a container based on it and runs it
385-
resource, err := pool.Run("vault", vaultVersion, []string{"VAULT_DEV_ROOT_TOKEN_ID=secret"})
401+
status, err := testClient.Sys().InitStatus()
386402
if err != nil {
387-
return nil, nil, fmt.Errorf("Could not start resource: %s", err)
403+
return nil, fmt.Errorf("cannot checking Vault client status: %s", err)
404+
}
405+
if status != true {
406+
return nil, fmt.Errorf("waiting on Vault server to become ready")
388407
}
389408

390-
os.Setenv("VAULT_ADDR", fmt.Sprintf("http://127.0.0.1:%v", resource.GetPort("8200/tcp")))
391-
os.Setenv("VAULT_TOKEN", "secret")
409+
os.Setenv("VAULT_ADDR", testClient.Address())
410+
os.Setenv("VAULT_TOKEN", testClient.Token())
392411
// exponential backoff-retry, because the application in the container might not be ready to accept connections yet
393-
if err := pool.Retry(func() error {
394-
cli, err := api.NewClient(api.DefaultConfig())
395-
if err != nil {
396-
return fmt.Errorf("Cannot create Vault Client: %w", err)
397-
}
398-
status, err := cli.Sys().InitStatus()
399-
if err != nil {
400-
return err
401-
}
402-
if status != true {
403-
return fmt.Errorf("Vault not ready yet")
404-
}
405-
if err := cli.Sys().Mount("sops", &api.MountInput{
406-
Type: "transit",
407-
}); err != nil {
408-
return fmt.Errorf("Cannot create Vault Transit Engine: %w", err)
409-
}
410-
411-
return nil
412-
}); err != nil {
413-
return nil, nil, fmt.Errorf("Could not connect to docker: %w", err)
414-
}
415412

416-
return pool, resource, nil
413+
return cluster, nil
417414
}

internal/sops/hcvault/keysource_test.go

+10-22
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ var (
3939
// make use of the various `test*` variables.
4040
func TestMain(m *testing.M) {
4141
// this is set to prevent "certificate signed by unknown authority" errors
42+
os.Setenv("VAULT_SKIP_VERIFY", "true")
4243
os.Setenv("VAULT_INSECURE", "true")
4344
t := &testing.T{}
4445
coreConfig := &vault.CoreConfig{
@@ -56,32 +57,19 @@ func TestMain(m *testing.M) {
5657
logger.Fatalf("test core not active: %s", err)
5758
}
5859

59-
api.DefaultConfig()
6060
testClient := cluster.Cores[0].Client
61-
testVaultToken = testClient.Token()
62-
testVaultAddress = testClient.Address()
6361

64-
// Wait until Vault is ready to serve requests
65-
if err := func() error {
66-
cfg := api.DefaultConfig()
67-
cfg.Address = testVaultAddress
68-
cli, err := api.NewClient(cfg)
69-
cli.SetToken(testClient.Token())
70-
if err != nil {
71-
return fmt.Errorf("cannot create Vault client: %w", err)
72-
}
73-
status, err := cli.Sys().InitStatus()
74-
if err != nil {
75-
return err
76-
}
77-
if status != true {
78-
return fmt.Errorf("waiting on Vault server to become ready")
79-
}
80-
return nil
81-
}(); err != nil {
82-
logger.Fatalf("could not connect to local vault server: %s", err)
62+
status, err := testClient.Sys().InitStatus()
63+
if err != nil {
64+
logger.Fatalf("cannot checking Vault client status: %s", err)
65+
}
66+
if status != true {
67+
logger.Fatal("waiting on Vault server to become ready")
8368
}
8469

70+
testVaultToken = testClient.Token()
71+
testVaultAddress = testClient.Address()
72+
8573
if err := enableVaultTransit(testVaultAddress, testVaultToken, testEnginePath); err != nil {
8674
logger.Fatalf("could not enable Vault transit: %s", err)
8775
}

0 commit comments

Comments
 (0)