Skip to content

Commit 336e2a5

Browse files
committed
add minVersion constraint to integration tests, test in parallel
1 parent a4fac9b commit 336e2a5

File tree

3 files changed

+100
-11
lines changed

3 files changed

+100
-11
lines changed

integration/integration_test.go

+35-2
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,19 @@ func TestIntegration(t *testing.T) {
5757
require.NoError(t, err, "invalid value specified for timeout")
5858
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeoutMins)*time.Minute)
5959
t.Cleanup(cancel)
60+
ctrID := setup(ctx, t, t.Name(), coderImg, coderVersion)
6061

6162
for _, tt := range []struct {
6263
// Name of the folder under `integration/` containing a test template
6364
name string
65+
// Minimum coder version for which to run this test
66+
minVersion string
6467
// map of string to regex to be passed to assertOutput()
6568
expectedOutput map[string]string
6669
}{
6770
{
68-
name: "test-data-source",
71+
name: "test-data-source",
72+
minVersion: "v0.0.0",
6973
expectedOutput: map[string]string{
7074
"provisioner.arch": runtime.GOARCH,
7175
"provisioner.id": `[a-zA-Z0-9-]+`,
@@ -86,6 +90,31 @@ func TestIntegration(t *testing.T) {
8690
"workspace.template_name": `test-data-source`,
8791
"workspace.template_version": `.+`,
8892
"workspace.transition": `start`,
93+
},
94+
},
95+
{
96+
name: "workspace-owner",
97+
minVersion: "v2.12.0",
98+
expectedOutput: map[string]string{
99+
"provisioner.arch": runtime.GOARCH,
100+
"provisioner.id": `[a-zA-Z0-9-]+`,
101+
"provisioner.os": runtime.GOOS,
102+
"workspace.access_port": `\d+`,
103+
"workspace.access_url": `https?://\D+:\d+`,
104+
"workspace.id": `[a-zA-z0-9-]+`,
105+
"workspace.name": ``,
106+
"workspace.owner": `testing`,
107+
"workspace.owner_email": `testing@coder\.com`,
108+
"workspace.owner_groups": `\[\]`,
109+
"workspace.owner_id": `[a-zA-Z0-9]+`,
110+
"workspace.owner_name": `default`,
111+
"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
112+
"workspace.owner_session_token": `[a-zA-Z0-9-]+`,
113+
"workspace.start_count": `1`,
114+
"workspace.template_id": `[a-zA-Z0-9-]+`,
115+
"workspace.template_name": `workspace-owner`,
116+
"workspace.template_version": `.+`,
117+
"workspace.transition": `start`,
89118
"workspace_owner.email": `testing@coder\.com`,
90119
"workspace_owner.full_name": `default`,
91120
"workspace_owner.groups": `\[\]`,
@@ -98,9 +127,13 @@ func TestIntegration(t *testing.T) {
98127
},
99128
},
100129
} {
130+
tt := tt
101131
t.Run(tt.name, func(t *testing.T) {
132+
t.Parallel()
133+
if coderVersion != "latest" && semver.Compare(coderVersion, tt.minVersion) < 0 {
134+
t.Skipf("skipping due to minVersion %q < %q", tt.minVersion, coderVersion)
135+
}
102136
// Given: we have an existing Coder deployment running locally
103-
ctrID := setup(ctx, t, tt.name, coderImg, coderVersion)
104137
// Import named template
105138

106139
// NOTE: Template create command was deprecated after this version

integration/test-data-source/main.tf

-9
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,6 @@ locals {
3838
"workspace.template_name" : data.coder_workspace.me.template_name,
3939
"workspace.template_version" : data.coder_workspace.me.template_version,
4040
"workspace.transition" : data.coder_workspace.me.transition,
41-
"workspace_owner.email" : data.coder_workspace_owner.me.email,
42-
"workspace_owner.full_name" : data.coder_workspace_owner.me.full_name,
43-
"workspace_owner.groups" : jsonencode(data.coder_workspace_owner.me.groups),
44-
"workspace_owner.id" : data.coder_workspace_owner.me.id,
45-
"workspace_owner.name" : data.coder_workspace_owner.me.name,
46-
"workspace_owner.oidc_access_token" : data.coder_workspace_owner.me.oidc_access_token,
47-
"workspace_owner.session_token" : data.coder_workspace_owner.me.session_token,
48-
"workspace_owner.ssh_private_key" : data.coder_workspace_owner.me.ssh_private_key,
49-
"workspace_owner.ssh_public_key" : data.coder_workspace_owner.me.ssh_public_key,
5041
}
5142
}
5243

integration/workspace-owner/main.tf

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
terraform {
2+
required_providers {
3+
coder = {
4+
source = "coder/coder"
5+
}
6+
local = {
7+
source = "hashicorp/local"
8+
}
9+
}
10+
}
11+
12+
// TODO: test coder_external_auth and coder_git_auth
13+
// data coder_external_auth "me" {}
14+
// data coder_git_auth "me" {}
15+
data "coder_provisioner" "me" {}
16+
data "coder_workspace" "me" {}
17+
data "coder_workspace_owner" "me" {}
18+
19+
locals {
20+
# NOTE: these must all be strings in the output
21+
output = {
22+
"provisioner.arch" : data.coder_provisioner.me.arch,
23+
"provisioner.id" : data.coder_provisioner.me.id,
24+
"provisioner.os" : data.coder_provisioner.me.os,
25+
"workspace.access_port" : tostring(data.coder_workspace.me.access_port),
26+
"workspace.access_url" : data.coder_workspace.me.access_url,
27+
"workspace.id" : data.coder_workspace.me.id,
28+
"workspace.name" : data.coder_workspace.me.name,
29+
"workspace.owner" : data.coder_workspace.me.owner,
30+
"workspace.owner_email" : data.coder_workspace.me.owner_email,
31+
"workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
32+
"workspace.owner_id" : data.coder_workspace.me.owner_id,
33+
"workspace.owner_name" : data.coder_workspace.me.owner_name,
34+
"workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
35+
"workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
36+
"workspace.start_count" : tostring(data.coder_workspace.me.start_count),
37+
"workspace.template_id" : data.coder_workspace.me.template_id,
38+
"workspace.template_name" : data.coder_workspace.me.template_name,
39+
"workspace.template_version" : data.coder_workspace.me.template_version,
40+
"workspace.transition" : data.coder_workspace.me.transition,
41+
"workspace_owner.email" : data.coder_workspace_owner.me.email,
42+
"workspace_owner.full_name" : data.coder_workspace_owner.me.full_name,
43+
"workspace_owner.groups" : jsonencode(data.coder_workspace_owner.me.groups),
44+
"workspace_owner.id" : data.coder_workspace_owner.me.id,
45+
"workspace_owner.name" : data.coder_workspace_owner.me.name,
46+
"workspace_owner.oidc_access_token" : data.coder_workspace_owner.me.oidc_access_token,
47+
"workspace_owner.session_token" : data.coder_workspace_owner.me.session_token,
48+
"workspace_owner.ssh_private_key" : data.coder_workspace_owner.me.ssh_private_key,
49+
"workspace_owner.ssh_public_key" : data.coder_workspace_owner.me.ssh_public_key,
50+
}
51+
}
52+
53+
variable "output_path" {
54+
type = string
55+
}
56+
57+
resource "local_file" "output" {
58+
filename = var.output_path
59+
content = jsonencode(local.output)
60+
}
61+
62+
output "output" {
63+
value = local.output
64+
sensitive = true
65+
}

0 commit comments

Comments
 (0)