|
21 | 21 | #include "mocks/interfacefactorymock.hpp" |
22 | 22 | #include "mocks/interfacemanagermock.hpp" |
23 | 23 | #include "mocks/namespacemanagermock.hpp" |
24 | | -#include <core/common/tests/mocks/networkprovidermock.hpp> |
25 | 24 | #include "mocks/randommock.hpp" |
26 | 25 | #include "mocks/trafficmonitormock.hpp" |
| 26 | +#include <core/common/tests/mocks/networkprovidermock.hpp> |
27 | 27 |
|
28 | 28 | using namespace aos::sm::networkmanager; |
29 | 29 | using namespace aos::sm::cni; |
@@ -1144,3 +1144,83 @@ TEST_F(NetworkManagerTest, CreateInstanceNetwork_VerifyUpdateItemNetworkParams) |
1144 | 1144 | EXPECT_EQ(capturedServiceData.mHosts[3], "test-subject.test-item"); |
1145 | 1145 | EXPECT_EQ(capturedServiceData.mHosts[4], "test-subject.test-item.test-network"); |
1146 | 1146 | } |
| 1147 | + |
| 1148 | +TEST_F(NetworkManagerTest, OnPendingFirewallUpdate_UpdatesFirewallRules) |
| 1149 | +{ |
| 1150 | + auto params = CreateTestInstanceNetworkConfig(); |
| 1151 | + auto allocatedParams = CreateTestAllocatedParams(); |
| 1152 | + |
| 1153 | + SetupEnsureNodeNetworkCreateMocks("test-network", "192.168.1.0/24", "192.168.1.1", 100); |
| 1154 | + |
| 1155 | + EXPECT_CALL(mNetworkProvider, AllocateInstanceNetwork(_, _, _, _, _)) |
| 1156 | + .WillOnce(DoAll(SetArgReferee<4>(allocatedParams), Return(aos::ErrorEnum::eNone))); |
| 1157 | + EXPECT_CALL(mStorage, AddInstanceNetworkInfo(_)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1158 | + |
| 1159 | + auto err = mNetManager->CreateInstanceNetwork("test-instance", "test-network", params); |
| 1160 | + ASSERT_EQ(err, aos::ErrorEnum::eNone); |
| 1161 | + |
| 1162 | + aos::PendingFirewallUpdate update; |
| 1163 | + update.mInstanceIdent = params.mInstanceIdent; |
| 1164 | + |
| 1165 | + aos::FirewallRule rule; |
| 1166 | + rule.mDstIP = "10.0.0.5"; |
| 1167 | + rule.mDstPort = "8080"; |
| 1168 | + rule.mProto = "tcp"; |
| 1169 | + rule.mSrcIP = "192.168.1.2"; |
| 1170 | + update.mFirewallRules.PushBack(rule); |
| 1171 | + |
| 1172 | + EXPECT_CALL(mStorage, RemoveInstanceNetworkInfo(aos::String("test-instance"))) |
| 1173 | + .WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1174 | + EXPECT_CALL(mStorage, AddInstanceNetworkInfo(_)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1175 | + |
| 1176 | + mNetManager->OnPendingFirewallUpdate("test-node", update); |
| 1177 | +} |
| 1178 | + |
| 1179 | +TEST_F(NetworkManagerTest, OnPendingFirewallUpdate_RunningInstance_CallsCNIUpdate) |
| 1180 | +{ |
| 1181 | + auto params = CreateTestInstanceNetworkConfig(); |
| 1182 | + auto allocatedParams = CreateTestAllocatedParams(); |
| 1183 | + |
| 1184 | + SetupEnsureNodeNetworkCreateMocks("test-network", "192.168.1.0/24", "192.168.1.1", 100); |
| 1185 | + |
| 1186 | + EXPECT_CALL(mNetworkProvider, AllocateInstanceNetwork(_, _, _, _, _)) |
| 1187 | + .WillOnce(DoAll(SetArgReferee<4>(allocatedParams), Return(aos::ErrorEnum::eNone))); |
| 1188 | + EXPECT_CALL(mStorage, AddInstanceNetworkInfo(_)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1189 | + |
| 1190 | + auto err = mNetManager->CreateInstanceNetwork("test-instance", "test-network", params); |
| 1191 | + ASSERT_EQ(err, aos::ErrorEnum::eNone); |
| 1192 | + |
| 1193 | + SetupEnsureNodeNetworkPhysicalMocks("192.168.1.1", "192.168.1.0/24", 100); |
| 1194 | + |
| 1195 | + EXPECT_CALL(mNetns, CreateNetworkNamespace(_)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1196 | + EXPECT_CALL(mNetns, GetNetworkNamespacePath(_)) |
| 1197 | + .WillOnce(Return(aos::RetWithError<aos::StaticString<aos::cFilePathLen>> {{}, aos::ErrorEnum::eNone})); |
| 1198 | + EXPECT_CALL(mCNI, AddNetworkList(_, _, _)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1199 | + EXPECT_CALL(mTrafficMonitor, StartInstanceMonitoring(_, _, _, _)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1200 | + |
| 1201 | + InstanceNetworkRuntimeParams runtimeParams; |
| 1202 | + runtimeParams.mHostsFilePath = "/tmp/networkmanager_test/hosts"; |
| 1203 | + runtimeParams.mResolvConfFilePath = "/tmp/networkmanager_test/resolv.conf"; |
| 1204 | + |
| 1205 | + err = mNetManager->StartInstanceNetwork("test-instance", "test-network", runtimeParams); |
| 1206 | + ASSERT_EQ(err, aos::ErrorEnum::eNone); |
| 1207 | + |
| 1208 | + aos::PendingFirewallUpdate update; |
| 1209 | + update.mInstanceIdent = params.mInstanceIdent; |
| 1210 | + |
| 1211 | + aos::FirewallRule rule; |
| 1212 | + rule.mDstIP = "10.0.0.5"; |
| 1213 | + rule.mDstPort = "8080"; |
| 1214 | + rule.mProto = "tcp"; |
| 1215 | + rule.mSrcIP = "192.168.1.2"; |
| 1216 | + update.mFirewallRules.PushBack(rule); |
| 1217 | + |
| 1218 | + EXPECT_CALL(mStorage, RemoveInstanceNetworkInfo(aos::String("test-instance"))) |
| 1219 | + .WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1220 | + EXPECT_CALL(mStorage, AddInstanceNetworkInfo(_)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1221 | + |
| 1222 | + EXPECT_CALL(mCNI, GetNetworkListCachedConfig(_, _)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1223 | + EXPECT_CALL(mCNI, UpdateFirewall(_, _, _)).WillOnce(Return(aos::ErrorEnum::eNone)); |
| 1224 | + |
| 1225 | + mNetManager->OnPendingFirewallUpdate("test-node", update); |
| 1226 | +} |
0 commit comments