diff --git a/fs_mgr/libsnapshot/snapuserd/Android.bp b/fs_mgr/libsnapshot/snapuserd/Android.bp index 7fcaac50e..1e03683e9 100644 --- a/fs_mgr/libsnapshot/snapuserd/Android.bp +++ b/fs_mgr/libsnapshot/snapuserd/Android.bp @@ -164,7 +164,7 @@ cc_binary { } cc_test { - name: "cow_snapuserd_test", + name: "snapuserd_test_legacy", defaults: [ "fs_mgr_defaults", "libsnapshot_cow_defaults", @@ -216,16 +216,17 @@ cc_test { ], static_libs: [ "libbrotli", + "libcutils_sockets", + "libdm", + "libext4_utils", + "libfs_mgr", + "libgflags", "libgtest", "libsnapshot_cow", "libsnapshot_snapuserd", - "libcutils_sockets", - "libz", - "libfs_mgr", - "libdm", - "libext4_utils", + "libsnapuserd", "liburing", - "libgflags", + "libz", ], include_dirs: ["bionic/libc/kernel"], header_libs: [ diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp index c5150c411..bdba5c0cc 100644 --- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp +++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp @@ -25,6 +25,9 @@ namespace snapshot { static constexpr uint8_t kMaxMergeThreads = 2; +HandlerThread::HandlerThread(std::shared_ptr snapuserd) + : snapuserd_(snapuserd), misc_name_(snapuserd_->GetMiscName()) {} + void HandlerThread::FreeResources() { // Each worker thread holds a reference to snapuserd. // Clear them so that all the resources diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp index 2c201ffdb..25ce0ae30 100644 --- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp +++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp @@ -433,11 +433,6 @@ bool SnapshotHandler::IsIouringSupported() { struct utsname uts; unsigned int major, minor; - if (android::base::GetBoolProperty("snapuserd.test.io_uring.force_disable", false)) { - SNAP_LOG(INFO) << "io_uring disabled for testing"; - return false; - } - if ((uname(&uts) != 0) || (sscanf(uts.release, "%u.%u", &major, &minor) != 2)) { SNAP_LOG(ERROR) << "Could not parse the kernel version from uname. " << " io_uring not supported"; diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp index d87990aca..c953f1a05 100644 --- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp +++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp @@ -83,9 +83,6 @@ void UserSnapshotServer::ShutdownThreads() { handlers_->JoinAllThreads(); } -HandlerThread::HandlerThread(std::shared_ptr snapuserd) - : snapuserd_(snapuserd), misc_name_(snapuserd_->GetMiscName()) {} - bool UserSnapshotServer::Sendmsg(android::base::borrowed_fd fd, const std::string& msg) { ssize_t ret = TEMP_FAILURE_RETRY(send(fd.get(), msg.data(), msg.size(), MSG_NOSIGNAL)); if (ret < 0) { diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp index 142140359..57f9e7ac1 100644 --- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp +++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp @@ -37,9 +37,9 @@ #include #include #include -#include #include +#include "handler_manager.h" #include "snapuserd_core.h" DEFINE_string(force_config, "", "Force testing mode with iouring disabled"); @@ -54,8 +54,6 @@ using namespace std::chrono_literals; using namespace android::dm; using namespace std; -static constexpr char kSnapuserdSocketTest[] = "snapuserdTest"; - class Tempdevice { public: Tempdevice(const std::string& name, const DmTable& table) @@ -68,15 +66,15 @@ class Tempdevice { } ~Tempdevice() { if (valid_) { - dm_.DeleteDevice(name_); + dm_.DeleteDeviceIfExists(name_); } } bool Destroy() { if (!valid_) { - return false; + return true; } valid_ = false; - return dm_.DeleteDevice(name_); + return dm_.DeleteDeviceIfExists(name_); } const std::string& path() const { return path_; } const std::string& name() const { return name_; } @@ -138,7 +136,6 @@ class SnapuserdTest : public ::testing::Test { void SetDeviceControlName(); void InitDaemon(); void CreateDmUserDevice(); - void StartSnapuserdDaemon(); unique_ptr base_loop_; unique_ptr dmuser_dev_; @@ -148,9 +145,9 @@ class SnapuserdTest : public ::testing::Test { unique_fd base_fd_; std::unique_ptr cow_system_; - std::unique_ptr client_; std::unique_ptr orig_buffer_; std::unique_ptr merged_buffer_; + SnapshotHandlerManager handlers_; bool setup_ok_ = false; bool merge_ok_ = false; size_t size_ = 100_MiB; @@ -180,9 +177,9 @@ void SnapuserdTest::Shutdown() { ASSERT_TRUE(dmuser_dev_->Destroy()); auto misc_device = "/dev/dm-user/" + system_device_ctrl_name_; - ASSERT_TRUE(client_->WaitForDeviceDelete(system_device_ctrl_name_)); + ASSERT_TRUE(handlers_.DeleteHandler(system_device_ctrl_name_)); ASSERT_TRUE(android::fs_mgr::WaitForFileDeleted(misc_device, 10s)); - ASSERT_TRUE(client_->DetachSnapuserd()); + handlers_.TerminateMergeThreads(); } bool SnapuserdTest::SetupDefault() { @@ -217,8 +214,6 @@ bool SnapuserdTest::SetupCopyOverlap_2() { bool SnapuserdTest::SetupDaemon() { SetDeviceControlName(); - StartSnapuserdDaemon(); - CreateDmUserDevice(); InitCowDevice(); InitDaemon(); @@ -228,20 +223,6 @@ bool SnapuserdTest::SetupDaemon() { return setup_ok_; } -void SnapuserdTest::StartSnapuserdDaemon() { - pid_t pid = fork(); - ASSERT_GE(pid, 0); - if (pid == 0) { - std::string arg0 = "/system/bin/snapuserd"; - std::string arg1 = "-socket="s + kSnapuserdSocketTest; - char* const argv[] = {arg0.data(), arg1.data(), nullptr}; - ASSERT_GE(execv(arg0.c_str(), argv), 0); - } else { - client_ = SnapuserdClient::Connect(kSnapuserdSocketTest, 10s); - ASSERT_NE(client_, nullptr); - } -} - void SnapuserdTest::CreateBaseDevice() { unique_fd rnd_fd; @@ -606,9 +587,17 @@ void SnapuserdTest::CreateCowDevice() { } void SnapuserdTest::InitCowDevice() { - uint64_t num_sectors = client_->InitDmUserCow(system_device_ctrl_name_, cow_system_->path, - base_loop_->device(), base_loop_->device()); - ASSERT_NE(num_sectors, 0); + bool use_iouring = true; + if (FLAGS_force_config == "iouring_disabled") { + use_iouring = false; + } + + auto handler = + handlers_.AddHandler(system_device_ctrl_name_, cow_system_->path, base_loop_->device(), + base_loop_->device(), 1, use_iouring, false); + ASSERT_NE(handler, nullptr); + ASSERT_NE(handler->snapuserd(), nullptr); + ASSERT_NE(handler->snapuserd()->GetNumSectors(), 0); } void SnapuserdTest::SetDeviceControlName() { @@ -646,13 +635,12 @@ void SnapuserdTest::CreateDmUserDevice() { } void SnapuserdTest::InitDaemon() { - bool ok = client_->AttachDmUser(system_device_ctrl_name_); - ASSERT_TRUE(ok); + ASSERT_TRUE(handlers_.StartHandler(system_device_ctrl_name_)); } void SnapuserdTest::CheckMergeCompletion() { while (true) { - double percentage = client_->GetMergePercent(); + double percentage = handlers_.GetMergePercentage(); if ((int)percentage == 100) { break; } @@ -667,8 +655,6 @@ void SnapuserdTest::SetupImpl() { SetDeviceControlName(); - StartSnapuserdDaemon(); - CreateDmUserDevice(); InitCowDevice(); InitDaemon(); @@ -684,8 +670,7 @@ bool SnapuserdTest::Merge() { } void SnapuserdTest::StartMerge() { - bool ok = client_->InitiateMerge(system_device_ctrl_name_); - ASSERT_TRUE(ok); + ASSERT_TRUE(handlers_.InitiateMerge(system_device_ctrl_name_)); } void SnapuserdTest::ValidateMerge() { @@ -699,7 +684,6 @@ void SnapuserdTest::SimulateDaemonRestart() { Shutdown(); std::this_thread::sleep_for(500ms); SetDeviceControlName(); - StartSnapuserdDaemon(); CreateDmUserDevice(); InitCowDevice(); InitDaemon(); @@ -859,20 +843,5 @@ int main(int argc, char** argv) { gflags::ParseCommandLineFlags(&argc, &argv, false); - android::base::SetProperty("ctl.stop", "snapuserd"); - - if (FLAGS_force_config == "iouring_disabled") { - if (!android::base::SetProperty("snapuserd.test.io_uring.force_disable", "1")) { - return testing::AssertionFailure() - << "Failed to disable property: snapuserd.test.io_uring.disabled"; - } - } - - int ret = RUN_ALL_TESTS(); - - if (FLAGS_force_config == "iouring_disabled") { - android::base::SetProperty("snapuserd.test.io_uring.force_disable", "0"); - } - - return ret; + return RUN_ALL_TESTS(); }