master
cpp 119 lines 3.91 KB
Raw
1 /*++
2
3 Copyright (c) Microsoft. All rights reserved.
4
5 Module Name:
6
7 WSLCE2EVolumeCreateTests.cpp
8
9 Abstract:
10
11 This file contains end-to-end tests for WSLC.
12 --*/
13
14 #include "precomp.h"
15 #include "windows/Common.h"
16 #include "VolumeModel.h"
17 #include "WSLCExecutor.h"
18 #include "WSLCE2EHelpers.h"
19
20 namespace WSLCE2ETests {
21 using namespace wsl::shared;
22 using namespace wsl::windows::wslc::models;
23
24 class WSLCE2EVolumeCreateTests
25 {
26 WSLC_TEST_CLASS(WSLCE2EVolumeCreateTests)
27
28 TEST_METHOD_SETUP(MethodSetup)
29 {
30 EnsureVolumeDoesNotExist(TestVolumeName);
31 return true;
32 }
33
34 TEST_CLASS_CLEANUP(ClassCleanup)
35 {
36 EnsureVolumeDoesNotExist(TestVolumeName);
37 return true;
38 }
39
40 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_HelpCommand)
41 {
42 auto result = RunWslc(L"volume create --help");
43 result.Verify({.Stderr = L"", .ExitCode = 0});
44 VERIFY_IS_FALSE(result.Stdout.value().empty());
45 }
46
47 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_EmptyName)
48 {
49 auto result = RunWslc(L"volume create");
50 result.Verify({.Stderr = L"", .ExitCode = 0});
51 auto volumeName = result.GetStdoutOneLine();
52 VERIFY_IS_FALSE(volumeName.empty());
53
54 auto deleteVolume = wil::scope_exit([&]() {
55 auto deleteResult = RunWslc(std::format(L"volume rm {}", volumeName));
56 deleteResult.Verify({.Stderr = L"", .ExitCode = 0});
57 });
58 VerifyVolumeIsListed(volumeName);
59 }
60
61 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_DefaultDriverIsGuest)
62 {
63 auto result = RunWslc(std::format(L"volume create {}", TestVolumeName));
64 result.Verify({.Stderr = L"", .ExitCode = 0});
65 VERIFY_ARE_EQUAL(TestVolumeName, result.GetStdoutOneLine());
66
67 VerifyVolumeIsListed(TestVolumeName);
68 auto inspect = InspectVolume(TestVolumeName);
69 VERIFY_ARE_EQUAL("guest", inspect.Driver);
70 }
71
72 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_ExplicitDriver_Success)
73 {
74 auto result = RunWslc(std::format(L"volume create --driver vhd --opt SizeBytes={} {}", DefaultVolumeSizeBytes, TestVolumeName));
75 result.Verify({.Stderr = L"", .ExitCode = 0});
76 VERIFY_ARE_EQUAL(TestVolumeName, result.GetStdoutOneLine());
77
78 VerifyVolumeIsListed(TestVolumeName);
79 auto inspect = InspectVolume(TestVolumeName);
80 VERIFY_ARE_EQUAL("vhd", inspect.Driver);
81 }
82
83 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_Vhd_MissingOpts_Fail)
84 {
85 auto result = RunWslc(std::format(L"volume create --driver vhd {}", TestVolumeName));
86 result.Verify({.Stdout = L"", .ExitCode = 1});
87 VERIFY_IS_TRUE(result.StderrContainsSubstring(L"Missing required option: 'SizeBytes'\r\nError code: E_INVALIDARG"));
88
89 VerifyVolumeIsNotListed(TestVolumeName);
90 }
91
92 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_InvalidDriver_Fail)
93 {
94 auto result =
95 RunWslc(std::format(L"volume create --driver invalid_driver --opt SizeBytes={} {}", DefaultVolumeSizeBytes, TestVolumeName));
96 result.Verify({.Stdout = L"", .ExitCode = 1});
97 VERIFY_IS_TRUE(result.StderrContainsSubstring(L"Unsupported volume type: 'invalid_driver'\r\nError code: E_INVALIDARG"));
98
99 VerifyVolumeIsNotListed(TestVolumeName);
100 }
101
102 WSLC_TEST_METHOD(WSLCE2E_Volume_Create_WithLabel_Success)
103 {
104 auto result = RunWslc(std::format(L"volume create --label A=1 --label B=2 {}", TestVolumeName));
105 result.Verify({.Stderr = L"", .ExitCode = 0});
106 VERIFY_ARE_EQUAL(TestVolumeName, result.GetStdoutOneLine());
107
108 VerifyVolumeIsListed(TestVolumeName);
109 auto inspect = InspectVolume(TestVolumeName);
110 VERIFY_IS_TRUE(inspect.Labels.has_value());
111 VERIFY_ARE_EQUAL("1", inspect.Labels->at("A"));
112 VERIFY_ARE_EQUAL("2", inspect.Labels->at("B"));
113 }
114
115 private:
116 const std::wstring TestVolumeName = L"wslc-e2e-volume-create";
117 const int DefaultVolumeSizeBytes = 3 * 1024 * 1024;
118 };
119 } // namespace WSLCE2ETests