Support pretending that certain iptables commands failed.

Bug: 28362720
Test: see subsequent CL.
Change-Id: Id4db5f481bd94ae04d2a5cf7c5c97be1f000c3c9
diff --git a/server/IptablesBaseTest.cpp b/server/IptablesBaseTest.cpp
index faa7433..f879fe6 100644
--- a/server/IptablesBaseTest.cpp
+++ b/server/IptablesBaseTest.cpp
@@ -33,6 +33,7 @@
 IptablesBaseTest::IptablesBaseTest() {
     sCmds.clear();
     sRestoreCmds.clear();
+    sReturnValues.clear();
 }
 
 int IptablesBaseTest::fake_android_fork_exec(int argc, char* argv[], int *status, bool, bool) {
@@ -43,10 +44,19 @@
         cmd += argv[i];
     }
     sCmds.push_back(cmd);
-    if (status) {
-        *status = 0;
+
+    int ret;
+    if (sReturnValues.size()) {
+        ret = sReturnValues.front();
+        sReturnValues.pop_front();
+    } else {
+        ret = 0;
     }
-    return 0;
+
+    if (status) {
+        *status = ret;
+    }
+    return ret;
 }
 
 int IptablesBaseTest::fakeExecIptables(IptablesTarget target, ...) {
@@ -169,7 +179,12 @@
     sRestoreCmds.clear();
 }
 
+void IptablesBaseTest::setReturnValues(const std::deque<int>& returnValues) {
+    sReturnValues = returnValues;
+}
+
 std::vector<std::string> IptablesBaseTest::sCmds = {};
 IptablesBaseTest::ExpectedIptablesCommands IptablesBaseTest::sRestoreCmds = {};
 std::deque<std::string> IptablesBaseTest::sPopenContents = {};
 std::deque<std::string> IptablesBaseTest::sIptablesRestoreOutput = {};
+std::deque<int> IptablesBaseTest::sReturnValues = {};