Merge "libsnapshot: Fix test failures on certain configurations."

This commit is contained in:
Treehugger Robot 2023-03-07 18:02:14 +00:00 committed by Gerrit Code Review
commit 57feb3fbbd
4 changed files with 48 additions and 2 deletions

View file

@ -3216,6 +3216,8 @@ Return SnapshotManager::CreateUpdateSnapshots(const DeltaArchiveManifest& manife
vabc_disable_reason = "recovery";
} else if (!cow_format_support) {
vabc_disable_reason = "cow format not supported";
} else if (!KernelSupportsCompressedSnapshots()) {
vabc_disable_reason = "kernel missing userspace block device support";
}
if (!vabc_disable_reason.empty()) {

View file

@ -124,6 +124,10 @@ class SnapshotTest : public ::testing::Test {
SKIP_IF_NON_VIRTUAL_AB();
SetupProperties();
if (!DeviceSupportsMode()) {
GTEST_SKIP() << "Mode not supported on this device";
}
InitializeState();
CleanupTestArtifacts();
FormatFakeSuper();
@ -159,7 +163,13 @@ class SnapshotTest : public ::testing::Test {
IPropertyFetcher::OverrideForTesting(std::move(fetcher));
if (GetLegacyCompressionEnabledProperty() || CanUseUserspaceSnapshots()) {
snapuserd_required_ = true;
// If we're asked to test the device's actual configuration, then it
// may be misconfigured, so check for kernel support as libsnapshot does.
if (FLAGS_force_mode.empty()) {
snapuserd_required_ = KernelSupportsCompressedSnapshots();
} else {
snapuserd_required_ = true;
}
}
}
@ -176,6 +186,16 @@ class SnapshotTest : public ::testing::Test {
LOG(INFO) << "Teardown complete for test: " << test_name_;
}
bool DeviceSupportsMode() {
if (FLAGS_force_mode.empty()) {
return true;
}
if (snapuserd_required_ && !KernelSupportsCompressedSnapshots()) {
return false;
}
return true;
}
void InitializeState() {
ASSERT_TRUE(sm->EnsureImageManager());
image_manager_ = sm->image_manager();
@ -193,6 +213,11 @@ class SnapshotTest : public ::testing::Test {
// get an accurate list to remove.
lock_ = nullptr;
// If there is no image manager, the test was skipped.
if (!image_manager_) {
return;
}
std::vector<std::string> snapshots = {"test-snapshot", "test_partition_a",
"test_partition_b"};
for (const auto& snapshot : snapshots) {
@ -946,6 +971,11 @@ class SnapshotUpdateTest : public SnapshotTest {
SKIP_IF_NON_VIRTUAL_AB();
SnapshotTest::SetUp();
if (!image_manager_) {
// Test was skipped.
return;
}
Cleanup();
// Cleanup() changes slot suffix, so initialize it again.
@ -2680,6 +2710,9 @@ class ImageManagerTest : public SnapshotTest {
CleanUp();
}
void CleanUp() {
if (!image_manager_) {
return;
}
EXPECT_TRUE(!image_manager_->BackingImageExists(kImageName) ||
image_manager_->DeleteBackingImage(kImageName));
}

View file

@ -29,6 +29,7 @@
#include <fs_mgr/roots.h>
#include <liblp/property_fetcher.h>
using android::dm::DeviceMapper;
using android::dm::kSectorSize;
using android::fiemap::FiemapStatus;
using android::fs_mgr::EnsurePathMounted;
@ -251,7 +252,10 @@ bool CanUseUserspaceSnapshots() {
LOG(INFO) << "Userspace snapshots disabled for testing";
return false;
}
if (!KernelSupportsCompressedSnapshots()) {
LOG(ERROR) << "Userspace snapshots requested, but no kernel support is available.";
return false;
}
return true;
}
@ -278,5 +282,10 @@ bool IsDmSnapshotTestingEnabled() {
return fetcher->GetBoolProperty("snapuserd.test.dm.snapshots", false);
}
bool KernelSupportsCompressedSnapshots() {
auto& dm = DeviceMapper::Instance();
return dm.GetTargetByName("user", nullptr);
}
} // namespace snapshot
} // namespace android

View file

@ -127,6 +127,8 @@ std::ostream& operator<<(std::ostream& os, const Now&);
void AppendExtent(google::protobuf::RepeatedPtrField<chromeos_update_engine::Extent>* extents,
uint64_t start_block, uint64_t num_blocks);
bool KernelSupportsCompressedSnapshots();
bool GetLegacyCompressionEnabledProperty();
bool GetUserspaceSnapshotsEnabledProperty();
bool GetIouringEnabledProperty();