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