Allow background networking for test uids am: b7574d4e63

Original change: https://android-review.googlesource.com/c/platform/packages/modules/DnsResolver/+/2966043

Change-Id: I2d14840c95228172990ad151a189b82c5115b842
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/tests/Android.bp b/tests/Android.bp
index 7f10d37..7cb4a2a 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -285,6 +285,7 @@
         "netd_aidl_interface-lateststable-ndk",
         "netd_event_listener_interface-lateststable-ndk",
         "libcrypto_static",
+        "libconnectivity_native_test_utils",
         "libcutils",
         "libdoh_ffi_for_test",
         "libgmock",
diff --git a/tests/resolv_callback_unit_test.cpp b/tests/resolv_callback_unit_test.cpp
index 6814697..391951b 100644
--- a/tests/resolv_callback_unit_test.cpp
+++ b/tests/resolv_callback_unit_test.cpp
@@ -108,6 +108,7 @@
         initDnsResolverCallbacks();
         // Create cache for test
         android::net::gDnsResolv->resolverCtrl.createNetworkCache(TEST_NETID);
+        AllowNetworkInBackground(TEST_UID, true);
     }
 
     void TearDown() override {
@@ -116,6 +117,7 @@
         resetDnsResolverCallbacks();
         // Delete cache for test
         android::net::gDnsResolv->resolverCtrl.destroyNetworkCache(TEST_NETID);
+        AllowNetworkInBackground(TEST_UID, false);
     }
 
     int SetResolvers() {
diff --git a/tests/resolv_integration_test.cpp b/tests/resolv_integration_test.cpp
index d3e0c59..a7cc7a8 100644
--- a/tests/resolv_integration_test.cpp
+++ b/tests/resolv_integration_test.cpp
@@ -221,8 +221,14 @@
         // Start the binder thread pool for listening DNS metrics events and receiving death
         // recipient.
         ABinderProcess_startThreadPool();
+        AllowNetworkInBackground(TEST_UID, true);
+        AllowNetworkInBackground(TEST_UID2, true);
     }
-    static void TearDownTestSuite() { AIBinder_DeathRecipient_delete(sResolvDeathRecipient); }
+    static void TearDownTestSuite() {
+        AIBinder_DeathRecipient_delete(sResolvDeathRecipient);
+        AllowNetworkInBackground(TEST_UID, false);
+        AllowNetworkInBackground(TEST_UID2, false);
+    }
 
   protected:
     void SetUp() {
diff --git a/tests/resolv_test_utils.cpp b/tests/resolv_test_utils.cpp
index 4b09b21..a1a9e4e 100644
--- a/tests/resolv_test_utils.cpp
+++ b/tests/resolv_test_utils.cpp
@@ -21,6 +21,7 @@
 
 #include <android-base/chrono_utils.h>
 #include <android-base/logging.h>
+#include <firewall.h>
 
 using android::netdutils::ScopedAddrinfo;
 
@@ -230,6 +231,18 @@
     EXPECT_EQ(0, ForkAndRun(args_v6));
 }
 
+void AllowNetworkInBackground(int uid, bool allow) {
+    if (android::modules::sdklevel::IsAtLeastV()) {
+        // Background networking is always allowed on earlier versions.
+        Firewall* firewall = Firewall::getInstance();
+        if (allow) {
+            firewall->addRule(uid, BACKGROUND_MATCH);
+        } else {
+            firewall->removeRule(uid, BACKGROUND_MATCH);
+        }
+    }
+}
+
 bool is64bitAbi() {
     return android::base::GetProperty("ro.product.cpu.abi", "").find("64") != std::string::npos;
 }
diff --git a/tests/resolv_test_utils.h b/tests/resolv_test_utils.h
index e3f744c..7dc1c99 100644
--- a/tests/resolv_test_utils.h
+++ b/tests/resolv_test_utils.h
@@ -431,6 +431,7 @@
 
 void SetMdnsRoute();
 void RemoveMdnsRoute();
+void AllowNetworkInBackground(int uid, bool allow);
 
 #define SKIP_IF_BEFORE_T                                                         \
     do {                                                                         \