1*7eba2f3bSAndroid Build Coastguard Worker //
2*7eba2f3bSAndroid Build Coastguard Worker // Copyright (C) 2024 The Android Open Source Project
3*7eba2f3bSAndroid Build Coastguard Worker //
4*7eba2f3bSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*7eba2f3bSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*7eba2f3bSAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*7eba2f3bSAndroid Build Coastguard Worker //
8*7eba2f3bSAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
9*7eba2f3bSAndroid Build Coastguard Worker //
10*7eba2f3bSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*7eba2f3bSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*7eba2f3bSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*7eba2f3bSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*7eba2f3bSAndroid Build Coastguard Worker // limitations under the License.
15*7eba2f3bSAndroid Build Coastguard Worker //
16*7eba2f3bSAndroid Build Coastguard Worker #include "debug_lmrt.h"
17*7eba2f3bSAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*7eba2f3bSAndroid Build Coastguard Worker #include <gmock/gmock.h>
19*7eba2f3bSAndroid Build Coastguard Worker
20*7eba2f3bSAndroid Build Coastguard Worker
21*7eba2f3bSAndroid Build Coastguard Worker extern lmrt_payload_t lmrt_payloads;
22*7eba2f3bSAndroid Build Coastguard Worker class MockLogger {
23*7eba2f3bSAndroid Build Coastguard Worker public:
24*7eba2f3bSAndroid Build Coastguard Worker MOCK_METHOD(void, logVerbose, (const std::string& message), ());
25*7eba2f3bSAndroid Build Coastguard Worker };
26*7eba2f3bSAndroid Build Coastguard Worker
27*7eba2f3bSAndroid Build Coastguard Worker // Global instance of the mock logger
28*7eba2f3bSAndroid Build Coastguard Worker MockLogger mock_logger_instance;
29*7eba2f3bSAndroid Build Coastguard Worker // Redefine the logging function to use the mock
logVerbose(const std::string & message)30*7eba2f3bSAndroid Build Coastguard Worker void logVerbose(const std::string& message) {
31*7eba2f3bSAndroid Build Coastguard Worker mock_logger_instance.logVerbose(message);
32*7eba2f3bSAndroid Build Coastguard Worker }
33*7eba2f3bSAndroid Build Coastguard Worker
34*7eba2f3bSAndroid Build Coastguard Worker class LmrtLogTest : public ::testing::Test {
35*7eba2f3bSAndroid Build Coastguard Worker protected:
SetUp()36*7eba2f3bSAndroid Build Coastguard Worker void SetUp() override {
37*7eba2f3bSAndroid Build Coastguard Worker // Reset mock expectations before each test
38*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose).Times(0);
39*7eba2f3bSAndroid Build Coastguard Worker }
TearDown()40*7eba2f3bSAndroid Build Coastguard Worker void TearDown() override {
41*7eba2f3bSAndroid Build Coastguard Worker testing::Mock::AllowLeak(&mock_logger_instance);
42*7eba2f3bSAndroid Build Coastguard Worker }
43*7eba2f3bSAndroid Build Coastguard Worker };
44*7eba2f3bSAndroid Build Coastguard Worker
45*7eba2f3bSAndroid Build Coastguard Worker // Test: Logging when payloads are empty
TEST_F(LmrtLogTest,LogEmptyLmrtPayloads)46*7eba2f3bSAndroid Build Coastguard Worker TEST_F(LmrtLogTest, LogEmptyLmrtPayloads) {
47*7eba2f3bSAndroid Build Coastguard Worker // Set up test data for empty payloads
48*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.more.clear();
49*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.entry_count.clear();
50*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.tlvs.clear();
51*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: No payloads to log"))
52*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
53*7eba2f3bSAndroid Build Coastguard Worker lmrt_log();
54*7eba2f3bSAndroid Build Coastguard Worker }
55*7eba2f3bSAndroid Build Coastguard Worker
56*7eba2f3bSAndroid Build Coastguard Worker // Test: Logging a single LMRT payload
TEST_F(LmrtLogTest,LogSingleLmrtPayload)57*7eba2f3bSAndroid Build Coastguard Worker TEST_F(LmrtLogTest, LogSingleLmrtPayload) {
58*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.more = {1};
59*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.entry_count = {3};
60*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.tlvs = {{0x01, 0x02, 0x03}};
61*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: Packet 1/1"))
62*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
63*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: 3 entries in this packet"))
64*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
65*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: tlv: 010203"))
66*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
67*7eba2f3bSAndroid Build Coastguard Worker lmrt_log();
68*7eba2f3bSAndroid Build Coastguard Worker }
69*7eba2f3bSAndroid Build Coastguard Worker
70*7eba2f3bSAndroid Build Coastguard Worker // Test: Logging multiple LMRT payloads
TEST_F(LmrtLogTest,LogMultipleLmrtPayloads)71*7eba2f3bSAndroid Build Coastguard Worker TEST_F(LmrtLogTest, LogMultipleLmrtPayloads) {
72*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.more = {1, 0};
73*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.entry_count = {3, 2};
74*7eba2f3bSAndroid Build Coastguard Worker lmrt_payloads.tlvs = {
75*7eba2f3bSAndroid Build Coastguard Worker {0x01, 0x02, 0x03},
76*7eba2f3bSAndroid Build Coastguard Worker {0x04, 0x05}
77*7eba2f3bSAndroid Build Coastguard Worker };
78*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: Packet 1/2"))
79*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
80*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: 3 entries in this packet"))
81*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
82*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: tlv: 010203"))
83*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
84*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: Packet 2/2"))
85*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
86*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: 2 entries in this packet"))
87*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
88*7eba2f3bSAndroid Build Coastguard Worker EXPECT_CALL(mock_logger_instance, logVerbose("lmrt_log: tlv: 0405"))
89*7eba2f3bSAndroid Build Coastguard Worker .Times(1);
90*7eba2f3bSAndroid Build Coastguard Worker lmrt_log();
91*7eba2f3bSAndroid Build Coastguard Worker }
92