1 #include "modem_log_dumper.h"
2
3 #include <string_view>
4
5 #include "android_property_manager.h"
6 #include "bugreport_constants.h"
7 #include "dumper.h"
8 #include "fake_android_property_manager.h"
9 #include "gmock/gmock.h"
10 #include "gtest/gtest.h"
11 #include "modem_log_constants.h"
12
13 namespace pixel_modem::logging {
14 namespace {
15
16 using ::testing::Eq;
17
18 inline constexpr static std::string_view kFakePilotLoggingPath =
19 "//pilot/logging/path";
20 inline constexpr static std::string_view kFakeOnDemandLoggingPath =
21 "//on/demand/logging/path";
22 inline constexpr static LogDumpInfo kAlwaysOnLogDumpInfo = {
23 kModemAlwaysOnLogDirectory, kBugreportPackingDirectory,
24 kDefaultBugreportNumberFiles, kModemLogPrefix};
25
StartModemLogging(FakeAndroidPropertyManager & fake_android_property_manager)26 void StartModemLogging(
27 FakeAndroidPropertyManager& fake_android_property_manager) {
28 fake_android_property_manager.SetProperty(kModemLoggingEnabledProperty.data(),
29 kTruthString.data());
30 }
31
32 class MockDumper : public Dumper {
33 public:
34 ~MockDumper() = default;
35 MOCK_METHOD(void, DumpLogs, (const LogDumpInfo&), (override));
36 MOCK_METHOD(void, CopyFile, (const FileCopyInfo&), (override));
37 };
38
39 class ModemLogDumperTest : public ::testing::Test {
40 protected:
ModemLogDumperTest()41 ModemLogDumperTest()
42 : modem_log_dumper(mock_dumper, fake_android_property_manager) {}
43
SetUp()44 void SetUp() override {
45 // set default logging mode to always on logging
46 fake_android_property_manager.SetProperty(
47 kModemLoggingPathProperty.data(), kModemAlwaysOnLogDirectory.data());
48 }
49
50 MockDumper mock_dumper;
51 FakeAndroidPropertyManager fake_android_property_manager;
52 ModemLogDumper modem_log_dumper;
53 };
54
TEST_F(ModemLogDumperTest,DumpLogsDumpsAllDirectoriesAndCopiesAllFiles)55 TEST_F(ModemLogDumperTest, DumpLogsDumpsAllDirectoriesAndCopiesAllFiles) {
56 EXPECT_CALL(mock_dumper, DumpLogs(Eq(kAlwaysOnLogDumpInfo)));
57
58 for (const LogDumpInfo& log_dump_info : kLogDumpInfo) {
59 EXPECT_CALL(mock_dumper, DumpLogs(Eq(log_dump_info)));
60 }
61
62 for (const FileCopyInfo& fileCopyInfo : kFileCopyInfo) {
63 EXPECT_CALL(mock_dumper, CopyFile(Eq(fileCopyInfo)));
64 }
65
66 modem_log_dumper.DumpModemLogs();
67 }
68
TEST_F(ModemLogDumperTest,DumpLogsRestartModemLoggingWhenEnabled)69 TEST_F(ModemLogDumperTest, DumpLogsRestartModemLoggingWhenEnabled) {
70 StartModemLogging(fake_android_property_manager);
71
72 modem_log_dumper.DumpModemLogs();
73
74 EXPECT_TRUE(fake_android_property_manager.ModemLoggingHasRestarted());
75 }
76
TEST_F(ModemLogDumperTest,DumpLogsDoesNotRestartModemLoggingWhenDisabled)77 TEST_F(ModemLogDumperTest, DumpLogsDoesNotRestartModemLoggingWhenDisabled) {
78 modem_log_dumper.DumpModemLogs();
79
80 EXPECT_FALSE(fake_android_property_manager.ModemLoggingHasRestarted());
81 }
82
TEST_F(ModemLogDumperTest,DumpLogsDoesNotRestartModemLoggingWhenPilotEnabled)83 TEST_F(ModemLogDumperTest, DumpLogsDoesNotRestartModemLoggingWhenPilotEnabled) {
84 // Enable PILOT
85 fake_android_property_manager.SetProperty(kModemLoggingPathProperty.data(),
86 kFakePilotLoggingPath.data());
87 StartModemLogging(fake_android_property_manager);
88
89 modem_log_dumper.DumpModemLogs();
90
91 EXPECT_FALSE(fake_android_property_manager.ModemLoggingHasRestarted());
92 }
93
TEST_F(ModemLogDumperTest,DumpLogsDoesNotRestartModemLoggingWhenOnDemandLoggingEnabled)94 TEST_F(ModemLogDumperTest,
95 DumpLogsDoesNotRestartModemLoggingWhenOnDemandLoggingEnabled) {
96 // Enable On Demand Logging
97 fake_android_property_manager.SetProperty(kModemLoggingPathProperty.data(),
98 kFakeOnDemandLoggingPath.data());
99 StartModemLogging(fake_android_property_manager);
100
101 modem_log_dumper.DumpModemLogs();
102
103 EXPECT_FALSE(fake_android_property_manager.ModemLoggingHasRestarted());
104 }
105
106 } // namespace
107 } // namespace pixel_modem::logging
108