Remove bpf map iterator class
The bpf map iterator class implementation is not very helpful since the
map iterate process may fail because of the bpf syscall. So using a
iterator to go through the map is not very robust if it cannot through
exceptions when it failed. Instead, the map class will have some iterate
function that go through the map and apply operations based on the
lambda function passed in. And it can return failure when the
actual bpf syscall failed.
Bug: 78250686
Test: ./libbpf_test
Change-Id: Ie431ebd6e46c228347c3852fb5b3556534088439
diff --git a/server/TrafficControllerTest.cpp b/server/TrafficControllerTest.cpp
index c7b6f48..eb9ad43 100644
--- a/server/TrafficControllerTest.cpp
+++ b/server/TrafficControllerTest.cpp
@@ -151,8 +151,6 @@
void expectNoTag(uint64_t cookie) { EXPECT_FALSE(isOk(mFakeCookieTagMap.readValue(cookie))); }
- void expectTagMapEmpty() { EXPECT_FALSE(isOk(mFakeCookieTagMap.getFirstKey())); }
-
void populateFakeStats(uint64_t cookie, uint32_t uid, uint32_t tag, StatsKey* key) {
UidTag cookieMapkey = {.uid = (uint32_t)uid, .tag = tag};
EXPECT_TRUE(isOk(mFakeCookieTagMap.writeValue(cookie, cookieMapkey, BPF_ANY)));
@@ -238,6 +236,18 @@
}
}
+ void expectMapEmpty(BpfMap<uint64_t, UidTag>& map) {
+ auto isEmpty = map.isEmpty();
+ EXPECT_TRUE(isOk(isEmpty));
+ EXPECT_TRUE(isEmpty.value());
+ }
+
+ void expectMapEmpty(BpfMap<uint32_t, uint8_t>& map) {
+ auto isEmpty = map.isEmpty();
+ ASSERT_TRUE(isOk(isEmpty));
+ ASSERT_TRUE(isEmpty.value());
+ }
+
void TearDown() {
std::lock_guard<std::mutex> ownerGuard(mTc.mOwnerMatchMutex);
mFakeCookieTagMap.reset();
@@ -259,7 +269,7 @@
expectUidTag(sockCookie, TEST_UID, TEST_TAG);
ASSERT_EQ(0, mTc.untagSocket(v4socket));
expectNoTag(sockCookie);
- expectTagMapEmpty();
+ expectMapEmpty(mFakeCookieTagMap);
}
TEST_F(TrafficControllerTest, TestReTagSocket) {
@@ -295,7 +305,7 @@
expectUidTag(sockCookie, TEST_UID, TEST_TAG);
ASSERT_EQ(0, mTc.untagSocket(v6socket));
expectNoTag(sockCookie);
- expectTagMapEmpty();
+ expectMapEmpty(mFakeCookieTagMap);
}
TEST_F(TrafficControllerTest, TestTagInvalidSocket) {
@@ -303,7 +313,7 @@
int invalidSocket = -1;
ASSERT_GT(0, mTc.tagSocket(invalidSocket, TEST_TAG, TEST_UID));
- expectTagMapEmpty();
+ expectMapEmpty(mFakeCookieTagMap);
}
TEST_F(TrafficControllerTest, TestUntagInvalidSocket) {
@@ -313,7 +323,7 @@
ASSERT_GT(0, mTc.untagSocket(invalidSocket));
int v4socket = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
ASSERT_GT(0, mTc.untagSocket(v4socket));
- expectTagMapEmpty();
+ expectMapEmpty(mFakeCookieTagMap);
}
TEST_F(TrafficControllerTest, TestSetCounterSet) {
@@ -326,7 +336,7 @@
ASSERT_EQ(TEST_COUNTERSET, counterSetResult.value());
ASSERT_EQ(0, mTc.setCounterSet(DEFAULT_COUNTERSET, TEST_UID));
ASSERT_FALSE(isOk(mFakeUidCounterSetMap.readValue(uid)));
- ASSERT_FALSE(isOk(mFakeUidCounterSetMap.getFirstKey()));
+ expectMapEmpty(mFakeUidCounterSetMap);
}
TEST_F(TrafficControllerTest, TestSetInvalidCounterSet) {
@@ -335,7 +345,7 @@
ASSERT_GT(0, mTc.setCounterSet(OVERFLOW_COUNTERSET, TEST_UID));
uid_t uid = TEST_UID;
ASSERT_FALSE(isOk(mFakeUidCounterSetMap.readValue(uid)));
- ASSERT_FALSE(isOk(mFakeUidCounterSetMap.getFirstKey()));
+ expectMapEmpty(mFakeUidCounterSetMap);
}
TEST_F(TrafficControllerTest, TestDeleteTagData) {
@@ -505,7 +515,7 @@
expectBandwidthMapValues(appStrUids, BLACKLISTMATCH);
ASSERT_TRUE(isOk(mTc.updateBandwidthUidMap(appStrUids, BandwidthController::IptJumpReject,
BandwidthController::IptOpDelete)));
- ASSERT_FALSE(isOk(mFakeBandwidthUidMap.getFirstKey()));
+ expectMapEmpty(mFakeBandwidthUidMap);
}
TEST_F(TrafficControllerTest, TestWhitelistUidMatch) {
@@ -517,7 +527,7 @@
expectBandwidthMapValues(appStrUids, WHITELISTMATCH);
ASSERT_TRUE(isOk(mTc.updateBandwidthUidMap(appStrUids, BandwidthController::IptJumpReturn,
BandwidthController::IptOpDelete)));
- ASSERT_FALSE(isOk(mFakeBandwidthUidMap.getFirstKey()));
+ expectMapEmpty(mFakeBandwidthUidMap);
}
TEST_F(TrafficControllerTest, TestReplaceMatchUid) {
@@ -548,7 +558,7 @@
// If the uid does not exist in the map, trying to delete a rule about it will fail.
ASSERT_FALSE(isOk(mTc.updateBandwidthUidMap(appStrUids, BandwidthController::IptJumpReject,
BandwidthController::IptOpDelete)));
- ASSERT_FALSE(isOk(mFakeBandwidthUidMap.getFirstKey()));
+ expectMapEmpty(mFakeBandwidthUidMap);
// Add blacklist rules for appStrUids.
ASSERT_TRUE(isOk(mTc.updateBandwidthUidMap(appStrUids, BandwidthController::IptJumpReturn,