summaryrefslogtreecommitdiff
path: root/cmds/dumpstate/tests/dumpstate_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/dumpstate/tests/dumpstate_test.cpp')
-rw-r--r--cmds/dumpstate/tests/dumpstate_test.cpp383
1 files changed, 83 insertions, 300 deletions
diff --git a/cmds/dumpstate/tests/dumpstate_test.cpp b/cmds/dumpstate/tests/dumpstate_test.cpp
index db508b52bd..c7df1bb6a3 100644
--- a/cmds/dumpstate/tests/dumpstate_test.cpp
+++ b/cmds/dumpstate/tests/dumpstate_test.cpp
@@ -14,16 +14,15 @@
* limitations under the License.
*/
-#define LOG_TAG "dumpstate_test"
+#define LOG_TAG "dumpstate"
+#include <cutils/log.h>
#include "DumpstateInternal.h"
#include "DumpstateService.h"
#include "android/os/BnDumpstate.h"
#include "dumpstate.h"
-#include "DumpPool.h"
#include <gmock/gmock.h>
-#include <gmock/gmock-matchers.h>
#include <gtest/gtest.h>
#include <fcntl.h>
@@ -39,9 +38,7 @@
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <android/hardware/dumpstate/1.1/types.h>
-#include <cutils/log.h>
#include <cutils/properties.h>
-#include <ziparchive/zip_archive.h>
namespace android {
namespace os {
@@ -49,7 +46,6 @@ namespace dumpstate {
using ::android::hardware::dumpstate::V1_1::DumpstateMode;
using ::testing::EndsWith;
-using ::testing::Eq;
using ::testing::HasSubstr;
using ::testing::IsEmpty;
using ::testing::IsNull;
@@ -70,7 +66,8 @@ class DumpstateListenerMock : public IDumpstateListener {
MOCK_METHOD1(onError, binder::Status(int32_t error_code));
MOCK_METHOD0(onFinished, binder::Status());
MOCK_METHOD1(onScreenshotTaken, binder::Status(bool success));
- MOCK_METHOD0(onUiIntensiveBugreportDumpsFinished, binder::Status());
+ MOCK_METHOD1(onUiIntensiveBugreportDumpsFinished,
+ binder::Status(const android::String16& callingpackage));
protected:
MOCK_METHOD0(onAsBinder, IBinder*());
@@ -98,10 +95,6 @@ class DumpstateBaseTest : public Test {
PropertiesHelper::unroot_ = unroot;
}
- void SetParallelRun(bool parallel_run) const {
- PropertiesHelper::parallel_run_ = parallel_run;
- }
-
bool IsStandalone() const {
return calls_ == 1;
}
@@ -177,9 +170,11 @@ TEST_F(DumpOptionsTest, InitializeNone) {
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
+ EXPECT_FALSE(options_.do_add_date);
+ EXPECT_FALSE(options_.do_zip_file);
EXPECT_EQ("", options_.out_dir);
- EXPECT_FALSE(options_.stream_to_socket);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_TRUE(options_.do_vibrate);
EXPECT_FALSE(options_.do_screenshot);
@@ -194,13 +189,17 @@ TEST_F(DumpOptionsTest, InitializeAdbBugreport) {
char* argv[] = {
const_cast<char*>("dumpstatez"),
const_cast<char*>("-S"),
+ const_cast<char*>("-d"),
+ const_cast<char*>("-z"),
};
// clang-format on
Dumpstate::RunStatus status = options_.Initialize(ARRAY_SIZE(argv), argv);
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
- EXPECT_TRUE(options_.progress_updates_to_socket);
+ EXPECT_TRUE(options_.do_add_date);
+ EXPECT_TRUE(options_.do_zip_file);
+ EXPECT_TRUE(options_.use_control_socket);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
@@ -208,7 +207,7 @@ TEST_F(DumpOptionsTest, InitializeAdbBugreport) {
EXPECT_FALSE(options_.do_screenshot);
EXPECT_FALSE(options_.do_progress_updates);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::DEFAULT);
}
@@ -224,11 +223,13 @@ TEST_F(DumpOptionsTest, InitializeAdbShellBugreport) {
Dumpstate::RunStatus status = options_.Initialize(ARRAY_SIZE(argv), argv);
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
- EXPECT_TRUE(options_.stream_to_socket);
+ EXPECT_TRUE(options_.use_socket);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.do_add_date);
+ EXPECT_FALSE(options_.do_zip_file);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.do_screenshot);
EXPECT_FALSE(options_.do_progress_updates);
@@ -239,93 +240,108 @@ TEST_F(DumpOptionsTest, InitializeAdbShellBugreport) {
TEST_F(DumpOptionsTest, InitializeFullBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_FULL, fd, fd, true);
+ EXPECT_TRUE(options_.do_add_date);
EXPECT_TRUE(options_.do_screenshot);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::FULL);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.do_progress_updates);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
+ EXPECT_FALSE(options_.do_start_service);
EXPECT_FALSE(options_.limited_only);
}
TEST_F(DumpOptionsTest, InitializeInteractiveBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_INTERACTIVE, fd, fd, true);
+ EXPECT_TRUE(options_.do_add_date);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_TRUE(options_.do_progress_updates);
+ EXPECT_TRUE(options_.do_start_service);
EXPECT_TRUE(options_.do_screenshot);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::INTERACTIVE);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
}
TEST_F(DumpOptionsTest, InitializeRemoteBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_REMOTE, fd, fd, false);
+ EXPECT_TRUE(options_.do_add_date);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_TRUE(options_.is_remote_mode);
EXPECT_FALSE(options_.do_vibrate);
EXPECT_FALSE(options_.do_screenshot);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::REMOTE);
// Other options retain default values
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.do_progress_updates);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
}
TEST_F(DumpOptionsTest, InitializeWearBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_WEAR, fd, fd, true);
+ EXPECT_TRUE(options_.do_add_date);
EXPECT_TRUE(options_.do_screenshot);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_TRUE(options_.do_progress_updates);
+ EXPECT_TRUE(options_.do_start_service);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::WEAR);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
}
TEST_F(DumpOptionsTest, InitializeTelephonyBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_TELEPHONY, fd, fd, false);
+ EXPECT_TRUE(options_.do_add_date);
EXPECT_FALSE(options_.do_screenshot);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_TRUE(options_.telephony_only);
EXPECT_TRUE(options_.do_progress_updates);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::CONNECTIVITY);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
}
TEST_F(DumpOptionsTest, InitializeWifiBugReport) {
options_.Initialize(Dumpstate::BugreportMode::BUGREPORT_WIFI, fd, fd, false);
+ EXPECT_TRUE(options_.do_add_date);
EXPECT_FALSE(options_.do_screenshot);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_TRUE(options_.wifi_only);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::WIFI);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.do_progress_updates);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.limited_only);
}
@@ -334,6 +350,8 @@ TEST_F(DumpOptionsTest, InitializeLimitedOnlyBugreport) {
char* argv[] = {
const_cast<char*>("dumpstatez"),
const_cast<char*>("-S"),
+ const_cast<char*>("-d"),
+ const_cast<char*>("-z"),
const_cast<char*>("-q"),
const_cast<char*>("-L"),
const_cast<char*>("-o abc")
@@ -343,7 +361,9 @@ TEST_F(DumpOptionsTest, InitializeLimitedOnlyBugreport) {
Dumpstate::RunStatus status = options_.Initialize(ARRAY_SIZE(argv), argv);
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
- EXPECT_TRUE(options_.progress_updates_to_socket);
+ EXPECT_TRUE(options_.do_add_date);
+ EXPECT_TRUE(options_.do_zip_file);
+ EXPECT_TRUE(options_.use_control_socket);
EXPECT_FALSE(options_.do_vibrate);
EXPECT_TRUE(options_.limited_only);
EXPECT_EQ(" abc", std::string(options_.out_dir));
@@ -353,7 +373,7 @@ TEST_F(DumpOptionsTest, InitializeLimitedOnlyBugreport) {
EXPECT_FALSE(options_.do_screenshot);
EXPECT_FALSE(options_.do_progress_updates);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::DEFAULT);
}
@@ -370,16 +390,18 @@ TEST_F(DumpOptionsTest, InitializeDefaultBugReport) {
Dumpstate::RunStatus status = options_.Initialize(ARRAY_SIZE(argv), argv);
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
+ EXPECT_TRUE(options_.do_add_date);
EXPECT_TRUE(options_.do_screenshot);
+ EXPECT_TRUE(options_.do_zip_file);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::DEFAULT);
// Other options retain default values
EXPECT_TRUE(options_.do_vibrate);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.show_header_only);
EXPECT_FALSE(options_.do_progress_updates);
EXPECT_FALSE(options_.is_remote_mode);
- EXPECT_FALSE(options_.stream_to_socket);
+ EXPECT_FALSE(options_.use_socket);
EXPECT_FALSE(options_.wifi_only);
EXPECT_FALSE(options_.limited_only);
}
@@ -388,6 +410,8 @@ TEST_F(DumpOptionsTest, InitializePartial1) {
// clang-format off
char* argv[] = {
const_cast<char*>("dumpstate"),
+ const_cast<char*>("-d"),
+ const_cast<char*>("-z"),
const_cast<char*>("-s"),
const_cast<char*>("-S"),
@@ -397,9 +421,11 @@ TEST_F(DumpOptionsTest, InitializePartial1) {
Dumpstate::RunStatus status = options_.Initialize(ARRAY_SIZE(argv), argv);
EXPECT_EQ(status, Dumpstate::RunStatus::OK);
+ EXPECT_TRUE(options_.do_add_date);
+ EXPECT_TRUE(options_.do_zip_file);
// TODO: Maybe we should trim the filename
- EXPECT_TRUE(options_.stream_to_socket);
- EXPECT_TRUE(options_.progress_updates_to_socket);
+ EXPECT_TRUE(options_.use_socket);
+ EXPECT_TRUE(options_.use_control_socket);
// Other options retain default values
EXPECT_FALSE(options_.show_header_only);
@@ -433,8 +459,10 @@ TEST_F(DumpOptionsTest, InitializePartial2) {
EXPECT_TRUE(options_.is_remote_mode);
// Other options retain default values
- EXPECT_FALSE(options_.stream_to_socket);
- EXPECT_FALSE(options_.progress_updates_to_socket);
+ EXPECT_FALSE(options_.do_add_date);
+ EXPECT_FALSE(options_.do_zip_file);
+ EXPECT_FALSE(options_.use_socket);
+ EXPECT_FALSE(options_.use_control_socket);
EXPECT_FALSE(options_.limited_only);
EXPECT_EQ(options_.dumpstate_hal_mode, DumpstateMode::DEFAULT);
}
@@ -467,31 +495,40 @@ TEST_F(DumpOptionsTest, InitializeUnknown) {
EXPECT_EQ(status, Dumpstate::RunStatus::INVALID_INPUT);
}
-TEST_F(DumpOptionsTest, ValidateOptionsSocketUsage1) {
- options_.progress_updates_to_socket = true;
- options_.stream_to_socket = true;
+TEST_F(DumpOptionsTest, ValidateOptionsNeedOutfile1) {
+ options_.do_zip_file = true;
+ // Writing to socket = !writing to file.
+ options_.use_socket = true;
EXPECT_FALSE(options_.ValidateOptions());
- options_.stream_to_socket = false;
+ options_.use_socket = false;
EXPECT_TRUE(options_.ValidateOptions());
}
-TEST_F(DumpOptionsTest, ValidateOptionsSocketUsage2) {
+TEST_F(DumpOptionsTest, ValidateOptionsNeedOutfile2) {
options_.do_progress_updates = true;
// Writing to socket = !writing to file.
- options_.stream_to_socket = true;
+ options_.use_socket = true;
EXPECT_FALSE(options_.ValidateOptions());
- options_.stream_to_socket = false;
+ options_.use_socket = false;
+ EXPECT_TRUE(options_.ValidateOptions());
+}
+
+TEST_F(DumpOptionsTest, ValidateOptionsNeedZipfile) {
+ options_.use_control_socket = true;
+ EXPECT_FALSE(options_.ValidateOptions());
+
+ options_.do_zip_file = true;
EXPECT_TRUE(options_.ValidateOptions());
}
TEST_F(DumpOptionsTest, ValidateOptionsRemoteMode) {
- options_.do_progress_updates = true;
options_.is_remote_mode = true;
EXPECT_FALSE(options_.ValidateOptions());
- options_.do_progress_updates = false;
+ options_.do_zip_file = true;
+ options_.do_add_date = true;
EXPECT_TRUE(options_.ValidateOptions());
}
@@ -505,10 +542,6 @@ class DumpstateTest : public DumpstateBaseTest {
ds.options_.reset(new Dumpstate::DumpOptions());
}
- void TearDown() {
- ds.ShutdownDumpPool();
- }
-
// Runs a command and capture `stdout` and `stderr`.
int RunCommand(const std::string& title, const std::vector<std::string>& full_command,
const CommandOptions& options = CommandOptions::DEFAULT) {
@@ -536,10 +569,6 @@ class DumpstateTest : public DumpstateBaseTest {
ds.progress_.reset(new Progress(initial_max, progress, 1.2));
}
- void EnableParallelRunIfNeeded() {
- ds.EnableParallelRunIfNeeded();
- }
-
std::string GetProgressMessage(int progress, int max,
int old_max = 0, bool update_progress = true) {
EXPECT_EQ(progress, ds.progress_->Get()) << "invalid progress";
@@ -978,83 +1007,6 @@ TEST_F(DumpstateTest, DumpFileUpdateProgress) {
ds.listener_.clear();
}
-TEST_F(DumpstateTest, DumpPool_withParallelRunEnabled_notNull) {
- SetParallelRun(true);
- EnableParallelRunIfNeeded();
- EXPECT_TRUE(ds.zip_entry_tasks_);
- EXPECT_TRUE(ds.dump_pool_);
-}
-
-TEST_F(DumpstateTest, DumpPool_withParallelRunDisabled_isNull) {
- SetParallelRun(false);
- EnableParallelRunIfNeeded();
- EXPECT_FALSE(ds.zip_entry_tasks_);
- EXPECT_FALSE(ds.dump_pool_);
-}
-
-class ZippedBugReportStreamTest : public DumpstateBaseTest {
- public:
- void SetUp() {
- DumpstateBaseTest::SetUp();
- ds_.options_.reset(new Dumpstate::DumpOptions());
- }
- void TearDown() {
- CloseArchive(handle_);
- }
-
- // Set bugreport mode and options before here.
- void GenerateBugreport() {
- ds_.Initialize();
- EXPECT_EQ(Dumpstate::RunStatus::OK, ds_.Run(/*calling_uid=*/-1, /*calling_package=*/""));
- }
-
- // Most bugreports droproot, ensure the file can be opened by shell to verify file content.
- void CreateFd(const std::string& path, android::base::unique_fd* out_fd) {
- out_fd->reset(TEMP_FAILURE_RETRY(open(path.c_str(),
- O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)));
- ASSERT_GE(out_fd->get(), 0) << "could not create FD for path " << path;
- }
-
- void VerifyEntry(const ZipArchiveHandle archive, const std::string_view entry_name,
- ZipEntry* data) {
- int32_t e = FindEntry(archive, entry_name, data);
- EXPECT_EQ(0, e) << ErrorCodeString(e) << " entry name: " << entry_name;
- }
-
- // While testing dumpstate in process, using STDOUT may get confused about
- // the internal fd redirection. Redirect to a dedicate fd to save content.
- void RedirectOutputToFd(android::base::unique_fd& ufd) {
- ds_.open_socket_fn_ = [&](const char*) -> int { return ufd.release(); };
- };
-
- Dumpstate& ds_ = Dumpstate::GetInstance();
- ZipArchiveHandle handle_;
-};
-
-// Generate a quick LimitedOnly report redirected to a file, open it and verify entry exist.
-TEST_F(ZippedBugReportStreamTest, StreamLimitedOnlyReport) {
- std::string out_path = kTestDataPath + "StreamLimitedOnlyReportOut.zip";
- android::base::unique_fd out_fd;
- CreateFd(out_path, &out_fd);
- ds_.options_->limited_only = true;
- ds_.options_->stream_to_socket = true;
- RedirectOutputToFd(out_fd);
-
- GenerateBugreport();
- OpenArchive(out_path.c_str(), &handle_);
-
- ZipEntry entry;
- VerifyEntry(handle_, "main_entry.txt", &entry);
- std::string bugreport_txt_name;
- bugreport_txt_name.resize(entry.uncompressed_length);
- ExtractToMemory(handle_, &entry, reinterpret_cast<uint8_t*>(bugreport_txt_name.data()),
- entry.uncompressed_length);
- EXPECT_THAT(bugreport_txt_name,
- testing::ContainsRegex("(bugreport-.+(-[[:digit:]]+){6}\\.txt)"));
- VerifyEntry(handle_, bugreport_txt_name, &entry);
-}
-
class DumpstateServiceTest : public DumpstateBaseTest {
public:
DumpstateService dss;
@@ -1666,175 +1618,6 @@ TEST_F(DumpstateUtilTest, DumpFileOnDryRun) {
EXPECT_THAT(out, EndsWith("skipped on dry run\n"));
}
-class DumpPoolTest : public DumpstateBaseTest {
- public:
- void SetUp() {
- dump_pool_ = std::make_unique<DumpPool>(kTestDataPath);
- DumpstateBaseTest::SetUp();
- CreateOutputFile();
- }
-
- void CreateOutputFile() {
- out_path_ = kTestDataPath + "out.txt";
- out_fd_.reset(TEMP_FAILURE_RETRY(open(out_path_.c_str(),
- O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)));
- ASSERT_GE(out_fd_.get(), 0) << "could not create FD for path "
- << out_path_;
- }
-
- int getTempFileCounts(const std::string& folder) {
- int count = 0;
- std::unique_ptr<DIR, decltype(&closedir)> dir_ptr(opendir(folder.c_str()),
- &closedir);
- if (!dir_ptr) {
- return -1;
- }
- int dir_fd = dirfd(dir_ptr.get());
- if (dir_fd < 0) {
- return -1;
- }
-
- struct dirent* de;
- while ((de = readdir(dir_ptr.get()))) {
- if (de->d_type != DT_REG) {
- continue;
- }
- std::string file_name(de->d_name);
- if (file_name.find(DumpPool::PREFIX_TMPFILE_NAME) != 0) {
- continue;
- }
- count++;
- }
- return count;
- }
-
- void setLogDuration(bool log_duration) {
- dump_pool_->setLogDuration(log_duration);
- }
-
- std::unique_ptr<DumpPool> dump_pool_;
- android::base::unique_fd out_fd_;
- std::string out_path_;
-};
-
-TEST_F(DumpPoolTest, EnqueueTaskWithFd) {
- auto dump_func_1 = [](int out_fd) {
- dprintf(out_fd, "A");
- };
- auto dump_func_2 = [](int out_fd) {
- dprintf(out_fd, "B");
- sleep(1);
- };
- auto dump_func_3 = [](int out_fd) {
- dprintf(out_fd, "C");
- };
- setLogDuration(/* log_duration = */false);
- dump_pool_->enqueueTaskWithFd(/* task_name = */"1", dump_func_1, std::placeholders::_1);
- dump_pool_->enqueueTaskWithFd(/* task_name = */"2", dump_func_2, std::placeholders::_1);
- dump_pool_->enqueueTaskWithFd(/* task_name = */"3", dump_func_3, std::placeholders::_1);
-
- dump_pool_->waitForTask("1", "", out_fd_.get());
- dump_pool_->waitForTask("2", "", out_fd_.get());
- dump_pool_->waitForTask("3", "", out_fd_.get());
- dump_pool_->shutdown();
-
- std::string result;
- ReadFileToString(out_path_, &result);
- EXPECT_THAT(result, StrEq("A\nB\nC\n"));
- EXPECT_THAT(getTempFileCounts(kTestDataPath), Eq(0));
-}
-
-TEST_F(DumpPoolTest, EnqueueTask_withDurationLog) {
- bool run_1 = false;
- auto dump_func_1 = [&]() {
- run_1 = true;
- };
-
- dump_pool_->enqueueTask(/* task_name = */"1", dump_func_1);
- dump_pool_->waitForTask("1", "", out_fd_.get());
- dump_pool_->shutdown();
-
- std::string result;
- ReadFileToString(out_path_, &result);
- EXPECT_TRUE(run_1);
- EXPECT_THAT(result, StrEq("------ 0.000s was the duration of '1' ------\n"));
- EXPECT_THAT(getTempFileCounts(kTestDataPath), Eq(0));
-}
-
-TEST_F(DumpPoolTest, Shutdown_withoutCrash) {
- bool run_1 = false;
- auto dump_func_1 = [&]() {
- run_1 = true;
- };
- auto dump_func = []() {
- sleep(1);
- };
-
- dump_pool_->start(/* thread_counts = */1);
- dump_pool_->enqueueTask(/* task_name = */"1", dump_func_1);
- dump_pool_->enqueueTask(/* task_name = */"2", dump_func);
- dump_pool_->enqueueTask(/* task_name = */"3", dump_func);
- dump_pool_->enqueueTask(/* task_name = */"4", dump_func);
- dump_pool_->waitForTask("1", "", out_fd_.get());
- dump_pool_->shutdown();
-
- EXPECT_TRUE(run_1);
- EXPECT_THAT(getTempFileCounts(kTestDataPath), Eq(0));
-}
-
-class TaskQueueTest : public DumpstateBaseTest {
-public:
- void SetUp() {
- DumpstateBaseTest::SetUp();
- }
-
- TaskQueue task_queue_;
-};
-
-TEST_F(TaskQueueTest, runTask) {
- bool is_task1_run = false;
- bool is_task2_run = false;
- auto task_1 = [&](bool task_cancelled) {
- if (task_cancelled) {
- return;
- }
- is_task1_run = true;
- };
- auto task_2 = [&](bool task_cancelled) {
- if (task_cancelled) {
- return;
- }
- is_task2_run = true;
- };
- task_queue_.add(task_1, std::placeholders::_1);
- task_queue_.add(task_2, std::placeholders::_1);
-
- task_queue_.run(/* do_cancel = */false);
-
- EXPECT_TRUE(is_task1_run);
- EXPECT_TRUE(is_task2_run);
-}
-
-TEST_F(TaskQueueTest, runTask_withCancelled) {
- bool is_task1_cancelled = false;
- bool is_task2_cancelled = false;
- auto task_1 = [&](bool task_cancelled) {
- is_task1_cancelled = task_cancelled;
- };
- auto task_2 = [&](bool task_cancelled) {
- is_task2_cancelled = task_cancelled;
- };
- task_queue_.add(task_1, std::placeholders::_1);
- task_queue_.add(task_2, std::placeholders::_1);
-
- task_queue_.run(/* do_cancel = */true);
-
- EXPECT_TRUE(is_task1_cancelled);
- EXPECT_TRUE(is_task2_cancelled);
-}
-
-
} // namespace dumpstate
} // namespace os
} // namespace android