Skip to content

Commit da796be

Browse files
committed
Replace dockertest with hcvault NewTestCluster
Signed-off-by: Somtochi Onyekwere <[email protected]>
1 parent 2f454b4 commit da796be

File tree

5 files changed

+644
-106
lines changed

5 files changed

+644
-106
lines changed

controllers/kustomization_decryptor_test.go

Lines changed: 9 additions & 1 deletion
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

Lines changed: 34 additions & 37 deletions
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
}

go.mod

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ require (
2828
github.com/fluxcd/pkg/untar v0.1.0
2929
github.com/fluxcd/source-controller/api v0.24.4
3030
github.com/hashicorp/go-retryablehttp v0.7.1
31+
github.com/hashicorp/vault v1.10.3
3132
github.com/hashicorp/vault/api v1.5.0
33+
github.com/hashicorp/vault/sdk v0.4.2-0.20220429220057-bdb59a36e632
3234
github.com/onsi/gomega v1.19.0
3335
github.com/ory/dockertest v3.3.5+incompatible
3436
github.com/spf13/pflag v1.0.5
@@ -63,7 +65,11 @@ replace github.com/opencontainers/runc => github.com/opencontainers/runc v1.0.3
6365
replace github.com/opencontainers/image-spec => github.com/opencontainers/image-spec v1.0.2
6466

6567
require (
68+
cloud.google.com/go v0.100.2 // indirect
6669
cloud.google.com/go/compute v1.5.0 // indirect
70+
cloud.google.com/go/iam v0.3.0 // indirect
71+
cloud.google.com/go/kms v1.4.0 // indirect
72+
cloud.google.com/go/monitoring v1.5.0 // indirect
6773
github.com/Azure/azure-sdk-for-go v63.3.0+incompatible // indirect
6874
github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.1 // indirect
6975
github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.2.1 // indirect
@@ -79,14 +85,23 @@ require (
7985
github.com/Azure/go-autorest/logger v0.2.1 // indirect
8086
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
8187
github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect
88+
github.com/DataDog/datadog-go v3.2.0+incompatible // indirect
89+
github.com/Jeffail/gabs v1.1.1 // indirect
8290
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect
91+
github.com/Masterminds/goutils v1.1.0 // indirect
92+
github.com/Masterminds/semver v1.5.0 // indirect
93+
github.com/Masterminds/sprig v2.22.0+incompatible // indirect
8394
github.com/Microsoft/go-winio v0.5.2 // indirect
95+
github.com/NYTimes/gziphandler v1.1.1 // indirect
8496
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
8597
github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 // indirect
8698
github.com/PuerkitoBio/purell v1.1.1 // indirect
8799
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
100+
github.com/StackExchange/wmi v1.2.1 // indirect
101+
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f // indirect
88102
github.com/armon/go-metrics v0.3.10 // indirect
89103
github.com/armon/go-radix v1.0.0 // indirect
104+
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
90105
github.com/aws/aws-sdk-go v1.43.43 // indirect
91106
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.4 // indirect
92107
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.10 // indirect
@@ -96,26 +111,40 @@ require (
96111
github.com/aws/aws-sdk-go-v2/service/sso v1.11.4 // indirect
97112
github.com/aws/smithy-go v1.11.2 // indirect
98113
github.com/beorn7/perks v1.0.1 // indirect
114+
github.com/bgentry/speakeasy v0.1.0 // indirect
99115
github.com/blang/semver v3.5.1+incompatible // indirect
116+
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
100117
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
101118
github.com/cenkalti/backoff/v3 v3.2.2 // indirect
102119
github.com/cespare/xxhash/v2 v2.1.2 // indirect
103120
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect
121+
github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0 // indirect
122+
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible // indirect
123+
github.com/circonus-labs/circonusllhist v0.1.3 // indirect
104124
github.com/containerd/continuity v0.2.2 // indirect
105125
github.com/davecgh/go-spew v1.1.1 // indirect
126+
github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba // indirect
127+
github.com/digitalocean/godo v1.7.5 // indirect
128+
github.com/dnaeon/go-vcr v1.2.0 // indirect
106129
github.com/docker/go-connections v0.4.0 // indirect
107130
github.com/docker/go-units v0.4.0 // indirect
131+
github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74 // indirect
108132
github.com/emicklei/go-restful v2.9.5+incompatible // indirect
109133
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
134+
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
110135
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
111136
github.com/fatih/color v1.13.0 // indirect
137+
github.com/fatih/structs v1.1.0 // indirect
112138
github.com/fsnotify/fsnotify v1.5.1 // indirect
113-
github.com/go-errors/errors v1.0.1 // indirect
139+
github.com/go-errors/errors v1.4.1 // indirect
114140
github.com/go-logr/logr v1.2.3 // indirect
115141
github.com/go-logr/zapr v1.2.0 // indirect
142+
github.com/go-ole/go-ole v1.2.5 // indirect
116143
github.com/go-openapi/jsonpointer v0.19.5 // indirect
117144
github.com/go-openapi/jsonreference v0.19.5 // indirect
118145
github.com/go-openapi/swag v0.19.14 // indirect
146+
github.com/go-sql-driver/mysql v1.5.0 // indirect
147+
github.com/go-test/deep v1.0.8 // indirect
119148
github.com/gogo/protobuf v1.3.2 // indirect
120149
github.com/golang-jwt/jwt v3.2.1+incompatible // indirect
121150
github.com/golang-jwt/jwt/v4 v4.3.0 // indirect
@@ -125,42 +154,69 @@ require (
125154
github.com/google/btree v1.0.1 // indirect
126155
github.com/google/gnostic v0.5.7-v3refs // indirect
127156
github.com/google/go-cmp v0.5.8 // indirect
157+
github.com/google/go-metrics-stackdriver v0.2.0 // indirect
158+
github.com/google/go-querystring v1.1.0 // indirect
128159
github.com/google/gofuzz v1.2.0 // indirect
129160
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
130161
github.com/google/uuid v1.3.0 // indirect
131-
github.com/googleapis/gax-go/v2 v2.2.0 // indirect
162+
github.com/googleapis/gax-go/v2 v2.3.0 // indirect
163+
github.com/gophercloud/gophercloud v0.1.0 // indirect
132164
github.com/goware/prefixer v0.0.0-20160118172347-395022866408 // indirect
133165
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
134166
github.com/hashicorp/errwrap v1.1.0 // indirect
135167
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
168+
github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192 // indirect
136169
github.com/hashicorp/go-hclog v1.2.0 // indirect
137170
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
171+
github.com/hashicorp/go-kms-wrapping v0.7.0 // indirect
172+
github.com/hashicorp/go-kms-wrapping/entropy v0.1.0 // indirect
173+
github.com/hashicorp/go-memdb v1.3.2 // indirect
174+
github.com/hashicorp/go-msgpack v1.1.5 // indirect
138175
github.com/hashicorp/go-multierror v1.1.1 // indirect
139176
github.com/hashicorp/go-plugin v1.4.3 // indirect
177+
github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a // indirect
140178
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
179+
github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 // indirect
180+
github.com/hashicorp/go-secure-stdlib/base62 v0.1.2 // indirect
141181
github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 // indirect
142-
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.3 // indirect
182+
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.4 // indirect
183+
github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1 // indirect
143184
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
185+
github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1 // indirect
144186
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
145187
github.com/hashicorp/go-uuid v1.0.2 // indirect
146188
github.com/hashicorp/go-version v1.4.0 // indirect
147189
github.com/hashicorp/golang-lru v0.5.4 // indirect
148-
github.com/hashicorp/hcl v1.0.0 // indirect
149-
github.com/hashicorp/vault/sdk v0.4.1 // indirect
190+
github.com/hashicorp/hcl v1.0.1-vault-3 // indirect
191+
github.com/hashicorp/mdns v1.0.4 // indirect
192+
github.com/hashicorp/raft v1.3.3 // indirect
193+
github.com/hashicorp/raft-autopilot v0.1.3 // indirect
194+
github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c // indirect
195+
github.com/hashicorp/raft-snapshot v1.0.4 // indirect
196+
github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 // indirect
150197
github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 // indirect
151198
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef // indirect
199+
github.com/huandu/xstrings v1.3.2 // indirect
152200
github.com/imdario/mergo v0.3.12 // indirect
153201
github.com/inconshreveable/mousetrap v1.0.0 // indirect
202+
github.com/jarcoal/httpmock v1.0.7 // indirect
203+
github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f // indirect
204+
github.com/jefferai/jsonx v1.0.0 // indirect
154205
github.com/jmespath/go-jmespath v0.4.0 // indirect
155206
github.com/josharian/intern v1.0.0 // indirect
207+
github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f // indirect
156208
github.com/json-iterator/go v1.1.12 // indirect
209+
github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f // indirect
157210
github.com/kylelemons/godebug v1.1.0 // indirect
158211
github.com/lib/pq v1.10.5 // indirect
159212
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
213+
github.com/linode/linodego v0.7.1 // indirect
160214
github.com/mailru/easyjson v0.7.6 // indirect
161215
github.com/mattn/go-colorable v0.1.12 // indirect
162216
github.com/mattn/go-isatty v0.0.14 // indirect
163217
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
218+
github.com/miekg/dns v1.1.41 // indirect
219+
github.com/mitchellh/cli v1.1.2 // indirect
164220
github.com/mitchellh/copystructure v1.2.0 // indirect
165221
github.com/mitchellh/go-homedir v1.1.0 // indirect
166222
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
@@ -173,23 +229,45 @@ require (
173229
github.com/modern-go/reflect2 v1.0.2 // indirect
174230
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
175231
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
232+
github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 // indirect
176233
github.com/oklog/run v1.1.0 // indirect
177234
github.com/opencontainers/go-digest v1.0.0 // indirect
178235
github.com/opencontainers/image-spec v1.0.2 // indirect
179236
github.com/opencontainers/runc v1.1.0 // indirect
237+
github.com/oracle/oci-go-sdk v13.1.0+incompatible // indirect
238+
github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c // indirect
239+
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
180240
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
241+
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
181242
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
182-
github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect
243+
github.com/pires/go-proxyproto v0.6.1 // indirect
244+
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
183245
github.com/pkg/errors v0.9.1 // indirect
246+
github.com/pmezard/go-difflib v1.0.0 // indirect
247+
github.com/posener/complete v1.2.3 // indirect
248+
github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d // indirect
184249
github.com/prometheus/client_golang v1.12.1 // indirect
185250
github.com/prometheus/client_model v0.2.0 // indirect
186251
github.com/prometheus/common v0.32.1 // indirect
187252
github.com/prometheus/procfs v0.7.3 // indirect
253+
github.com/rboyer/safeio v0.2.1 // indirect
254+
github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 // indirect
188255
github.com/russross/blackfriday v1.5.2 // indirect
189256
github.com/ryanuber/go-glob v1.0.0 // indirect
257+
github.com/sasha-s/go-deadlock v0.2.0 // indirect
258+
github.com/sethvargo/go-limiter v0.7.1 // indirect
259+
github.com/shirou/gopsutil v3.21.5+incompatible // indirect
190260
github.com/sirupsen/logrus v1.8.1 // indirect
261+
github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d // indirect
191262
github.com/spf13/cobra v1.4.0 // indirect
263+
github.com/stretchr/testify v1.7.1 // indirect
264+
github.com/tencentcloud/tencentcloud-sdk-go v1.0.162 // indirect
265+
github.com/tklauser/go-sysconf v0.3.9 // indirect
266+
github.com/tklauser/numcpus v0.3.0 // indirect
267+
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c // indirect
268+
github.com/vmware/govmomi v0.18.0 // indirect
192269
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect
270+
go.etcd.io/bbolt v1.3.6 // indirect
193271
go.mozilla.org/gopgagent v0.0.0-20170926210634-4d7ea76ff71a // indirect
194272
go.opencensus.io v0.23.0 // indirect
195273
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
@@ -198,18 +276,20 @@ require (
198276
go.uber.org/zap v1.21.0 // indirect
199277
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
200278
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect
279+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
201280
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
202281
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
203282
golang.org/x/text v0.3.7 // indirect
204283
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
205284
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
206285
google.golang.org/api v0.74.0 // indirect
207286
google.golang.org/appengine v1.6.7 // indirect
208-
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf // indirect
287+
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 // indirect
209288
google.golang.org/grpc v1.45.0 // indirect
210289
google.golang.org/protobuf v1.28.0 // indirect
211290
gopkg.in/inf.v0 v0.9.1 // indirect
212291
gopkg.in/ini.v1 v1.66.4 // indirect
292+
gopkg.in/resty.v1 v1.12.0 // indirect
213293
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
214294
gopkg.in/urfave/cli.v1 v1.20.0 // indirect
215295
gopkg.in/yaml.v2 v2.4.0 // indirect

0 commit comments

Comments
 (0)