summaryrefslogtreecommitdiff
path: root/server/BandwidthControllerTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/BandwidthControllerTest.cpp')
-rw-r--r--server/BandwidthControllerTest.cpp136
1 files changed, 84 insertions, 52 deletions
diff --git a/server/BandwidthControllerTest.cpp b/server/BandwidthControllerTest.cpp
index 6d261edd..ff9738e7 100644
--- a/server/BandwidthControllerTest.cpp
+++ b/server/BandwidthControllerTest.cpp
@@ -22,9 +22,12 @@
#include <gtest/gtest.h>
+#include <android-base/strings.h>
+
#include "BandwidthController.h"
std::vector<std::string> gCmds = {};
+std::vector<std::string> gRestoreCmds = {};
int fake_android_fork_exec(int argc, char* argv[], int *status, bool, bool) {
std::string cmd = argv[0];
@@ -41,6 +44,12 @@ FILE *fake_popen(const char *, const char *) {
return NULL;
};
+int fakeExecIptablesRestore(IptablesTarget target, const std::string& commands) {
+ EXPECT_EQ(V4V6, target);
+ gRestoreCmds.push_back(commands);
+ return 0;
+}
+
void expectIptablesCommands(std::vector<std::string> expectedCmds) {
EXPECT_EQ(expectedCmds.size() * 2, gCmds.size());
if (expectedCmds.size() * 2 != gCmds.size()) return;
@@ -53,80 +62,103 @@ void expectIptablesCommands(std::vector<std::string> expectedCmds) {
gCmds.clear();
}
+void expectIptablesRestoreCommands(std::vector<std::string> expectedCmds) {
+ EXPECT_EQ(expectedCmds.size(), gRestoreCmds.size());
+ EXPECT_EQ(expectedCmds, gRestoreCmds);
+ gRestoreCmds.clear();
+}
+
class BandwidthControllerTest : public ::testing::Test {
public:
BandwidthControllerTest() {
BandwidthController::execFunction = fake_android_fork_exec;
BandwidthController::popenFunction = fake_popen;
+ BandwidthController::iptablesRestoreFunction = fakeExecIptablesRestore;
gCmds.clear();
+ gRestoreCmds.clear();
}
BandwidthController mBw;
};
-
TEST_F(BandwidthControllerTest, TestSetupIptablesHooks) {
mBw.setupIptablesHooks();
std::vector<std::string> expected = {
- "-F bw_INPUT",
- "-F bw_OUTPUT",
- "-F bw_FORWARD",
- "-F bw_happy_box",
- "-F bw_penalty_box",
- "-F bw_data_saver",
- "-F bw_costly_shared",
- "-t raw -F bw_raw_PREROUTING",
- "-t mangle -F bw_mangle_POSTROUTING",
- "-X bw_happy_box",
- "-X bw_penalty_box",
- "-X bw_data_saver",
- "-X bw_costly_shared",
- "-N bw_happy_box",
- "-N bw_penalty_box",
- "-N bw_data_saver",
- "-N bw_costly_shared",
+ "*filter\n"
+ ":bw_INPUT -\n"
+ ":bw_OUTPUT -\n"
+ ":bw_FORWARD -\n"
+ ":bw_happy_box -\n"
+ ":bw_penalty_box -\n"
+ ":bw_data_saver -\n"
+ ":bw_costly_shared -\n"
+ "COMMIT\n"
+ "*raw\n"
+ ":bw_raw_PREROUTING -\n"
+ "COMMIT\n"
+ "*mangle\n"
+ ":bw_mangle_POSTROUTING -\n"
+ "COMMIT\n\x04"
};
- expectIptablesCommands(expected);
+ expectIptablesRestoreCommands(expected);
}
TEST_F(BandwidthControllerTest, TestEnableBandwidthControl) {
mBw.enableBandwidthControl(false);
- std::vector<std::string> expected = {
- "-F bw_INPUT",
- "-F bw_OUTPUT",
- "-F bw_FORWARD",
- "-F bw_happy_box",
- "-F bw_penalty_box",
- "-F bw_data_saver",
- "-F bw_costly_shared",
- "-t raw -F bw_raw_PREROUTING",
- "-t mangle -F bw_mangle_POSTROUTING",
- "-A bw_INPUT -m owner --socket-exists",
- "-A bw_OUTPUT -m owner --socket-exists",
- "-t raw -A bw_raw_PREROUTING -m owner --socket-exists",
- "-t mangle -A bw_mangle_POSTROUTING -m owner --socket-exists",
- "-A bw_costly_shared --jump bw_penalty_box",
- "-A bw_penalty_box --jump bw_happy_box",
- "-A bw_happy_box --jump bw_data_saver",
- "-A bw_data_saver -j RETURN",
- "-I bw_happy_box -m owner --uid-owner 0-9999 --jump RETURN",
- };
- expectIptablesCommands(expected);
+ std::string expectedFlush =
+ "*filter\n"
+ ":bw_INPUT -\n"
+ ":bw_OUTPUT -\n"
+ ":bw_FORWARD -\n"
+ ":bw_happy_box -\n"
+ ":bw_penalty_box -\n"
+ ":bw_data_saver -\n"
+ ":bw_costly_shared -\n"
+ "COMMIT\n"
+ "*raw\n"
+ ":bw_raw_PREROUTING -\n"
+ "COMMIT\n"
+ "*mangle\n"
+ ":bw_mangle_POSTROUTING -\n"
+ "COMMIT\n\x04";
+ std::string expectedAccounting =
+ "*filter\n"
+ "-A bw_INPUT -m owner --socket-exists\n"
+ "-A bw_OUTPUT -m owner --socket-exists\n"
+ "-A bw_costly_shared --jump bw_penalty_box\n"
+ "-A bw_penalty_box --jump bw_happy_box\n"
+ "-A bw_happy_box --jump bw_data_saver\n"
+ "-A bw_data_saver -j RETURN\n"
+ "-I bw_happy_box -m owner --uid-owner 0-9999 --jump RETURN\n"
+ "COMMIT\n"
+ "*raw\n"
+ "-A bw_raw_PREROUTING -m owner --socket-exists\n"
+ "COMMIT\n"
+ "*mangle\n"
+ "-A bw_mangle_POSTROUTING -m owner --socket-exists\n"
+ "COMMIT\n\x04";
+
+ expectIptablesRestoreCommands({ expectedFlush, expectedAccounting });
}
TEST_F(BandwidthControllerTest, TestDisableBandwidthControl) {
mBw.disableBandwidthControl();
- std::vector<std::string> expected = {
- "-F bw_INPUT",
- "-F bw_OUTPUT",
- "-F bw_FORWARD",
- "-F bw_happy_box",
- "-F bw_penalty_box",
- "-F bw_data_saver",
- "-F bw_costly_shared",
- "-t raw -F bw_raw_PREROUTING",
- "-t mangle -F bw_mangle_POSTROUTING",
- };
- expectIptablesCommands(expected);
+ const std::string expected =
+ "*filter\n"
+ ":bw_INPUT -\n"
+ ":bw_OUTPUT -\n"
+ ":bw_FORWARD -\n"
+ ":bw_happy_box -\n"
+ ":bw_penalty_box -\n"
+ ":bw_data_saver -\n"
+ ":bw_costly_shared -\n"
+ "COMMIT\n"
+ "*raw\n"
+ ":bw_raw_PREROUTING -\n"
+ "COMMIT\n"
+ "*mangle\n"
+ ":bw_mangle_POSTROUTING -\n"
+ "COMMIT\n\x04";
+ expectIptablesRestoreCommands({ expected });
}
TEST_F(BandwidthControllerTest, TestEnableDataSaver) {