Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b938acf authored by Yifan Hong's avatar Yifan Hong Committed by Automerger Merge Worker
Browse files

libsnapshot_test: skip global setup on non-VAB devices. am: b085db74 am: 632b1ab4

Original change: https://googleplex-android-review.googlesource.com/c/platform/system/core/+/12329326

Change-Id: I64312022341df78d0e9e1e63ed282459355e489d
parents 16c5fb47 632b1ab4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -180,5 +180,22 @@ class LowSpaceUserdata {
    uint64_t bsize_ = 0;
};

bool IsVirtualAbEnabled();

#define SKIP_IF_NON_VIRTUAL_AB()                                                        \
    do {                                                                                \
        if (!IsVirtualAbEnabled()) GTEST_SKIP() << "Test for Virtual A/B devices only"; \
    } while (0)

#define RETURN_IF_NON_VIRTUAL_AB_MSG(msg) \
    do {                                  \
        if (!IsVirtualAbEnabled()) {      \
            std::cerr << (msg);           \
            return;                       \
        }                                 \
    } while (0)

#define RETURN_IF_NON_VIRTUAL_AB() RETURN_IF_NON_VIRTUAL_AB_MSG("")

}  // namespace snapshot
}  // namespace android
+13 −3
Original line number Diff line number Diff line
@@ -41,8 +41,14 @@ namespace snapshot {

class PartitionCowCreatorTest : public ::testing::Test {
  public:
    void SetUp() override { SnapshotTestPropertyFetcher::SetUp(); }
    void TearDown() override { SnapshotTestPropertyFetcher::TearDown(); }
    void SetUp() override {
        SKIP_IF_NON_VIRTUAL_AB();
        SnapshotTestPropertyFetcher::SetUp();
    }
    void TearDown() override {
        RETURN_IF_NON_VIRTUAL_AB();
        SnapshotTestPropertyFetcher::TearDown();
    }
};

TEST_F(PartitionCowCreatorTest, IntersectSelf) {
@@ -198,6 +204,8 @@ TEST_F(PartitionCowCreatorTest, CowSize) {
}

TEST(DmSnapshotInternals, CowSizeCalculator) {
    SKIP_IF_NON_VIRTUAL_AB();

    DmSnapCowSizeCalculator cc(512, 8);
    unsigned long int b;

@@ -261,7 +269,9 @@ struct OptimizeOperationTestParam {
    std::optional<InstallOperation> expected_output;
};

class OptimizeOperationTest : public ::testing::TestWithParam<OptimizeOperationTestParam> {};
class OptimizeOperationTest : public ::testing::TestWithParam<OptimizeOperationTestParam> {
    void SetUp() override { SKIP_IF_NON_VIRTUAL_AB(); }
};
TEST_P(OptimizeOperationTest, Test) {
    InstallOperation actual_output;
    EXPECT_EQ(GetParam().expected_output.has_value(),
+8 −5
Original line number Diff line number Diff line
@@ -43,11 +43,11 @@ namespace snapshot {

class SnapshotMetadataUpdaterTest : public ::testing::TestWithParam<uint32_t> {
  public:
    SnapshotMetadataUpdaterTest() {
        is_virtual_ab_ = android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
    }
    SnapshotMetadataUpdaterTest() = default;

    void SetUp() override {
        SKIP_IF_NON_VIRTUAL_AB();

        target_slot_ = GetParam();
        target_suffix_ = SlotSuffixForSlotNumber(target_slot_);
        SnapshotTestPropertyFetcher::SetUp(SlotSuffixForSlotNumber(1 - target_slot_));
@@ -68,7 +68,11 @@ class SnapshotMetadataUpdaterTest : public ::testing::TestWithParam<uint32_t> {
        ASSERT_TRUE(FillFakeMetadata(builder_.get(), manifest_, target_suffix_));
    }

    void TearDown() override { SnapshotTestPropertyFetcher::TearDown(); }
    void TearDown() override {
        RETURN_IF_NON_VIRTUAL_AB();

        SnapshotTestPropertyFetcher::TearDown();
    }

    // Append suffix to name.
    std::string T(std::string_view name) { return std::string(name) + target_suffix_; }
@@ -127,7 +131,6 @@ class SnapshotMetadataUpdaterTest : public ::testing::TestWithParam<uint32_t> {
                                  << ".";
    }

    bool is_virtual_ab_;
    std::unique_ptr<MetadataBuilder> builder_;
    uint32_t target_slot_;
    std::string target_suffix_;
+52 −45
Original line number Diff line number Diff line
@@ -78,9 +78,7 @@ void MountMetadata();

class SnapshotTest : public ::testing::Test {
  public:
    SnapshotTest() : dm_(DeviceMapper::Instance()) {
        is_virtual_ab_ = android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
    }
    SnapshotTest() : dm_(DeviceMapper::Instance()) {}

    // This is exposed for main.
    void Cleanup() {
@@ -90,7 +88,7 @@ class SnapshotTest : public ::testing::Test {

  protected:
    void SetUp() override {
        if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
        SKIP_IF_NON_VIRTUAL_AB();

        SnapshotTestPropertyFetcher::SetUp();
        InitializeState();
@@ -101,7 +99,7 @@ class SnapshotTest : public ::testing::Test {
    }

    void TearDown() override {
        if (!is_virtual_ab_) return;
        RETURN_IF_NON_VIRTUAL_AB();

        lock_ = nullptr;

@@ -336,7 +334,6 @@ class SnapshotTest : public ::testing::Test {
    }

    static constexpr std::chrono::milliseconds snapshot_timeout_ = 5s;
    bool is_virtual_ab_;
    DeviceMapper& dm_;
    std::unique_ptr<SnapshotManager::LockedFile> lock_;
    android::fiemap::IImageManager* image_manager_ = nullptr;
@@ -717,11 +714,13 @@ class LockTestConsumer {
class LockTest : public ::testing::Test {
  public:
    void SetUp() {
        SKIP_IF_NON_VIRTUAL_AB();
        first_consumer.StartHandleRequestsInBackground();
        second_consumer.StartHandleRequestsInBackground();
    }

    void TearDown() {
        RETURN_IF_NON_VIRTUAL_AB();
        EXPECT_TRUE(first_consumer.MakeRequest(Request::EXIT));
        EXPECT_TRUE(second_consumer.MakeRequest(Request::EXIT));
    }
@@ -765,7 +764,7 @@ INSTANTIATE_TEST_SUITE_P(
class SnapshotUpdateTest : public SnapshotTest {
  public:
    void SetUp() override {
        if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
        SKIP_IF_NON_VIRTUAL_AB();

        SnapshotTest::SetUp();
        Cleanup();
@@ -827,7 +826,7 @@ class SnapshotUpdateTest : public SnapshotTest {
        }
    }
    void TearDown() override {
        if (!is_virtual_ab_) return;
        RETURN_IF_NON_VIRTUAL_AB();

        Cleanup();
        SnapshotTest::TearDown();
@@ -1360,13 +1359,17 @@ TEST_F(SnapshotUpdateTest, MergeCannotRemoveCow) {
    ASSERT_EQ(UpdateState::MergeCompleted, init->ProcessUpdateState());
}

class MetadataMountedTest : public SnapshotUpdateTest {
class MetadataMountedTest : public ::testing::Test {
  public:
    // This is so main() can instantiate this to invoke Cleanup.
    virtual void TestBody() override {}
    void SetUp() override {
        SKIP_IF_NON_VIRTUAL_AB();
        metadata_dir_ = test_device->GetMetadataDir();
        ASSERT_TRUE(ReadDefaultFstab(&fstab_));
    }
    void TearDown() override {
        RETURN_IF_NON_VIRTUAL_AB();
        SetUp();
        // Remount /metadata
        test_device->set_recovery(false);
@@ -1697,8 +1700,6 @@ class FlashAfterUpdateTest : public SnapshotUpdateTest,
};

TEST_P(FlashAfterUpdateTest, FlashSlotAfterUpdate) {
    if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";

    // OTA client blindly unmaps all partitions that are possibly mapped.
    for (const auto& name : {"sys_b", "vnd_b", "prd_b"}) {
        ASSERT_TRUE(sm->UnmapUpdateSnapshot(name));
@@ -1798,14 +1799,13 @@ INSTANTIATE_TEST_SUITE_P(Snapshot, FlashAfterUpdateTest, Combine(Values(0, 1), B
class ImageManagerTest : public SnapshotTest, public WithParamInterface<uint64_t> {
  protected:
    void SetUp() override {
        if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";

        SKIP_IF_NON_VIRTUAL_AB();
        SnapshotTest::SetUp();
        userdata_ = std::make_unique<LowSpaceUserdata>();
        ASSERT_TRUE(userdata_->Init(GetParam()));
    }
    void TearDown() override {
        if (!is_virtual_ab_) return;
        RETURN_IF_NON_VIRTUAL_AB();
        return;  // BUG(149738928)

        EXPECT_TRUE(!image_manager_->BackingImageExists(kImageName) ||
@@ -1847,11 +1847,6 @@ std::vector<uint64_t> ImageManagerTestParams() {

INSTANTIATE_TEST_SUITE_P(ImageManagerTest, ImageManagerTest, ValuesIn(ImageManagerTestParams()));

}  // namespace snapshot
}  // namespace android

using namespace android::snapshot;

bool Mkdir(const std::string& path) {
    if (mkdir(path.c_str(), 0700) && errno != EEXIST) {
        std::cerr << "Could not mkdir " << path << ": " << strerror(errno) << std::endl;
@@ -1860,8 +1855,21 @@ bool Mkdir(const std::string& path) {
    return true;
}

int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
class SnapshotTestEnvironment : public ::testing::Environment {
  public:
    ~SnapshotTestEnvironment() override {}
    void SetUp() override;
    void TearDown() override;

  private:
    std::unique_ptr<IImageManager> super_images_;
};

void SnapshotTestEnvironment::SetUp() {
    // b/163082876: GTEST_SKIP in Environment will make atest report incorrect results. Until
    // that is fixed, don't call GTEST_SKIP here, but instead call GTEST_SKIP in individual test
    // suites.
    RETURN_IF_NON_VIRTUAL_AB_MSG("Virtual A/B is not enabled, skipping global setup.\n");

    std::vector<std::string> paths = {
            // clang-format off
@@ -1874,18 +1882,13 @@ int main(int argc, char** argv) {
            // clang-format on
    };
    for (const auto& path : paths) {
        if (!Mkdir(path)) {
            return 1;
        }
        ASSERT_TRUE(Mkdir(path));
    }

    // Create this once, otherwise, gsid will start/stop between each test.
    test_device = new TestDeviceInfo();
    sm = SnapshotManager::New(test_device);
    if (!sm) {
        std::cerr << "Could not create snapshot manager\n";
        return 1;
    }
    ASSERT_NE(nullptr, sm) << "Could not create snapshot manager";

    // Clean up previous run.
    MetadataMountedTest().TearDown();
@@ -1893,31 +1896,35 @@ int main(int argc, char** argv) {
    SnapshotTest().Cleanup();

    // Use a separate image manager for our fake super partition.
    auto super_images = IImageManager::Open("ota/test/super", 10s);
    if (!super_images) {
        std::cerr << "Could not create image manager\n";
        return 1;
    }
    super_images_ = IImageManager::Open("ota/test/super", 10s);
    ASSERT_NE(nullptr, super_images_) << "Could not create image manager";

    // Clean up any old copy.
    DeleteBackingImage(super_images.get(), "fake-super");
    DeleteBackingImage(super_images_.get(), "fake-super");

    // Create and map the fake super partition.
    static constexpr int kImageFlags =
            IImageManager::CREATE_IMAGE_DEFAULT | IImageManager::CREATE_IMAGE_ZERO_FILL;
    if (!super_images->CreateBackingImage("fake-super", kSuperSize, kImageFlags)) {
        std::cerr << "Could not create fake super partition\n";
        return 1;
    }
    if (!super_images->MapImageDevice("fake-super", 10s, &fake_super)) {
        std::cerr << "Could not map fake super partition\n";
        return 1;
    }
    ASSERT_TRUE(super_images_->CreateBackingImage("fake-super", kSuperSize, kImageFlags))
            << "Could not create fake super partition";

    ASSERT_TRUE(super_images_->MapImageDevice("fake-super", 10s, &fake_super))
            << "Could not map fake super partition";
    test_device->set_fake_super(fake_super);
}

    auto result = RUN_ALL_TESTS();
void SnapshotTestEnvironment::TearDown() {
    RETURN_IF_NON_VIRTUAL_AB();
    if (super_images_ != nullptr) {
        DeleteBackingImage(super_images_.get(), "fake-super");
    }
}

    DeleteBackingImage(super_images.get(), "fake-super");
}  // namespace snapshot
}  // namespace android

    return result;
int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::AddGlobalTestEnvironment(new ::android::snapshot::SnapshotTestEnvironment());
    return RUN_ALL_TESTS();
}
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <gtest/gtest.h>
@@ -241,5 +242,9 @@ uint64_t LowSpaceUserdata::bsize() const {
    return bsize_;
}

bool IsVirtualAbEnabled() {
    return android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
}

}  // namespace snapshot
}  // namespace android