From 90e009be6c9b959bd693bd1d1211316efcc80670 Mon Sep 17 00:00:00 2001 From: Ken Chen Date: Sat, 4 Nov 2023 16:10:34 +0800 Subject: [PATCH] [Test] Fix DNS resolver MTS failures In MTS, test infra installs only the DNS resolver module without installing tethering module. The test utils should not assume the BPF maps defined in tethering will be in the device. Bug: 309164580 Test: atest resolv_integration_test:ResolverTest#BlockDnsQueryWithUidRule Change-Id: I2c7349a11c9b413c129c93d236c8280588097cf7 --- tests/native/utilities/firewall.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/native/utilities/firewall.cpp b/tests/native/utilities/firewall.cpp index 6e35d07efd..22f83e8ed4 100644 --- a/tests/native/utilities/firewall.cpp +++ b/tests/native/utilities/firewall.cpp @@ -28,8 +28,11 @@ Firewall::Firewall() { result = mUidOwnerMap.init(UID_OWNER_MAP_PATH); EXPECT_RESULT_OK(result) << "init mUidOwnerMap failed"; - result = mDataSaverEnabledMap.init(DATA_SAVER_ENABLED_MAP_PATH); - EXPECT_RESULT_OK(result) << "init mDataSaverEnabledMap failed"; + // Do not check whether DATA_SAVER_ENABLED_MAP_PATH init succeeded or failed since the map is + // defined in tethering module, but the user of this class may be in other modules. For example, + // DNS resolver tests statically link to this class. But when running MTS, the test infra + // installs only DNS resolver module without installing tethering module together. + mDataSaverEnabledMap.init(DATA_SAVER_ENABLED_MAP_PATH); } Firewall* Firewall::getInstance() { @@ -122,6 +125,10 @@ Result Firewall::removeUidInterfaceRules(const std::vector& uids) Result Firewall::getDataSaverSetting() { std::lock_guard guard(mMutex); + if (!mDataSaverEnabledMap.isValid()) { + return Errorf("init mDataSaverEnabledMap failed"); + } + auto dataSaverSetting = mDataSaverEnabledMap.readValue(DATA_SAVER_ENABLED_KEY); if (!dataSaverSetting.ok()) { return Errorf("Cannot read the data saver setting: {}", dataSaverSetting.error().message()); @@ -131,6 +138,10 @@ Result Firewall::getDataSaverSetting() { Result Firewall::setDataSaver(bool enabled) { std::lock_guard guard(mMutex); + if (!mDataSaverEnabledMap.isValid()) { + return Errorf("init mDataSaverEnabledMap failed"); + } + auto res = mDataSaverEnabledMap.writeValue(DATA_SAVER_ENABLED_KEY, enabled, BPF_EXIST); if (!res.ok()) return Errorf("Failed to set data saver: {}", res.error().message());