Skip to content

Commit 39a8f39

Browse files
committed
add test helpers for asserting env
1 parent 71fb950 commit 39a8f39

File tree

1 file changed

+52
-85
lines changed

1 file changed

+52
-85
lines changed

internal/provider/cached_image_resource_test.go

Lines changed: 52 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,14 @@ func TestAccCachedImageResource(t *testing.T) {
4040
},
4141
assertEnv: func(t *testing.T, deps testDependencies) resource.TestCheckFunc {
4242
return resource.ComposeAggregateTestCheckFunc(
43-
// Check that the environment variables are set correctly.
44-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.0", fmt.Sprintf("ENVBUILDER_CACHE_REPO=%s", deps.CacheRepo)),
45-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.1", fmt.Sprintf("ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH=%s", deps.Repo.Key)),
46-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.2", fmt.Sprintf("ENVBUILDER_GIT_URL=%s", deps.Repo.URL)),
47-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.3", "ENVBUILDER_REMOTE_REPO_BUILD_MODE=true"),
48-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.4", "ENVBUILDER_VERBOSE=true"),
49-
// Check that the extra environment variables are set correctly.
50-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.5", "FOO=bar\nbaz"),
51-
// We should not have any other environment variables set.
52-
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "env.6"),
53-
54-
// Check that the same values are set in env_map.
55-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_CACHE_REPO", deps.CacheRepo),
56-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key),
57-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_URL", deps.Repo.URL),
58-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true"),
59-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_VERBOSE", "true"),
60-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.FOO", "bar\nbaz"),
43+
assertEnv(t,
44+
"ENVBUILDER_CACHE_REPO", deps.CacheRepo,
45+
"ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key,
46+
"ENVBUILDER_GIT_URL", deps.Repo.URL,
47+
"ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true",
48+
"ENVBUILDER_VERBOSE", "true",
49+
"FOO", "bar\nbaz",
50+
),
6151
)
6252
},
6353
},
@@ -78,24 +68,14 @@ RUN date > /date.txt`,
7868
},
7969
assertEnv: func(t *testing.T, deps testDependencies) resource.TestCheckFunc {
8070
return resource.ComposeAggregateTestCheckFunc(
81-
// Check that the environment variables are set correctly.
82-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.0", fmt.Sprintf("ENVBUILDER_CACHE_REPO=%s", deps.CacheRepo)),
83-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.1", fmt.Sprintf("ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH=%s", deps.Repo.Key)),
84-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.2", fmt.Sprintf("ENVBUILDER_GIT_URL=%s", deps.Repo.URL)),
85-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.3", "ENVBUILDER_REMOTE_REPO_BUILD_MODE=true"),
86-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.4", "ENVBUILDER_VERBOSE=true"),
87-
// Check that the extra environment variables are set correctly.
88-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.5", "FOO=bar\nbaz"),
89-
// We should not have any other environment variables set.
90-
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "env.6"),
91-
92-
// Check that the same values are set in env_map.
93-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_CACHE_REPO", deps.CacheRepo),
94-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key),
95-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_URL", deps.Repo.URL),
96-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true"),
97-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_VERBOSE", "true"),
98-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.FOO", "bar\nbaz"),
71+
assertEnv(t,
72+
"ENVBUILDER_CACHE_REPO", deps.CacheRepo,
73+
"ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key,
74+
"ENVBUILDER_GIT_URL", deps.Repo.URL,
75+
"ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true",
76+
"ENVBUILDER_VERBOSE", "true",
77+
"FOO", "bar\nbaz",
78+
),
9979
)
10080
},
10181
},
@@ -118,30 +98,17 @@ RUN date > /date.txt`,
11898
},
11999
assertEnv: func(t *testing.T, deps testDependencies) resource.TestCheckFunc {
120100
return resource.ComposeAggregateTestCheckFunc(
121-
// Check that the environment variables are set correctly.
122-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.0", fmt.Sprintf("ENVBUILDER_CACHE_REPO=%s", deps.CacheRepo)),
123-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.1", fmt.Sprintf("ENVBUILDER_DEVCONTAINER_DIR=%s", deps.ExtraEnv["ENVBUILDER_DEVCONTAINER_DIR"])),
124-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.2", fmt.Sprintf("ENVBUILDER_DEVCONTAINER_JSON_PATH=%s", deps.ExtraEnv["ENVBUILDER_DEVCONTAINER_JSON_PATH"])),
125-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.3", fmt.Sprintf("ENVBUILDER_DOCKERFILE_PATH=%s", deps.ExtraEnv["ENVBUILDER_DOCKERFILE_PATH"])),
126-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.4", fmt.Sprintf("ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH=%s", deps.Repo.Key)),
127-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.5", fmt.Sprintf("ENVBUILDER_GIT_URL=%s", deps.Repo.URL)),
128-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.6", "ENVBUILDER_REMOTE_REPO_BUILD_MODE=true"),
129-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.7", "ENVBUILDER_VERBOSE=true"),
130-
// Check that the extra environment variables are set correctly.
131-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.8", "FOO=bar\nbaz"),
132-
// We should not have any other environment variables set.
133-
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "env.9"),
134-
135-
// Check that the same values are set in env_map.
136-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_CACHE_REPO", deps.CacheRepo),
137-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_DEVCONTAINER_DIR", deps.ExtraEnv["ENVBUILDER_DEVCONTAINER_DIR"]),
138-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_DEVCONTAINER_JSON_PATH", deps.ExtraEnv["ENVBUILDER_DEVCONTAINER_JSON_PATH"]),
139-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_DOCKERFILE_PATH", deps.ExtraEnv["ENVBUILDER_DOCKERFILE_PATH"]),
140-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key),
141-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_URL", deps.Repo.URL),
142-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true"),
143-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_VERBOSE", "true"),
144-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.FOO", "bar\nbaz"),
101+
assertEnv(t,
102+
"ENVBUILDER_CACHE_REPO", deps.CacheRepo,
103+
"ENVBUILDER_DEVCONTAINER_DIR", "path/to/.devcontainer",
104+
"ENVBUILDER_DEVCONTAINER_JSON_PATH", "path/to/.devcontainer/devcontainer.json",
105+
"ENVBUILDER_DOCKERFILE_PATH", "path/to/.devcontainer/Dockerfile",
106+
"ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key,
107+
"ENVBUILDER_GIT_URL", deps.Repo.URL,
108+
"ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true",
109+
"ENVBUILDER_VERBOSE", "true",
110+
"FOO", "bar\nbaz",
111+
),
145112
)
146113
},
147114
},
@@ -170,7 +137,6 @@ RUN date > /date.txt`,
170137
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "image", deps.BuilderImage),
171138
// Inputs should still be present.
172139
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "cache_repo", deps.CacheRepo),
173-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "extra_env.FOO", "bar\nbaz"),
174140
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "git_url", deps.Repo.URL),
175141
// Should be empty
176142
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "git_username"),
@@ -192,7 +158,6 @@ RUN date > /date.txt`,
192158
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "image", deps.BuilderImage),
193159
// Inputs should still be present.
194160
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "cache_repo", deps.CacheRepo),
195-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "extra_env.FOO", "bar\nbaz"),
196161
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "git_url", deps.Repo.URL),
197162
// Should be empty
198163
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "git_username"),
@@ -212,7 +177,6 @@ RUN date > /date.txt`,
212177
Check: resource.ComposeAggregateTestCheckFunc(
213178
// Inputs should still be present.
214179
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "cache_repo", deps.CacheRepo),
215-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "extra_env.FOO", "bar\nbaz"),
216180
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "git_url", deps.Repo.URL),
217181
// Should be empty
218182
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "git_username"),
@@ -243,28 +207,31 @@ RUN date > /date.txt`,
243207
}
244208
}
245209

