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