@samitouri / QOSAMI-WSL / commits / bf3a2ef5

CLI: Add system command (#40438)

David Bennett committed May 11, 2026 at 11:22 UTC bf3a2ef5ee00bd7d902cbf070c5fd272d2ded36e
9 files changed +161 -55
localization/strings/en-US/Resources.resw
+6
@@ -2461,6 +2461,12 @@ For privacy information about this product please visit https://aka.ms/privacy.<
2461 <data name="WSLCCLI_RegistryCommandLongDesc" xml:space="preserve">
2462 <value>Manage registry credentials, including logging in and out of container registries.</value>
2463 </data>
2464 + <data name="WSLCCLI_SystemCommandDesc" xml:space="preserve">
2465 + <value>System-level commands</value>
2466 + </data>
2467 + <data name="WSLCCLI_SystemCommandLongDesc" xml:space="preserve">
2468 + <value>System-level management commands.</value>
2469 + </data>
2470 <data name="WSLCCLI_ImageTagDesc" xml:space="preserve">
2471 <value>Tag an image.</value>
2472 </data>
src/windows/wslc/commands/RootCommand.cpp
+2 -2
@@ -17,8 +17,8 @@ Abstract:
17 #include "ContainerCommand.h"
18 #include "ImageCommand.h"
19 #include "RegistryCommand.h"
20 -#include "SessionCommand.h"
20 #include "SettingsCommand.h"
21 +#include "SystemCommand.h"
22 #include "InspectCommand.h"
23 #include "VersionCommand.h"
24 #include "VolumeCommand.h"
@@ -33,8 +33,8 @@ std::vector<std::unique_ptr<Command>> RootCommand::GetCommands() const
33 commands.push_back(std::make_unique<ContainerCommand>(FullName()));
34 commands.push_back(std::make_unique<ImageCommand>(FullName()));
35 commands.push_back(std::make_unique<RegistryCommand>(FullName()));
36 - commands.push_back(std::make_unique<SessionCommand>(FullName()));
36 commands.push_back(std::make_unique<SettingsCommand>(FullName()));
37 + commands.push_back(std::make_unique<SystemCommand>(FullName()));
38 commands.push_back(std::make_unique<VolumeCommand>(FullName()));
39 commands.push_back(std::make_unique<ContainerAttachCommand>(FullName()));
40 commands.push_back(std::make_unique<ImageBuildCommand>(FullName()));
src/windows/wslc/commands/SystemCommand.cpp new
+48
@@ -0,0 +1,48 @@
1 +/*++
2 +
3 +Copyright (c) Microsoft. All rights reserved.
4 +
5 +Module Name:
6 +
7 + SystemCommand.cpp
8 +
9 +Abstract:
10 +
11 + Definition of System command tree.
12 +
13 +--*/
14 +#include "CLIExecutionContext.h"
15 +#include "SystemCommand.h"
16 +#include "SessionCommand.h"
17 +
18 +using namespace wsl::windows::wslc::execution;
19 +using namespace wsl::shared;
20 +
21 +namespace wsl::windows::wslc {
22 +std::vector<std::unique_ptr<Command>> SystemCommand::GetCommands() const
23 +{
24 + std::vector<std::unique_ptr<Command>> commands;
25 + commands.push_back(std::make_unique<SessionCommand>(FullName()));
26 + return commands;
27 +}
28 +
29 +std::vector<Argument> SystemCommand::GetArguments() const
30 +{
31 + return {};
32 +}
33 +
34 +std::wstring SystemCommand::ShortDescription() const
35 +{
36 + return Localization::WSLCCLI_SystemCommandDesc();
37 +}
38 +
39 +std::wstring SystemCommand::LongDescription() const
40 +{
41 + return Localization::WSLCCLI_SystemCommandLongDesc();
42 +}
43 +
44 +void SystemCommand::ExecuteInternal(CLIExecutionContext& context) const
45 +{
46 + OutputHelp();
47 +}
48 +} // namespace wsl::windows::wslc
src/windows/wslc/commands/SystemCommand.h new
+34
@@ -0,0 +1,34 @@
1 +/*++
2 +
3 +Copyright (c) Microsoft. All rights reserved.
4 +
5 +Module Name:
6 +
7 + SystemCommand.h
8 +
9 +Abstract:
10 +
11 + Declaration of System command tree.
12 +
13 +--*/
14 +#pragma once
15 +#include "Command.h"
16 +
17 +namespace wsl::windows::wslc {
18 +// Root System Command
19 +struct SystemCommand final : public Command
20 +{
21 + constexpr static std::wstring_view CommandName = L"system";
22 + SystemCommand(const std::wstring& parent) : Command(CommandName, parent)
23 + {
24 + }
25 + std::vector<Argument> GetArguments() const override;
26 + std::wstring ShortDescription() const override;
27 + std::wstring LongDescription() const override;
28 +
29 + std::vector<std::unique_ptr<Command>> GetCommands() const override;
30 +
31 +protected:
32 + void ExecuteInternal(CLIExecutionContext& context) const override;
33 +};
34 +} // namespace wsl::windows::wslc
test/windows/wslc/CommandLineTestCases.h
+17 -16
@@ -25,22 +25,23 @@ COMMAND_LINE_TEST_CASE(L"-?", L"root", true)
25 COMMAND_LINE_TEST_CASE(L"--version", L"root", true)
26 COMMAND_LINE_TEST_CASE(L"-v", L"root", true)
27
28 -// Session command tests
29 -COMMAND_LINE_TEST_CASE(L"session list", L"list", true)
30 -COMMAND_LINE_TEST_CASE(L"session list --verbose", L"list", true)
31 -COMMAND_LINE_TEST_CASE(L"session list --verbose --help", L"list", true)
32 -COMMAND_LINE_TEST_CASE(L"session list --notanarg", L"list", false)
33 -COMMAND_LINE_TEST_CASE(L"session list extraarg", L"list", false)
34 -COMMAND_LINE_TEST_CASE(L"session shell session1", L"shell", true)
35 -COMMAND_LINE_TEST_CASE(L"session shell", L"shell", true)
36 -COMMAND_LINE_TEST_CASE(L"session terminate session1", L"terminate", true)
37 -COMMAND_LINE_TEST_CASE(L"session terminate", L"terminate", true)
38 -COMMAND_LINE_TEST_CASE(L"session enter C:\\storage", L"enter", true)
39 -COMMAND_LINE_TEST_CASE(L"session enter C:\\storage --name my-session", L"enter", true)
40 -COMMAND_LINE_TEST_CASE(L"session enter --name my-session C:\\storage", L"enter", true)
41 -COMMAND_LINE_TEST_CASE(L"session enter", L"enter", false) // Missing required storage-path
42 -COMMAND_LINE_TEST_CASE(L"session enter C:\\storage --notanarg", L"enter", false) // Invalid argument
43 -COMMAND_LINE_TEST_CASE(L"session enter --name my-session", L"enter", false) // Missing required positional before flag
28 +// System command tests
29 +COMMAND_LINE_TEST_CASE(L"system -?", L"system", true)
30 +COMMAND_LINE_TEST_CASE(L"system session list", L"list", true)
31 +COMMAND_LINE_TEST_CASE(L"system session list --verbose", L"list", true)
32 +COMMAND_LINE_TEST_CASE(L"system session list --verbose --help", L"list", true)
33 +COMMAND_LINE_TEST_CASE(L"system session list --notanarg", L"list", false)
34 +COMMAND_LINE_TEST_CASE(L"system session list extraarg", L"list", false)
35 +COMMAND_LINE_TEST_CASE(L"system session shell session1", L"shell", true)
36 +COMMAND_LINE_TEST_CASE(L"system session shell", L"shell", true)
37 +COMMAND_LINE_TEST_CASE(L"system session terminate session1", L"terminate", true)
38 +COMMAND_LINE_TEST_CASE(L"system session terminate", L"terminate", true)
39 +COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage", L"enter", true)
40 +COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage --name my-session", L"enter", true)
41 +COMMAND_LINE_TEST_CASE(L"system session enter --name my-session C:\\storage", L"enter", true)
42 +COMMAND_LINE_TEST_CASE(L"system session enter", L"enter", false) // Missing required storage-path
43 +COMMAND_LINE_TEST_CASE(L"system session enter C:\\storage --notanarg", L"enter", false) // Invalid argument
44 +COMMAND_LINE_TEST_CASE(L"system session enter --name my-session", L"enter", false) // Missing required positional before flag
45
46 // Container command tests
47 COMMAND_LINE_TEST_CASE(L"container list", L"list", true)
test/windows/wslc/WSLCCLICommandUnitTests.cpp
+21 -4
@@ -22,6 +22,7 @@ Abstract:
22 #include "RootCommand.h"
23 #include "ContainerCommand.h"
24 #include "SessionCommand.h"
25 +#include "SystemCommand.h"
26 #include "VersionCommand.h"
27
28 using namespace wsl::windows::wslc;
@@ -65,10 +66,26 @@ class WSLCCLICommandUnitTests
66 }
67 }
68
68 - // Test: Verify SessionCommand has subcommands
69 + // Test: Verify SystemCommand has subcommands
70 + TEST_METHOD(SystemCommand_HasSubcommands)
71 + {
72 + auto cmd = SystemCommand(L"system");
73 + auto subcommands = cmd.GetCommands();
74 +
75 + // Verify it has subcommands
76 + VERIFY_IS_TRUE(subcommands.size() > 0);
77 + LogComment(L"SystemCommand has " + std::to_wstring(subcommands.size()) + L" subcommands");
78 +
79 + for (const auto& subcmd : subcommands)
80 + {
81 + VERIFY_IS_NOT_NULL(subcmd.get());
82 + }
83 + }
84 +
85 + // Test: Verify SessionCommand has subcommands (now under system)
86 TEST_METHOD(SessionCommand_HasSubcommands)
87 {
71 - auto cmd = SessionCommand(L"session");
88 + auto cmd = SessionCommand(L"system session");
89 auto subcommands = cmd.GetCommands();
90
91 // Verify it has subcommands
@@ -85,7 +102,7 @@ class WSLCCLICommandUnitTests
102 // Test: Verify SessionEnterCommand has the expected arguments
103 TEST_METHOD(SessionEnterCommand_HasExpectedArguments)
104 {
88 - auto cmd = SessionEnterCommand(L"session");
105 + auto cmd = SessionEnterCommand(L"system session");
106 auto args = cmd.GetArguments();
107
108 // Should have 2 arguments: storage-path (positional, required) and name (value, optional)
@@ -107,7 +124,7 @@ class WSLCCLICommandUnitTests
124 // Test: Verify SessionEnterCommand descriptions are not empty
125 TEST_METHOD(SessionEnterCommand_HasDescriptions)
126 {
110 - auto cmd = SessionEnterCommand(L"session");
127 + auto cmd = SessionEnterCommand(L"system session");
128
129 VERIFY_IS_FALSE(cmd.ShortDescription().empty());
130 VERIFY_IS_FALSE(cmd.LongDescription().empty());
test/windows/wslc/e2e/WSLCE2EGlobalTests.cpp
+24 -24
@@ -83,7 +83,7 @@ class WSLCE2EGlobalTests
83 result.Verify({.Stderr = L"", .ExitCode = 0});
84
85 // Verify session list shows the admin session name
86 - result = RunWslc(L"session list", ElevationType::Elevated);
86 + result = RunWslc(L"system session list", ElevationType::Elevated);
87 result.Verify({.Stderr = L"", .ExitCode = 0});
88
89 VERIFY_IS_TRUE(result.Stdout.has_value());
@@ -98,7 +98,7 @@ class WSLCE2EGlobalTests
98 result.Verify({.Stderr = L"", .ExitCode = 0});
99
100 // Verify session list shows the non-admin session name
101 - result = RunWslc(L"session list", ElevationType::NonElevated);
101 + result = RunWslc(L"system session list", ElevationType::NonElevated);
102 result.Verify({.Stderr = L"", .ExitCode = 0});
103
104 VERIFY_IS_TRUE(result.Stdout.has_value());
@@ -244,17 +244,17 @@ class WSLCE2EGlobalTests
244 result.Verify({.Stderr = L"", .ExitCode = 0});
245
246 // Verify session list shows the admin session name
247 - result = RunWslc(L"session list");
247 + result = RunWslc(L"system session list");
248 result.Verify({.Stderr = L"", .ExitCode = 0});
249 VERIFY_IS_TRUE(result.Stdout.has_value());
250 VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
251
252 // Terminate the session
253 - result = RunWslc(L"session terminate");
253 + result = RunWslc(L"system session terminate");
254 result.Verify({.Stderr = L"", .ExitCode = 0});
255
256 // Verify session no longer shows up
257 - result = RunWslc(L"session list");
257 + result = RunWslc(L"system session list");
258 result.Verify({.Stderr = L"", .ExitCode = 0});
259 VERIFY_IS_TRUE(result.Stdout.has_value());
260 VERIFY_IS_FALSE(result.Stdout->find(adminName) != std::wstring::npos);
@@ -266,17 +266,17 @@ class WSLCE2EGlobalTests
266 result.Verify({.Stderr = L"", .ExitCode = 0});
267
268 // Verify session list shows the non-elevated session name
269 - result = RunWslc(L"session list");
269 + result = RunWslc(L"system session list");
270 result.Verify({.Stderr = L"", .ExitCode = 0});
271 VERIFY_IS_TRUE(result.Stdout.has_value());
272 VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
273
274 // Terminate the session
275 - result = RunWslc(L"session terminate", ElevationType::NonElevated);
275 + result = RunWslc(L"system session terminate", ElevationType::NonElevated);
276 result.Verify({.Stderr = L"", .ExitCode = 0});
277
278 // Verify session no longer shows up
279 - result = RunWslc(L"session list");
279 + result = RunWslc(L"system session list");
280 result.Verify({.Stderr = L"", .ExitCode = 0});
281 VERIFY_IS_TRUE(result.Stdout.has_value());
282 VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -292,17 +292,17 @@ class WSLCE2EGlobalTests
292 result.Verify({.Stderr = L"", .ExitCode = 0});
293
294 // Verify session list shows the admin session name
295 - result = RunWslc(L"session list");
295 + result = RunWslc(L"system session list");
296 result.Verify({.Stderr = L"", .ExitCode = 0});
297 VERIFY_IS_TRUE(result.Stdout.has_value());
298 VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
299
300 // Terminate the session
301 - result = RunWslc(std::format(L"session terminate {}", adminName));
301 + result = RunWslc(std::format(L"system session terminate {}", adminName));
302 result.Verify({.Stderr = L"", .ExitCode = 0});
303
304 // Verify session no longer shows up
305 - result = RunWslc(L"session list");
305 + result = RunWslc(L"system session list");
306 result.Verify({.Stderr = L"", .ExitCode = 0});
307 VERIFY_IS_TRUE(result.Stdout.has_value());
308 VERIFY_IS_FALSE(result.Stdout->find(adminName) != std::wstring::npos);
@@ -314,17 +314,17 @@ class WSLCE2EGlobalTests
314 result.Verify({.Stderr = L"", .ExitCode = 0});
315
316 // Verify session list shows the non-elevated session name
317 - result = RunWslc(L"session list");
317 + result = RunWslc(L"system session list");
318 result.Verify({.Stderr = L"", .ExitCode = 0});
319 VERIFY_IS_TRUE(result.Stdout.has_value());
320 VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
321
322 // Terminate the session
323 - result = RunWslc(std::format(L"session terminate {}", nonAdminName), ElevationType::NonElevated);
323 + result = RunWslc(std::format(L"system session terminate {}", nonAdminName), ElevationType::NonElevated);
324 result.Verify({.Stderr = L"", .ExitCode = 0});
325
326 // Verify session no longer shows up
327 - result = RunWslc(L"session list");
327 + result = RunWslc(L"system session list");
328 result.Verify({.Stderr = L"", .ExitCode = 0});
329 VERIFY_IS_TRUE(result.Stdout.has_value());
330 VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -342,22 +342,22 @@ class WSLCE2EGlobalTests
342 result.Verify({.Stderr = L"", .ExitCode = 0});
343
344 // Verify session list shows both sessions.
345 - result = RunWslc(L"session list");
345 + result = RunWslc(L"system session list");
346 result.Verify({.Stderr = L"", .ExitCode = 0});
347 VERIFY_IS_TRUE(result.Stdout.has_value());
348 VERIFY_IS_TRUE(result.Stdout->find(adminName) != std::wstring::npos);
349 VERIFY_IS_TRUE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
350
351 // Attempt to terminate the admin session from the non-elevated process and fail.
352 - result = RunWslc(std::format(L"session terminate {}", adminName), ElevationType::NonElevated);
352 + result = RunWslc(std::format(L"system session terminate {}", adminName), ElevationType::NonElevated);
353 result.Verify({.Stderr = L"The requested operation requires elevation. \r\nError code: ERROR_ELEVATION_REQUIRED\r\n", .ExitCode = 1});
354
355 // Terminate the non-elevated session from the elevated process.
356 - result = RunWslc(std::format(L"session terminate {}", nonAdminName), ElevationType::Elevated);
356 + result = RunWslc(std::format(L"system session terminate {}", nonAdminName), ElevationType::Elevated);
357 result.Verify({.Stderr = L"", .ExitCode = 0});
358
359 // Verify non-elevated session no longer shows up
360 - result = RunWslc(L"session list");
360 + result = RunWslc(L"system session list");
361 result.Verify({.Stderr = L"", .ExitCode = 0});
362 VERIFY_IS_TRUE(result.Stdout.has_value());
363 VERIFY_IS_FALSE(result.Stdout->find(nonAdminName + L"\r\n") != std::wstring::npos);
@@ -382,7 +382,7 @@ class WSLCE2EGlobalTests
382 result.Verify({.Stdout = L"", .Stderr = L"Element not found. \r\nError code: ERROR_NOT_FOUND\r\n", .ExitCode = 1});
383
384 // Verify session list
385 - result = RunWslc(L"session list");
385 + result = RunWslc(L"system session list");
386 result.Verify({.Stderr = L"", .ExitCode = 0});
387
388 // Verify there is a session with the name of the test session in the session list output.
@@ -419,7 +419,7 @@ class WSLCE2EGlobalTests
419 Log::Comment(L"Testing elevated interactive session");
420 // Session shell should attach to the correct default session.
421 // Test should be elevated, therefore this should be the admin session.
422 - auto session = RunWslcInteractive(L"session shell");
422 + auto session = RunWslcInteractive(L"system session shell");
423 VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
424
425 session.ExpectStdout(VT::SESSION_PROMPT);
@@ -444,7 +444,7 @@ class WSLCE2EGlobalTests
444 Log::Comment(L"Testing non-elevated interactive session with explicit session name");
445 // Non-Elevated session shell should attach to the wslc by name also.
446 auto nonAdminName = GetExpectedDefaultSessionName(false);
447 - auto session = RunWslcInteractive(std::format(L"session shell {}", nonAdminName), ElevationType::NonElevated);
447 + auto session = RunWslcInteractive(std::format(L"system session shell {}", nonAdminName), ElevationType::NonElevated);
448 VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
449
450 session.ExpectStdout(VT::SESSION_PROMPT);
@@ -469,7 +469,7 @@ class WSLCE2EGlobalTests
469 Log::Comment(L"Testing elevated interactive session with explicit admin session name");
470 // Elevated session shell should attach to the wslc by name also.
471 auto adminName = GetExpectedDefaultSessionName(true);
472 - auto session = RunWslcInteractive(std::format(L"session shell {}", adminName), ElevationType::Elevated);
472 + auto session = RunWslcInteractive(std::format(L"system session shell {}", adminName), ElevationType::Elevated);
473 VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
474
475 session.ExpectStdout(VT::SESSION_PROMPT);
@@ -526,8 +526,8 @@ private:
526 {L"container", Localization::WSLCCLI_ContainerCommandDesc()},
527 {L"image", Localization::WSLCCLI_ImageCommandDesc()},
528 {L"registry", Localization::WSLCCLI_RegistryCommandDesc()},
529 - {L"session", Localization::WSLCCLI_SessionCommandDesc()},
529 {L"settings", Localization::WSLCCLI_SettingsCommandDesc()},
530 + {L"system", Localization::WSLCCLI_SystemCommandDesc()},
531 {L"volume", Localization::WSLCCLI_VolumeCommandDesc()},
532 {L"attach", Localization::WSLCCLI_ContainerAttachDesc()},
533 {L"build", Localization::WSLCCLI_ImageBuildDesc()},
@@ -579,4 +579,4 @@ private:
579 return options.str();
580 }
581 };
582 -} // namespace WSLCE2ETests
\ No newline at end of file
582 +} // namespace WSLCE2ETests
test/windows/wslc/e2e/WSLCE2EHelpers.cpp
+3 -3
@@ -394,7 +394,7 @@ void EnsureSessionIsTerminated(const std::wstring& sessionName)
394 targetSession = std::format(L"{}-{}", baseName, username);
395 }
396
397 - auto listResult = RunWslc(L"session list");
397 + auto listResult = RunWslc(L"system session list");
398 listResult.Verify({.Stderr = L"", .ExitCode = 0});
399
400 auto stdoutLines = listResult.GetStdoutLines();
@@ -403,7 +403,7 @@ void EnsureSessionIsTerminated(const std::wstring& sessionName)
403 // Check if the line ends with the target session name
404 if (line.size() >= targetSession.size() && line.compare(line.size() - targetSession.size(), targetSession.size(), targetSession) == 0)
405 {
406 - auto result = RunWslc(std::format(L"session terminate \"{}\"", targetSession));
406 + auto result = RunWslc(std::format(L"system session terminate \"{}\"", targetSession));
407 result.Verify({.Stdout = L"", .Stderr = L"", .ExitCode = 0});
408 break;
409 }
@@ -492,4 +492,4 @@ std::wstring GetPythonHttpServerScript(uint16_t port)
492 {
493 return std::format(L"python3 -m http.server {}", port);
494 }
495 -} // namespace WSLCE2ETests
\ No newline at end of file
495 +} // namespace WSLCE2ETests
test/windows/wslc/e2e/WSLCE2ESessionEnterTests.cpp
+6 -6
@@ -58,7 +58,7 @@ class WSLCE2ESessionEnterTests
58 RunWslc(L"image ls").Verify({.ExitCode = 0});
59
60 // Terminate the wslc session since we use its storage path in this test class.
61 - RunWslc(L"session terminate");
61 + RunWslc(L"system session terminate");
62 return true;
63 }
64
@@ -67,7 +67,7 @@ class WSLCE2ESessionEnterTests
67 constexpr auto sessionName = L"test-wslc-session-enter";
68
69 // Run an interactive session enter with an explicit name.
70 - auto session = RunWslcInteractive(std::format(L"session enter \"{}\" --name {}", GetDefaultStoragePath(), sessionName));
70 + auto session = RunWslcInteractive(std::format(L"system session enter \"{}\" --name {}", GetDefaultStoragePath(), sessionName));
71 VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
72
73 session.ExpectStdout(VT::SESSION_PROMPT);
@@ -80,7 +80,7 @@ class WSLCE2ESessionEnterTests
80 session.ExpectStdout(VT::SESSION_PROMPT);
81
82 // Verify the session appears in session list.
83 - auto listResult = RunWslc(L"session list");
83 + auto listResult = RunWslc(L"system session list");
84 listResult.Verify({.Stderr = L"", .ExitCode = S_OK});
85 VERIFY_IS_TRUE(listResult.Stdout.has_value());
86 VERIFY_IS_TRUE(listResult.Stdout->find(sessionName) != std::wstring::npos);
@@ -89,7 +89,7 @@ class WSLCE2ESessionEnterTests
89 VERIFY_ARE_EQUAL(session.Exit(), 0);
90
91 // Verify the session is no longer in the session list after exiting.
92 - listResult = RunWslc(L"session list");
92 + listResult = RunWslc(L"system session list");
93 listResult.Verify({.Stderr = L"", .ExitCode = S_OK});
94 VERIFY_IS_TRUE(listResult.Stdout.has_value());
95 VERIFY_IS_FALSE(listResult.Stdout->find(sessionName) != std::wstring::npos);
@@ -97,7 +97,7 @@ class WSLCE2ESessionEnterTests
97
98 WSLC_TEST_METHOD(WSLCE2E_SessionEnter_WithoutName_GeneratesGuid)
99 {
100 - auto session = RunWslcInteractive(std::format(L"session enter \"{}\"", GetDefaultStoragePath()));
100 + auto session = RunWslcInteractive(std::format(L"system session enter \"{}\"", GetDefaultStoragePath()));
101 VERIFY_IS_TRUE(session.IsRunning(), L"Session should be running");
102
103 session.ExpectStderr("Created session: ");
@@ -108,7 +108,7 @@ class WSLCE2ESessionEnterTests
108
109 WSLC_TEST_METHOD(WSLCE2E_SessionEnter_StoragePathNotFound)
110 {
111 - auto result = RunWslc(L"session enter does-not-exist");
111 + auto result = RunWslc(L"system session enter does-not-exist");
112 result.Verify({
113 .Stderr = L"The system cannot find the path specified. \r\nError code: ERROR_PATH_NOT_FOUND\r\n",
114 .ExitCode = 1,