164 lines
4.2 KiB
C++
164 lines
4.2 KiB
C++
/*
|
|
* 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
|