diff --git a/adb/bugreport.cpp b/adb/bugreport.cpp index d0cc072ab..372a3b4aa 100644 --- a/adb/bugreport.cpp +++ b/adb/bugreport.cpp @@ -149,7 +149,7 @@ class BugreportStandardStreamsCallback : public StandardStreamsCallbackInterface int progress = std::stoi(line.substr(idx1, (idx2 - idx1))); int total = std::stoi(line.substr(idx2 + 1)); int progress_percentage = (progress * 100 / total); - if (progress_percentage <= last_progress_percentage_) { + if (progress_percentage != 0 && progress_percentage <= last_progress_percentage_) { // Ignore. return; } diff --git a/adb/bugreport_test.cpp b/adb/bugreport_test.cpp index 2b368d7be..d3787b40a 100644 --- a/adb/bugreport_test.cpp +++ b/adb/bugreport_test.cpp @@ -311,6 +311,29 @@ TEST_F(BugreportTest, OkProgressAlwaysForward) { ASSERT_EQ(0, br_.DoIt(kTransportLocal, "HannibalLecter", 2, args)); } +// Tests 'adb bugreport file.zip' when it succeeds and displays the initial progress of 0% +TEST_F(BugreportTest, OkProgressZeroPercentIsNotIgnored) { + ExpectBugreportzVersion("1.1"); + ExpectProgress(0); + ExpectProgress(1); + // clang-format off + EXPECT_CALL(br_, SendShellCommand(kTransportLocal, "HannibalLecter", "bugreportz -p", false, _)) + // NOTE: DoAll accepts at most 10 arguments, and we're almost reached that limit... + .WillOnce(DoAll( + WithArg<4>(WriteOnStdout("BEGIN:/device/bugreport.zip\n")), + WithArg<4>(WriteOnStdout("PROGRESS:1/100000\n")), + WithArg<4>(WriteOnStdout("PROGRESS:1/100\n")), // 1% + WithArg<4>(WriteOnStdout("OK:/device/bugreport.zip")), + WithArg<4>(ReturnCallbackDone()))); + // clang-format on + EXPECT_CALL(br_, DoSyncPull(ElementsAre(StrEq("/device/bugreport.zip")), StrEq("file.zip"), + true, StrEq("pulling file.zip"))) + .WillOnce(Return(true)); + + const char* args[] = {"bugreport", "file.zip"}; + ASSERT_EQ(0, br_.DoIt(kTransportLocal, "HannibalLecter", 2, args)); +} + // Tests 'adb bugreport dir' when it succeeds and destination is a directory. TEST_F(BugreportTest, OkDirectory) { ExpectBugreportzVersion("1.1");