master
cpp 153 lines 6.14 KB
Raw
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({.Stderr = L"", .ExitCode = 0});
45 VERIFY_IS_FALSE(result.Stdout.value().empty());
46 }
47
48 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_MissingNetworkName)
49 {
50 auto result = RunWslc(L"network inspect");
51 result.Verify({.Stdout = L"", .ExitCode = 1});
52 VERIFY_IS_TRUE(result.StderrContainsSubstring(L"Required argument not provided: 'network-name'"));
53 }
54
55 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_Success)
56 {
57 auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
58 result.Verify({.Stderr = L"", .ExitCode = 0});
59 VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
60
61 result = RunWslc(std::format(L"network inspect {}", TestNetworkName1));
62 result.Verify({.Stderr = L"", .ExitCode = 0});
63 auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
64 VERIFY_ARE_EQUAL(1u, inspectData.size());
65 auto inspect = inspectData[0];
66
67 VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect.Name);
68 VERIFY_ARE_EQUAL("bridge", inspect.Driver);
69 VERIFY_ARE_EQUAL("local", inspect.Scope);
70 VERIFY_IS_FALSE(inspect.Created.empty());
71 VERIFY_IS_TRUE(inspect.EnableIPv4);
72 VERIFY_IS_FALSE(inspect.ConfigOnly);
73 VERIFY_IS_TRUE(inspect.Containers.empty());
74
75 // The label used to track wslc managed networks is an implementation detail and must not surface.
76 VERIFY_IS_FALSE(inspect.Labels.contains("com.microsoft.wsl.network.managed"));
77 }
78
79 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_PredefinedNetwork)
80 {
81 // The predefined networks are not created by wslc but must still be inspectable.
82 auto result = RunWslc(L"network inspect bridge");
83 result.Verify({.Stderr = L"", .ExitCode = 0});
84
85 auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
86 VERIFY_ARE_EQUAL(1u, inspectData.size());
87 VERIFY_ARE_EQUAL("bridge", inspectData[0].Name);
88 VERIFY_ARE_EQUAL("bridge", inspectData[0].Driver);
89 }
90
91 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_FormatJson_IsSingleLine)
92 {
93 auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
94 result.Verify({.Stderr = L"", .ExitCode = 0});
95
96 result = RunWslc(std::format(L"network inspect --format json {}", TestNetworkName1));
97 result.Verify({.Stderr = L"", .ExitCode = 0});
98
99 const auto document = VerifyCompactJsonOutput(result);
100 VERIFY_IS_TRUE(document.is_array());
101 VERIFY_ARE_EQUAL(1u, document.size());
102 VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), document[0]["Name"].get<std::string>());
103 }
104
105 WSLC_TEST_METHOD(WSLCE2E_Network_InspectMultiple_Success)
106 {
107 auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
108 result.Verify({.Stderr = L"", .ExitCode = 0});
109 VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
110 result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName2));
111 result.Verify({.Stderr = L"", .ExitCode = 0});
112 VERIFY_ARE_EQUAL(TestNetworkName2, result.GetStdoutOneLine());
113
114 result = RunWslc(std::format(L"network inspect {} {}", TestNetworkName1, TestNetworkName2));
115 result.Verify({.Stderr = L"", .ExitCode = 0});
116 auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
117 VERIFY_ARE_EQUAL(2u, inspectData.size());
118
119 auto inspect1 = inspectData[0];
120 VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect1.Name);
121 VERIFY_ARE_EQUAL("bridge", inspect1.Driver);
122
123 auto inspect2 = inspectData[1];
124 VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName2), inspect2.Name);
125 VERIFY_ARE_EQUAL("bridge", inspect2.Driver);
126 }
127
128 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_NotFound)
129 {
130 auto result = RunWslc(std::format(L"network inspect {}", TestNetworkName1));
131 result.Verify({.Stdout = L"[]\r\n", .Stderr = std::format(L"Network not found: '{}'\r\n", TestNetworkName1), .ExitCode = 1});
132 }
133
134 WSLC_TEST_METHOD(WSLCE2E_Network_Inspect_MixedFoundNotFound)
135 {
136 auto result = RunWslc(std::format(L"network create --driver bridge {}", TestNetworkName1));
137 result.Verify({.Stderr = L"", .ExitCode = 0});
138 VERIFY_ARE_EQUAL(TestNetworkName1, result.GetStdoutOneLine());
139
140 result = RunWslc(std::format(L"network inspect {} {}", TestNetworkName1, TestNetworkName2));
141 result.Verify({.Stderr = std::format(L"Network not found: '{}'\r\n", TestNetworkName2), .ExitCode = 1});
142
143 auto inspectData = wsl::shared::FromJson<std::vector<wsl::windows::common::wslc_schema::Network>>(result.Stdout.value().c_str());
144 VERIFY_ARE_EQUAL(1u, inspectData.size());
145 auto inspect = inspectData[0];
146 VERIFY_ARE_EQUAL(WideToMultiByte(TestNetworkName1), inspect.Name);
147 }
148
149 private:
150 const std::wstring TestNetworkName1 = L"wslc-e2e-network-inspect-1";
151 const std::wstring TestNetworkName2 = L"wslc-e2e-network-inspect-2";
152 };
153 } // namespace WSLCE2ETests