system/chre/host/test/hal_generic/aidl/event_logger_test.cc

164 lines
4.2 KiB
C++
Raw Permalink Normal View History

2025-08-25 08:01:50 +08:00
/*
* Copyright (C) 2022 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 "host/hal_generic/aidl/event_logger.h"
#include "aidl/android/hardware/contexthub/NanoappBinary.h"
#include "chre_host/generated/host_messages_generated.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
namespace aidl::android::hardware::contexthub {
namespace {
using ::testing::IsEmpty;
using ::testing::Not;
// Exposes protected members for testing.
class TestEventLogger : public EventLogger {
public:
void setNowMs(int64_t ms) {
mNowMs = ms;
}
using EventLogger::NanoappLoad;
const auto &nanoappLoads() {
return mNanoappLoads;
}
const auto &nanoappUnloads() {
return mNanoappUnloads;
}
const auto &contextHubRestarts() {
return mContextHubRestarts;
}
const auto &messagesToNanoapp() {
return mMsgToNanoapp;
}
const auto &messagesFromNanoapp() {
return mMsgFromNanoapp;
}
};
TEST(EventLogger, keepTheMostRecentNanoappLoads) {
TestEventLogger log;
for (int i = 0; i < EventLogger::kMaxNanoappEvents + 10; ++i) {
NanoappBinary app;
app.nanoappId = i;
log.logNanoappLoad(app, true);
}
EXPECT_EQ(log.nanoappLoads().size(), EventLogger::kMaxNanoappEvents);
for (int i = 0; i < EventLogger::kMaxNanoappEvents; ++i) {
EXPECT_EQ(log.nanoappLoads()[i].id, i + 10);
}
}
TEST(EventLogger, keepTheMostRecentNanoappUnloads) {
TestEventLogger log;
for (int i = 0; i < EventLogger::kMaxNanoappEvents + 10; ++i) {
log.logNanoappUnload(i, true);
}
EXPECT_EQ(log.nanoappUnloads().size(), EventLogger::kMaxNanoappEvents);
for (int i = 0; i < EventLogger::kMaxNanoappEvents; ++i) {
EXPECT_EQ(log.nanoappUnloads()[i].id, i + 10);
}
}
TEST(EventLogger, keepTheMostRecentContextHubRestarts) {
TestEventLogger log;
for (int i = 0; i < EventLogger::kMaxRestartEvents + 10; ++i) {
log.setNowMs(i);
log.logContextHubRestart();
}
EXPECT_EQ(log.contextHubRestarts().size(), EventLogger::kMaxRestartEvents);
for (int i = 0; i < EventLogger::kMaxRestartEvents; ++i) {
EXPECT_EQ(log.contextHubRestarts()[i], i + 10);
}
}
TEST(EventLogger, keepTheMostRecentMessagesToNanoapp) {
TestEventLogger log;
for (int i = 0; i < EventLogger::kMaxMessageEvents + 10; ++i) {
ContextHubMessage msg;
msg.nanoappId = i;
log.logMessageToNanoapp(msg, true);
}
EXPECT_EQ(log.messagesToNanoapp().size(), EventLogger::kMaxMessageEvents);
for (int i = 0; i < EventLogger::kMaxMessageEvents; ++i) {
EXPECT_EQ(log.messagesToNanoapp()[i].id, i + 10);
}
}
TEST(EventLogger, keepTheMostRecentMessagesFromNanoapp) {
TestEventLogger log;
for (int i = 0; i < EventLogger::kMaxMessageEvents + 10; ++i) {
chre::fbs::NanoappMessageT msg;
msg.app_id = i;
log.logMessageFromNanoapp(msg);
}
EXPECT_EQ(log.messagesFromNanoapp().size(), EventLogger::kMaxMessageEvents);
for (int i = 0; i < EventLogger::kMaxMessageEvents; ++i) {
EXPECT_EQ(log.messagesFromNanoapp()[i].id, i + 10);
}
}
TEST(EventLogger, dumpTheEventsAsString) {
TestEventLogger log;
log.setNowMs(10);
NanoappBinary app;
app.nanoappId = 1;
app.nanoappVersion = 2;
app.customBinary = {1, 2, 3};
log.logNanoappLoad(app, true);
log.setNowMs(20);
log.logNanoappUnload(2, true);
log.setNowMs(30);
log.logContextHubRestart();
log.setNowMs(40);
ContextHubMessage toMsg;
toMsg.nanoappId = 4;
toMsg.messageBody = {1, 2, 3};
log.logMessageToNanoapp(toMsg, true);
log.setNowMs(50);
chre::fbs::NanoappMessageT fromMsg;
fromMsg.app_id = 5;
fromMsg.message = {1, 2, 3};
log.logMessageFromNanoapp(fromMsg);
EXPECT_THAT(log.dump(), Not(IsEmpty()));
}
} // namespace
} // namespace aidl::android::hardware::contexthub