Skip to content

Commit 0c9a8ea

Browse files
CI: Run TLS authentication tests (#1037)
The provider supports the case where Grafana is proxied and has TLS cert auth in front of it This currently not tested in CI and that makes PRs like #1013 harder to test This adds a pipeline that checks that the feature works correctly
1 parent 012f849 commit 0c9a8ea

File tree

2 files changed

+148
-33
lines changed

2 files changed

+148
-33
lines changed

.drone/drone.jsonnet

Lines changed: 83 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ local images = {
88
grafanaEnterprise(version): 'grafana/grafana-enterprise:' + version,
99
};
1010

11-
local terraformPath = '/drone/terraform-provider-grafana/terraform';
11+
local workspace = '/drone/terraform-provider-grafana';
12+
local terraformPath = workspace + '/terraform';
1213
local installTerraformStep = {
1314
name: 'download-terraform',
1415
image: images.terraform,
@@ -51,7 +52,7 @@ local pipeline(name, steps, services=[]) = {
5152
type: 'docker',
5253
name: name,
5354
workspace: {
54-
path: '/drone/terraform-provider-grafana',
55+
path: workspace,
5556
},
5657
platform: {
5758
os: 'linux',
@@ -75,37 +76,45 @@ local onPromoteTrigger = {
7576
},
7677
};
7778

78-
local localTestPipeline(version, name='oss tests: %s' % version, makeTarget='testacc-oss', grafanaEnvMixin={}, grafanaImage=images.grafana) = pipeline(
79-
name,
80-
steps=[
81-
installTerraformStep,
82-
{
83-
name: 'tests',
84-
image: images.go,
85-
commands: [
86-
'sleep 5', // https://docs.drone.io/pipeline/docker/syntax/services/#initialization
87-
'make %s' % makeTarget,
88-
],
89-
environment: {
90-
GRAFANA_URL: 'http://grafana:3000',
91-
GRAFANA_AUTH: 'admin:admin',
92-
GRAFANA_VERSION: version,
93-
TF_ACC_TERRAFORM_PATH: terraformPath,
79+
local localTestPipeline(
80+
version,
81+
name='oss tests: %s' % version,
82+
makeTarget='testacc-oss',
83+
providerEnvMixin={},
84+
grafanaEnvMixin={},
85+
grafanaImage=images.grafana,
86+
) =
87+
pipeline(
88+
name,
89+
steps=[
90+
installTerraformStep,
91+
{
92+
name: 'tests',
93+
image: images.go,
94+
commands: [
95+
'sleep 5', // https://docs.drone.io/pipeline/docker/syntax/services/#initialization
96+
'make %s' % makeTarget,
97+
],
98+
environment: {
99+
GRAFANA_URL: 'http://grafana:3000',
100+
GRAFANA_AUTH: 'admin:admin',
101+
GRAFANA_VERSION: version,
102+
TF_ACC_TERRAFORM_PATH: terraformPath,
103+
} + providerEnvMixin,
94104
},
95-
},
96-
],
97-
services=[
98-
{
99-
name: 'grafana',
100-
image: grafanaImage(version),
101-
environment: {
102-
// Prevents error="database is locked"
103-
GF_SERVER_ROOT_URL: 'http://grafana:3000',
104-
GF_DATABASE_URL: 'sqlite3:///var/lib/grafana/grafana.db?cache=private&mode=rwc&_journal_mode=WAL',
105-
} + grafanaEnvMixin,
106-
},
107-
],
108-
);
105+
],
106+
services=[
107+
{
108+
name: 'grafana',
109+
image: grafanaImage(version),
110+
environment: {
111+
// Prevents error="database is locked"
112+
GF_SERVER_ROOT_URL: 'http://grafana:3000',
113+
GF_DATABASE_URL: 'sqlite3:///var/lib/grafana/grafana.db?cache=private&mode=rwc&_journal_mode=WAL',
114+
} + grafanaEnvMixin,
115+
},
116+
],
117+
);
109118

110119
[
111120
pipeline(
@@ -223,13 +232,55 @@ local localTestPipeline(version, name='oss tests: %s' % version, makeTarget='tes
223232
)
224233
+ withConcurrencyLimit(1),
225234

235+
// Grafana Enterprise tests
226236
localTestPipeline(
227237
grafanaVersions[0],
228238
name='enterprise tests',
229239
makeTarget='testacc-enterprise',
230240
grafanaEnvMixin={ GF_ENTERPRISE_LICENSE_TEXT: fromSecret(secrets.enterpriseLicense) },
231241
grafanaImage=images.grafanaEnterprise
232242
),
243+
244+
// Grafana OSS tests behind a TLS proxy tests
245+
// This is the equivalent of `make testacc-docker-tls`
246+
local certPath = workspace + '/testdata';
247+
localTestPipeline(
248+
grafanaVersions[0],
249+
name='tls proxy tests',
250+
providerEnvMixin={
251+
GRAFANA_URL: 'https://mtls-proxy:3001',
252+
GRAFANA_TLS_KEY: '%s/client.key' % certPath,
253+
GRAFANA_TLS_CERT: '%s/client.crt' % certPath,
254+
GRAFANA_CA_CERT: '%s/ca.crt' % certPath,
255+
}
256+
) + {
257+
steps: [
258+
{
259+
name: 'generate certs',
260+
image: images.go,
261+
commands: [
262+
'cd %s && go run . && ls -lah' % certPath,
263+
],
264+
depends_on: ['clone'],
265+
},
266+
{
267+
name: 'mtls-proxy',
268+
image: 'squareup/ghostunnel:v1.5.2',
269+
detach: true,
270+
command: [
271+
'server',
272+
'--listen=0.0.0.0:3001',
273+
'--target=grafana:3000',
274+
'--unsafe-target',
275+
'--key=%s/grafana.key' % certPath,
276+
'--cert=%s/grafana.crt' % certPath,
277+
'--cacert=%s/ca.crt' % certPath,
278+
'--allow-cn=client',
279+
],
280+
depends_on: ['generate certs'],
281+
},
282+
] + std.map(function(s) s { depends_on: ['generate certs'] }, super.steps),
283+
},
233284
]
234285
+ [localTestPipeline(version) for version in grafanaVersions]
235286
+ std.objectValuesAll(secrets)

.drone/drone.yml

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,70 @@ workspace:
203203
path: /drone/terraform-provider-grafana
204204
---
205205
kind: pipeline
206+
name: tls proxy tests
207+
platform:
208+
arch: amd64
209+
os: linux
210+
services:
211+
- environment:
212+
GF_DATABASE_URL: sqlite3:///var/lib/grafana/grafana.db?cache=private&mode=rwc&_journal_mode=WAL
213+
GF_SERVER_ROOT_URL: http://grafana:3000
214+
image: grafana/grafana:10.0.1
215+
name: grafana
216+
steps:
217+
- commands:
218+
- cd /drone/terraform-provider-grafana/testdata && go run . && ls -lah
219+
depends_on:
220+
- clone
221+
image: golang:1.20
222+
name: generate certs
223+
- command:
224+
- server
225+
- --listen=0.0.0.0:3001
226+
- --target=grafana:3000
227+
- --unsafe-target
228+
- --key=/drone/terraform-provider-grafana/testdata/grafana.key
229+
- --cert=/drone/terraform-provider-grafana/testdata/grafana.crt
230+
- --cacert=/drone/terraform-provider-grafana/testdata/ca.crt
231+
- --allow-cn=client
232+
depends_on:
233+
- generate certs
234+
detach: true
235+
image: squareup/ghostunnel:v1.5.2
236+
name: mtls-proxy
237+
- commands:
238+
- cp /bin/terraform /drone/terraform-provider-grafana/terraform
239+
- chmod a+x /drone/terraform-provider-grafana/terraform
240+
depends_on:
241+
- generate certs
242+
image: hashicorp/terraform
243+
name: download-terraform
244+
- commands:
245+
- sleep 5
246+
- make testacc-oss
247+
depends_on:
248+
- generate certs
249+
environment:
250+
GRAFANA_AUTH: admin:admin
251+
GRAFANA_CA_CERT: /drone/terraform-provider-grafana/testdata/ca.crt
252+
GRAFANA_TLS_CERT: /drone/terraform-provider-grafana/testdata/client.crt
253+
GRAFANA_TLS_KEY: /drone/terraform-provider-grafana/testdata/client.key
254+
GRAFANA_URL: https://mtls-proxy:3001
255+
GRAFANA_VERSION: 10.0.1
256+
TF_ACC_TERRAFORM_PATH: /drone/terraform-provider-grafana/terraform
257+
image: golang:1.20
258+
name: tests
259+
trigger:
260+
branch:
261+
- master
262+
event:
263+
- pull_request
264+
- push
265+
type: docker
266+
workspace:
267+
path: /drone/terraform-provider-grafana
268+
---
269+
kind: pipeline
206270
name: 'oss tests: 10.0.1'
207271
platform:
208272
arch: amd64
@@ -467,6 +531,6 @@ kind: secret
467531
name: grafana-sm-token
468532
---
469533
kind: signature
470-
hmac: 81801e1fc60765938704576fee2d11b1cbd8b2f98d17342c013e526b6da5de38
534+
hmac: 8b3b69d2646974fbaa2e07c2d895dc94ef715495e61a216ebc7dd67f81bfcf78
471535

472536
...

0 commit comments

Comments
 (0)