blob: ec6dc9a60ca6b1ad86efeae3742dc4ed1de8d300 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file
#include <fcntl.h>
#include <stdio.h>
#include <zircon/device/block.h>
#include <zircon/syscalls.h>
#include <fbl/auto_call.h>
#include <fbl/function.h>
#include <fbl/string.h>
#include <fbl/unique_fd.h>
#include <fs-management/mount.h>
#include <fs-test-utils/fixture.h>
#include <fs-test-utils/unittest.h>
#include <ramdevice-client/ramdisk.h>
#include <unittest/unittest.h>
namespace fs_test_utils {
namespace {
FixtureOptions OptionsUseRamdiskAndFvm() {
FixtureOptions options = FixtureOptions::Default(DISK_FORMAT_MINFS);
options.use_fvm = true;
options.fs_type = DISK_FORMAT_MINFS;
options.isolated_devmgr = true;
return options;
}
FixtureOptions OptionsUseRamdiskAndFvm2() { return OptionsUseRamdiskAndFvm(); }
bool VerifyRamdiskAndFvmExist(Fixture* fixture) {
BEGIN_TEST;
ASSERT_FALSE(fixture->partition_path().empty(), "No partition path set");
ASSERT_FALSE(fixture->block_device_path().empty(), "No block device path set.");
ASSERT_FALSE(fixture->fs_path().empty(), "No fs_path set");
fbl::unique_fd fs_path_fd(open(fixture->fs_path().c_str(), O_RDONLY | O_DIRECTORY));
ASSERT_TRUE(fs_path_fd);
fbl::unique_fd block_fd(open(fixture->block_device_path().c_str(), O_RDONLY));
ASSERT_TRUE(block_fd);
disk_format_t actual = detect_disk_format(block_fd.get());
ASSERT_EQ(actual, DISK_FORMAT_FVM);
fbl::unique_fd fs_fd(open(fixture->partition_path().c_str(), O_RDONLY));
ASSERT_TRUE(fs_fd);
actual = detect_disk_format(fs_fd.get());
ASSERT_EQ(actual, fixture->options().fs_type);
END_TEST;
}
// TODO(fxbug.dev/38168): flaky tests
// bool VerifyRamdiskAndFvmExist2(Fixture* fixture) { return VerifyRamdiskAndFvmExist(fixture); }
BEGIN_FS_TEST_CASE(UnittestFixtureTest, OptionsUseRamdiskAndFvm)
RUN_FS_TEST_F(VerifyRamdiskAndFvmExist)
END_FS_TEST_CASE(UnittestFixtureTest, OptionsUseRamdiskAndFvm)
// Verifies that we can define multiple test cases without collision on global symbols,
// and run multiple tests.
BEGIN_FS_TEST_CASE(UnittestFixtureTest, OptionsUseRamdiskAndFvm2)
RUN_FS_TEST_F(VerifyRamdiskAndFvmExist)
// TODO(gevalentino): fxbug.dev/8187 flaky.
// RUN_FS_TEST_F(VerifyRamdiskAndFvmExist)
// TODO(fxbug.dev/38168): flaky tests
// RUN_FS_TEST_F(VerifyRamdiskAndFvmExist2)
END_FS_TEST_CASE(UnittestFixtureTest, OptionsUseRamdiskAndFvm2)
} // namespace
} // namespace fs_test_utils
namespace fs_test_utils_2 {
namespace {
fs_test_utils::FixtureOptions Options() { return fs_test_utils::OptionsUseRamdiskAndFvm(); }
BEGIN_FS_TEST_CASE(UnittestFixtureFromAnotherNamespaceTest, Options)
RUN_FS_TEST_F(fs_test_utils::VerifyRamdiskAndFvmExist)
END_FS_TEST_CASE(UnittestFixtureFromAnotherNamespaceTest, Options)
} // namespace
} // namespace fs_test_utils_2