@@ -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}
0 commit comments