Support reading output from IptablesRestoreController.
Add the ability to IptablesRestoreController to return the output
of a command. This is useful to run commands that list chains or
return counters through the ip[6]tables-restore.
Also enable unsigned-integer-overflow sanitization the unit tests
because their behaviour should be representative of actual code.
Having address sanitization enabled would have saved a fair
amount of time debugging an on-device abort() that did not affect
the tests.
Test: new unit test passes
Bug: 32323979
Change-Id: I70726ebbade0cb792aba38787c57378df177f2d8
diff --git a/server/IptablesBaseTest.cpp b/server/IptablesBaseTest.cpp
index b52ff9b..faa7433 100644
--- a/server/IptablesBaseTest.cpp
+++ b/server/IptablesBaseTest.cpp
@@ -82,11 +82,23 @@
return popen(realCmd.c_str(), "r");
}
-int IptablesBaseTest::fakeExecIptablesRestore(IptablesTarget target, const std::string& commands) {
+int IptablesBaseTest::fakeExecIptablesRestoreWithOutput(IptablesTarget target,
+ const std::string& commands,
+ std::string *output) {
sRestoreCmds.push_back({ target, commands });
+ if (output != nullptr) {
+ *output = sIptablesRestoreOutput.size() ? sIptablesRestoreOutput.front().c_str() : "";
+ }
+ if (sIptablesRestoreOutput.size()) {
+ sIptablesRestoreOutput.pop_front();
+ }
return 0;
}
+int IptablesBaseTest::fakeExecIptablesRestore(IptablesTarget target, const std::string& commands) {
+ return fakeExecIptablesRestoreWithOutput(target, commands, nullptr);
+}
+
int IptablesBaseTest::expectIptablesCommand(IptablesTarget target, int pos,
const std::string& cmd) {
@@ -160,3 +172,4 @@
std::vector<std::string> IptablesBaseTest::sCmds = {};
IptablesBaseTest::ExpectedIptablesCommands IptablesBaseTest::sRestoreCmds = {};
std::deque<std::string> IptablesBaseTest::sPopenContents = {};
+std::deque<std::string> IptablesBaseTest::sIptablesRestoreOutput = {};