246-
// assertEnv is a test helper that checks the environment variables set on the
247-
// cached image resource based on the provided test dependencies.
248-
func assertEnv(t *testing.T, deps testDependencies) resource.TestCheckFunc {
210+
// assertEnv is a test helper that checks the environment variables, in order,
211+
// on both the env and env_map attributes of the cached image resource.
212+
func assertEnv(t *testing.T, kvs ...string) resource.TestCheckFunc {
249213
t.Helper()
250-
return resource.ComposeAggregateTestCheckFunc(
251-
// Check that the environment variables are set correctly.
252-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.0", fmt.Sprintf("ENVBUILDER_CACHE_REPO=%s", deps.CacheRepo)),
253-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.1", fmt.Sprintf("ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH=%s", deps.Repo.Key)),
254-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.2", fmt.Sprintf("ENVBUILDER_GIT_URL=%s", deps.Repo.URL)),
255-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.3", "ENVBUILDER_REMOTE_REPO_BUILD_MODE=true"),
256-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.4", "ENVBUILDER_VERBOSE=true"),
257-
// Check that the extra environment variables are set correctly.
258-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env.5", "FOO=bar\nbaz"),
259-
// We should not have any other environment variables set.
260-
resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", "env.6"),
214+
if len(kvs)%2 != 0 {
215+
t.Fatalf("assertEnv: expected an even number of key-value pairs, got %d", len(kvs))
216+
}
217+
218+
funcs := make([]resource.TestCheckFunc, 0)
219+
for i := 0; i < len(kvs); i += 2 {
220+
resKey := fmt.Sprintf("env.%d", len(funcs))
221+
resVal := fmt.Sprintf("%s=%s", kvs[i], kvs[i+1])
222+
fn := resource.TestCheckResourceAttr("envbuilder_cached_image.test", resKey, resVal)
223+
funcs = append(funcs, fn)
224+
}
225+
226+
lastKey := fmt.Sprintf("env.%d", len(funcs))
227+
lastFn := resource.TestCheckNoResourceAttr("envbuilder_cached_image.test", lastKey)
228+
funcs = append(funcs, lastFn)
229+
230+
for i := 0; i < len(kvs); i += 2 {
231+
resKey := fmt.Sprintf("env_map.%s", kvs[i])
232+
fn := resource.TestCheckResourceAttr("envbuilder_cached_image.test", resKey, kvs[i+1])
233+
funcs = append(funcs, fn)
234+
}
261235

262-
// Check that the same values are set in env_map.
263-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_CACHE_REPO", deps.CacheRepo),
264-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_SSH_PRIVATE_KEY_PATH", deps.Repo.Key),
265-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_GIT_URL", deps.Repo.URL),
266-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_REMOTE_REPO_BUILD_MODE", "true"),
267-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.ENVBUILDER_VERBOSE", "true"),
268-
resource.TestCheckResourceAttr("envbuilder_cached_image.test", "env_map.FOO", "bar\nbaz"),
269-
)
236+
return resource.ComposeAggregateTestCheckFunc(funcs...)
270237
}

0 commit comments

Comments
 (0)