1
+/*++
2
+
3
+Copyright (c) Microsoft. All rights reserved.
4
+
5
+Module Name:
6
+
7
+ WSLCE2ENetworkInspectTests.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 "WSLCExecutor.h"
17
+#include "WSLCE2EHelpers.h"
18
+
19
+namespace WSLCE2ETests {
20
+using namespace wsl::shared;
21
+using namespace wsl::shared::string;
22
+
23
+class WSLCE2ENetworkInspectTests
24
+{
25
+ WSLC_TEST_CLASS(WSLCE2ENetworkInspectTests)
26
+
27
+ TEST_METHOD_SETUP(MethodSetup)
28
+ {
29
+ EnsureNetworkDoesNotExist(TestNetworkName1);
30
+ EnsureNetworkDoesNotExist(TestNetworkName2);
31
+ return true;
32
+ }
33
+
34
+ TEST_CLASS_CLEANUP(ClassCleanup)
35
+ {
36
+ EnsureNetworkDoesNotExist(TestNetworkName1);
37
+ EnsureNetworkDoesNotExist(TestNetworkName2);
38
+ return true;
39
+ }
40
+
41
+ WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_HelpCommand)
42
+ {
43
+ auto result = RunWslc(L"network inspect --help");
44
+ result.Verify({.Stdout = GetHelpMessage(), .Stderr = L"", .ExitCode = 0});
45
+ }
46
+
47
+ WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_MissingNetworkName)
48
+ {
49
+ auto result = RunWslc(L"network inspect");
50
+ result.Verify({.Stdout = GetHelpMessage(), .Stderr = L"Required argument not provided: 'network-name'\r\n", .ExitCode = 1});
51
+ }
52
+
53
+ WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_Success)
54
+ {
55
+ auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
56
+ result.Verify({.Stderr = L"", .ExitCode = 0});
57
+ VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
58
+
59
+ result = RunWslc(std::format(L"network inspect {}", TestNetworkName1));
60
+ result.Verify({.Stderr = L"", .ExitCode = 0});
61
+ auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
62
+ VERIFY_ARE_EQUAL(1u, inspectData.size());
63
+ auto inspect = inspectData[0];
64
+
65
+ VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect.Name);
66
+ VERIFY_ARE_EQUAL("bridge", inspect.Driver);
67
+ }
68
+
69
+ WSLC_TEST_METHOD(WSLCE2E_Network_InspectMultiple_Success)
70
+ {
71
+ auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
72
+ result.Verify({.Stderr = L"", .ExitCode = 0});
73
+ VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
74
+ result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName2));
75
+ result.Verify({.Stderr = L"", .ExitCode = 0});
76
+ VERIFY_ARE_EQUAL(TestNetworkName2, result.GetStdoutOneLine());
77
+
78
+ result = RunWslc(std::format(L"network inspect {} {}", TestNetworkName1, TestNetworkName2));
79
+ result.Verify({.Stderr = L"", .ExitCode = 0});
80
+ auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
81
+ VERIFY_ARE_EQUAL(2u, inspectData.size());
82
+
83
+ auto inspect1 = inspectData[0];
84
+ VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect1.Name);
85
+ VERIFY_ARE_EQUAL("bridge", inspect1.Driver);
86
+
87
+ auto inspect2 = inspectData[1];
88
+ VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName2), inspect2.Name);
89
+ VERIFY_ARE_EQUAL("bridge", inspect2.Driver);
90
+ }
91
+
92
+ WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_NotFound)
93
+ {
94
+ auto result = RunWslc(std::format(L"network inspect {}", TestNetworkName1));
95
+ result.Verify({.Stdout = L"[]\r\n", .Stderr = std::format(L"Network not found: '{}'\r\n", TestNetworkName1), .ExitCode = 1});
96
+ }
97
+
98
+ WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_MixedFoundNotFound)
99
+ {
100
+ auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
101
+ result.Verify({.Stderr = L"", .ExitCode = 0});
102
+ VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
103
+
104
+ result = RunWslc(std::format(L"network inspect {} {}", TestNetworkName1, TestNetworkName2));
105
+ result.Verify({.Stderr = std::format(L"Network not found: '{}'\r\n", TestNetworkName2), .ExitCode = 1});
106
+
107
+ auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
108
+ VERIFY_ARE_EQUAL(1u, inspectData.size());
109
+ auto inspect = inspectData[0];
110
+ VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect.Name);
111
+ }
112
+
113
+private:
114
+ const std::wstring TestNetworkName1 = L"wslc-e2e-network-inspect-1";
115
+ const std::wstring TestNetworkName2 = L"wslc-e2e-network-inspect-2";
116
+
117
+ std::wstring GetHelpMessage() const
118
+ {
119
+ std::wstringstream output;
120
+ output << GetWslcHeader() //
121
+ << GetDescription() //
122
+ << GetUsage() //
123
+ << GetAvailableCommands() //
124
+ << GetAvailableOptions();
125
+ return output.str();
126
+ }
127
+
128
+ std::wstring GetDescription() const
129
+ {
130
+ return std::format(L"{}\r\n\r\n", Localization::WSLCCLI_NetworkInspectLongDesc());
131
+ }
132
+
133
+ std::wstring GetUsage() const
134
+ {
135
+ return L"Usage: wslc network inspect [<options>] <network-name>\r\n\r\n";
136
+ }
137
+
138
+ std::wstring GetAvailableCommands() const
139
+ {
140
+ std::wstringstream commands;
141
+ commands << L"The following arguments are available:\r\n" //
142
+ << L" network-name Network name\r\n" //
143
+ << L"\r\n";
144
+ return commands.str();
145
+ }
146
+
147
+ std::wstring GetAvailableOptions() const
148
+ {
149
+ std::wstringstream options;
150
+ options << L"The following options are available:\r\n" //
151
+ << L" --session Specify the session to use\r\n" //
152
+ << L" -?,--help Shows help about the selected command\r\n" //
153
+ << L"\r\n";
154
+ return options.str();
155
+ }
156
+};
157
+} // namespace WSLCE2ETests