24
25
TEST_CLASS_SETUP(ClassSetup)
26
{
27
- DeleteAllBuiltImages();
27
+ DeleteImagesWithRepositoryPrefix(c_builtImagePrefix);
28
EnsureImageIsLoaded(DebianTestImage());
29
return true;
30
}
31
32
TEST_CLASS_CLEANUP(ClassCleanup)
33
{
34
- DeleteAllBuiltImages();
34
+ DeleteImagesWithRepositoryPrefix(c_builtImagePrefix);
35
EnsureImageIsDeleted(DebianTestImage());
36
return true;
37
}
38
39
- TEST_METHOD_SETUP(MethodSetup)
40
- {
41
- DeleteAllBuiltImages();
42
- return true;
43
- }
39
+ // Each test owns and cleans up exactly the image(s) it builds via DeleteImageOnExit, so there is
40
+ // no per-method sweep. DeleteImagesWithRepositoryPrefix in the class setup/cleanup above is only a
41
+ // safety net for images left behind by a crashed run.
42
+ static constexpr auto c_builtImagePrefix = L"wslc-e2e-build-";
43
45
- TEST_METHOD_CLEANUP(MethodCleanup)
44
+ // Returns an RAII guard that best-effort deletes the given image when it goes out of scope. It is
45
+ // deliberately non-throwing (no VERIFY) because it may run while the stack unwinds after a test
46
+ // failure; the class-level prune is the authoritative cleanup.
47
+ static auto DeleteImageOnExit(const TestImage& image)
48
{
47
- DeleteAllBuiltImages();
48
- return true;
49
+ return wil::scope_exit([image]() {
50
+ try
51
+ {
52
+ RunWslc(std::format(L"image delete --force {}", image.NameAndTag()));
53
+ }
54
+ CATCH_LOG()
55
+ });
56
}
57
58
WSLC_TEST_METHOD(WSLCE2E_Image_Build_EmptyContextDirectory_Success)
59
{
60
+ auto imageCleanup = DeleteImageOnExit(BuiltImage);
61
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-empty-context";
62
auto cleanup = SetupTestDirectory(testRoot);
63
81
82
WSLC_TEST_METHOD(WSLCE2E_Image_Build_BuildArgsFileAndMultipleTags_Success)
83
{
84
+ auto imageCleanup1 = DeleteImageOnExit(BuiltImageTag1);
85
+ auto imageCleanup2 = DeleteImageOnExit(BuiltImageTag2);
86
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-args-tags";
87
auto cleanup = SetupTestDirectory(testRoot);
88
134
{
135
SKIP_TEST_UNSTABLE(); // TODO: Enable when a private image source is available.
136
137
+ auto imageCleanup = DeleteImageOnExit(BuiltImagePull);
138
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-pull";
139
auto cleanup = SetupTestDirectory(testRoot);
140
159
160
WSLC_TEST_METHOD(WSLCE2E_Image_Build_Target_Success)
161
{
162
+ auto imageCleanup = DeleteImageOnExit(BuiltImageTarget);
163
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-target";
164
auto cleanup = SetupTestDirectory(testRoot);
165
196
197
WSLC_TEST_METHOD(WSLCE2E_Image_Build_Label_Success)
198
{
199
+ auto imageCleanup = DeleteImageOnExit(BuiltImageLabel);
200
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-label";
201
auto cleanup = SetupTestDirectory(testRoot);
202
232
233
WSLC_TEST_METHOD(WSLCE2E_Image_Build_LabelOverridesDockerfile_Success)
234
{
235
+ auto imageCleanup = DeleteImageOnExit(BuiltImageLabelOverride);
236
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-label-override";
237
auto cleanup = SetupTestDirectory(testRoot);
238
263
264
WSLC_TEST_METHOD(WSLCE2E_Image_Build_DockerfileInContextDir_Success)
265
{
266
+ auto imageCleanup = DeleteImageOnExit(BuiltImageDockerfile);
267
BuildFromContextFile(L"Dockerfile", BuiltImageDockerfile);
268
}
269
270
WSLC_TEST_METHOD(WSLCE2E_Image_Build_ContainerfileInContextDir_Success)
271
{
272
+ auto imageCleanup = DeleteImageOnExit(BuiltImageContainerfile);
273
BuildFromContextFile(L"Containerfile", BuiltImageContainerfile);
274
}
275
323
324
WSLC_TEST_METHOD(WSLCE2E_Image_Build_NoCache_Success)
325
{
326
+ auto imageCleanup = DeleteImageOnExit(BuiltImageNoCache);
327
auto testRoot = std::filesystem::current_path() / L"wslc-e2e-build-no-cache";
328
auto cleanup = SetupTestDirectory(testRoot);
329
389
VERIFY_ARE_EQUAL(1u, inspectData.RepoTags.value().size());
390
VERIFY_ARE_EQUAL(image.NameAndTag(), wsl::shared::string::MultiByteToWide(inspectData.RepoTags.value()[0]));
391
}
375
-
376
- void DeleteAllBuiltImages()
377
- {
378
- EnsureImageIsDeleted(BuiltImage);
379
- EnsureImageIsDeleted(BuiltImageTag1);
380
- EnsureImageIsDeleted(BuiltImageTag2);
381
- EnsureImageIsDeleted(BuiltImagePull);
382
- EnsureImageIsDeleted(BuiltImageTarget);
383
- EnsureImageIsDeleted(BuiltImageDockerfile);
384
- EnsureImageIsDeleted(BuiltImageContainerfile);
385
- EnsureImageIsDeleted(BuiltImageNoCache);
386
- EnsureImageIsDeleted(BuiltImageLabel);
387
- EnsureImageIsDeleted(BuiltImageLabelOverride);
388
- }
392
};
393
} // namespace WSLCE2ETests