libsnapshot: Fix libsnapshot_fuzzer_test.
Rather than fix this up to work in all configurations, just
force-disable snapuserd testing for these tests.
This patch also adds a "UseUserspaceSnapshots" helper to IDeviceInfo so
we can simplify some checks in snapshot.cpp.
Bug: 208944665
Test: libsnapshot_fuzzer_test
Change-Id: I219f956ba09b090158d5ac757ef1f1d137d512e0
diff --git a/fs_mgr/libsnapshot/device_info.cpp b/fs_mgr/libsnapshot/device_info.cpp
index a6d96ed..5c1b291 100644
--- a/fs_mgr/libsnapshot/device_info.cpp
+++ b/fs_mgr/libsnapshot/device_info.cpp
@@ -19,6 +19,8 @@
#include <fs_mgr_overlayfs.h>
#include <libfiemap/image_manager.h>
+#include "utility.h"
+
namespace android {
namespace snapshot {
@@ -143,5 +145,9 @@
return android::dm::DeviceMapper::Instance();
}
+bool DeviceInfo::UseUserspaceSnapshots() const {
+ return IsUserspaceSnapshotsEnabled();
+}
+
} // namespace snapshot
} // namespace android
diff --git a/fs_mgr/libsnapshot/device_info.h b/fs_mgr/libsnapshot/device_info.h
index 8aefb85..a07f554 100644
--- a/fs_mgr/libsnapshot/device_info.h
+++ b/fs_mgr/libsnapshot/device_info.h
@@ -41,6 +41,7 @@
std::unique_ptr<IImageManager> OpenImageManager() const override;
bool IsFirstStageInit() const override;
android::dm::IDeviceMapper& GetDeviceMapper() override;
+ bool UseUserspaceSnapshots() const override;
void set_first_stage_init(bool value) { first_stage_init_ = value; }
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h b/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
index 573a85b..8c4161c 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
@@ -34,6 +34,7 @@
MOCK_METHOD(bool, IsFirstStageInit, (), (const, override));
MOCK_METHOD(std::unique_ptr<android::fiemap::IImageManager>, OpenImageManager, (),
(const, override));
+ MOCK_METHOD(bool, UseUserspaceSnapshots, (), (const, override));
};
} // namespace android::snapshot
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h b/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
index 41c6ef5..f7e37bb 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
@@ -111,6 +111,7 @@
virtual bool IsFirstStageInit() const = 0;
virtual std::unique_ptr<IImageManager> OpenImageManager() const = 0;
virtual android::dm::IDeviceMapper& GetDeviceMapper() = 0;
+ virtual bool UseUserspaceSnapshots() const = 0;
// Helper method for implementing OpenImageManager.
std::unique_ptr<IImageManager> OpenImageManager(const std::string& gsid_dir) const;
diff --git a/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h b/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
index c3b40dc..07c3ec5 100644
--- a/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
+++ b/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
@@ -107,6 +107,7 @@
}
bool IsSlotUnbootable(uint32_t slot) { return unbootable_slots_.count(slot) != 0; }
+ bool UseUserspaceSnapshots() const override;
void set_slot_suffix(const std::string& suffix) { slot_suffix_ = suffix; }
void set_fake_super(const std::string& path) {
diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp
index dfa467e..c7c5da1 100644
--- a/fs_mgr/libsnapshot/snapshot.cpp
+++ b/fs_mgr/libsnapshot/snapshot.cpp
@@ -3134,14 +3134,15 @@
.compression_algorithm = compression_algorithm,
};
- if (!device()->IsTestDevice()) {
- cow_creator.userspace_snapshots_enabled = IsUserspaceSnapshotsEnabled();
- if (cow_creator.userspace_snapshots_enabled) {
- LOG(INFO) << "User-space snapshots enabled";
- } else {
- LOG(INFO) << "User-space snapshots disabled";
- }
+ cow_creator.userspace_snapshots_enabled = device_->UseUserspaceSnapshots();
+ if (cow_creator.userspace_snapshots_enabled) {
+ LOG(INFO) << "User-space snapshots enabled, compression = " << compression_algorithm;
+ } else {
+ LOG(INFO) << "User-space snapshots disabled, compression = " << compression_algorithm;
+ }
+ is_snapshot_userspace_ = cow_creator.userspace_snapshots_enabled;
+ if ((use_compression || is_snapshot_userspace_) && !device()->IsTestDevice()) {
// Terminate stale daemon if any
std::unique_ptr<SnapuserdClient> snapuserd_client =
SnapuserdClient::Connect(kSnapuserdSocket, 10s);
@@ -3156,17 +3157,8 @@
snapuserd_client_->CloseConnection();
snapuserd_client_ = nullptr;
}
- } else {
- cow_creator.userspace_snapshots_enabled = !IsDmSnapshotTestingEnabled();
- if (cow_creator.userspace_snapshots_enabled) {
- LOG(INFO) << "User-space snapshots disabled for testing";
- } else {
- LOG(INFO) << "User-space snapshots enabled for testing";
- }
}
- is_snapshot_userspace_ = cow_creator.userspace_snapshots_enabled;
-
// If compression is enabled, we need to retain a copy of the old metadata
// so we can access original blocks in case they are moved around. We do
// not want to rely on the old super metadata slot because we don't
diff --git a/fs_mgr/libsnapshot/snapshot_fuzz_utils.h b/fs_mgr/libsnapshot/snapshot_fuzz_utils.h
index c1a5af7..63159dc 100644
--- a/fs_mgr/libsnapshot/snapshot_fuzz_utils.h
+++ b/fs_mgr/libsnapshot/snapshot_fuzz_utils.h
@@ -130,6 +130,7 @@
std::unique_ptr<IImageManager> OpenImageManager() const {
return env_->CheckCreateFakeImageManager();
}
+ bool UseUserspaceSnapshots() const override { return false; }
void SwitchSlot() { switched_slot_ = !switched_slot_; }
diff --git a/fs_mgr/libsnapshot/test_helpers.cpp b/fs_mgr/libsnapshot/test_helpers.cpp
index e3e3af8..2cd13e0 100644
--- a/fs_mgr/libsnapshot/test_helpers.cpp
+++ b/fs_mgr/libsnapshot/test_helpers.cpp
@@ -25,6 +25,8 @@
#include <openssl/sha.h>
#include <payload_consumer/file_descriptor.h>
+#include "utility.h"
+
namespace android {
namespace snapshot {
@@ -320,5 +322,9 @@
return android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
}
+bool TestDeviceInfo::UseUserspaceSnapshots() const {
+ return !IsDmSnapshotTestingEnabled();
+}
+
} // namespace snapshot
} // namespace android