Files
Ken Chen 38cf698179 [NETD-BPF#1] Move libnetdutils to framework/libs/net/...
libnetdutils is referenced by netd.c and TrafficController.cpp, which
are going to be mainlined. Therefore, move libnetdutils to a common
place where both mainline module and platform code (Netd) can refer to.

Bug: 202086915
Test: build; flash; cd system/netd; atest
No-Typo-Check: Clean code move with no other changes.
BYPASS_INCLUSIVE_LANGUAGE_REASON=Clean code move with no other changes.

Merged-In: I645bfe35f6543149c9a9f894cd4158d27a481abe
Change-Id: I645bfe35f6543149c9a9f894cd4158d27a481abe
2021-11-20 17:10:41 +08:00

144 lines
3.8 KiB
C++

/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include "netdutils/Log.h"
android::netdutils::LogEntry globalFunctionName() {
return android::netdutils::LogEntry().function(__FUNCTION__);
}
android::netdutils::LogEntry globalPrettyFunctionName() {
return android::netdutils::LogEntry().prettyFunction(__PRETTY_FUNCTION__);
}
namespace android {
namespace netdutils {
namespace {
LogEntry functionName() {
return LogEntry().function(__FUNCTION__);
}
LogEntry prettyFunctionName() {
return LogEntry().prettyFunction(__PRETTY_FUNCTION__);
}
} // namespace
class AAA {
public:
AAA() = default;
LogEntry functionName() {
return LogEntry().function(__FUNCTION__);
}
LogEntry prettyFunctionName() {
return LogEntry().prettyFunction(__PRETTY_FUNCTION__);
}
class BBB {
public:
BBB() = default;
LogEntry functionName() {
return LogEntry().function(__FUNCTION__);
}
LogEntry prettyFunctionName() {
return LogEntry().prettyFunction(__PRETTY_FUNCTION__);
}
};
};
TEST(LogEntryTest, Empty) {
LogEntry empty;
EXPECT_EQ("", empty.toString());
}
TEST(LogEntryTest, GlobalFunction) {
EXPECT_EQ("globalFunctionName()", ::globalFunctionName().toString());
}
TEST(LogEntryTest, GlobalPrettyFunction) {
EXPECT_EQ("globalPrettyFunctionName()", ::globalPrettyFunctionName().toString());
}
TEST(LogEntryTest, UnnamedNamespaceFunction) {
const LogEntry entry = functionName();
EXPECT_EQ("functionName()", entry.toString());
}
TEST(LogEntryTest, UnnamedNamespacePrettyFunction) {
const LogEntry entry = prettyFunctionName();
EXPECT_EQ("prettyFunctionName()", entry.toString());
}
TEST(LogEntryTest, ClassFunction) {
const LogEntry entry = AAA().functionName();
EXPECT_EQ("functionName()", entry.toString());
}
TEST(LogEntryTest, ClassPrettyFunction) {
const LogEntry entry = AAA().prettyFunctionName();
EXPECT_EQ("AAA::prettyFunctionName()", entry.toString());
}
TEST(LogEntryTest, InnerClassFunction) {
const LogEntry entry = AAA::BBB().functionName();
EXPECT_EQ("functionName()", entry.toString());
}
TEST(LogEntryTest, InnerClassPrettyFunction) {
const LogEntry entry = AAA::BBB().prettyFunctionName();
EXPECT_EQ("BBB::prettyFunctionName()", entry.toString());
}
TEST(LogEntryTest, PrintChainedArguments) {
const LogEntry entry = LogEntry()
.function("testFunc")
.arg("hello")
.arg(42)
.arg(true);
EXPECT_EQ("testFunc(hello, 42, true)", entry.toString());
}
TEST(LogEntryTest, PrintIntegralTypes) {
const LogEntry entry = LogEntry()
.function("testFunc")
.arg('A')
.arg(100U)
.arg(-1000LL);
EXPECT_EQ("testFunc(65, 100, -1000)", entry.toString());
}
TEST(LogEntryTest, PrintHex) {
const std::vector<uint8_t> buf{0xDE, 0xAD, 0xBE, 0xEF};
const LogEntry entry = LogEntry().function("testFunc").arg(buf);
EXPECT_EQ("testFunc({deadbeef})", entry.toString());
}
TEST(LogEntryTest, PrintArgumentPack) {
const LogEntry entry = LogEntry().function("testFunc").args("hello", 42, false);
EXPECT_EQ("testFunc(hello, 42, false)", entry.toString());
}
} // namespace netdutils
} // namespace android