| // Copyright 2020 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. |
| |
| #ifndef SRC_STORAGE_FS_TEST_FS_TEST_FIXTURE_H_ |
| #define SRC_STORAGE_FS_TEST_FS_TEST_FIXTURE_H_ |
| |
| #include <zircon/compiler.h> |
| |
| #include <string> |
| #include <string_view> |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/storage/fs_test/fs_test.h" |
| |
| namespace fs_test { |
| |
| struct PowerCutOptions { |
| // If true, reformat after each iteration. |
| bool reformat = false; |
| |
| // The number of blocks to increment after each iteration. |
| int stride = 1; |
| }; |
| |
| class BaseFilesystemTest : public testing::Test { |
| public: |
| BaseFilesystemTest(const TestFilesystemOptions& options) |
| : fs_(TestFilesystem::Create(options).value()) {} |
| ~BaseFilesystemTest(); |
| |
| std::string GetPath(std::string_view relative_path) const { |
| std::string path = fs_.mount_path(); |
| path.append(relative_path); |
| return path; |
| } |
| |
| TestFilesystem& fs() { return fs_; } |
| const TestFilesystem& fs() const { return fs_; } |
| |
| // Repeatedly run the given test function simulating a power cut at different block write counts |
| // for each iteration. |
| void RunSimulatedPowerCutTest(const PowerCutOptions& options, |
| std::function<void()> test_function); |
| |
| protected: |
| TestFilesystem fs_; |
| }; |
| |
| // Example: |
| // |
| // #include "fs_test_fixture.h" |
| // |
| // using MyTest = FilesystemTest; |
| // |
| // TEST_P(MyTest, CheckThatFooSucceeds) { |
| // ... |
| // } |
| // |
| // INSTANTIATE_TEST_SUITE_P(FooTests, MyTest, |
| // testing::ValuesIn(AllTestFilesystems()), |
| // testing::PrintToStringParamName()); |
| |
| class FilesystemTest : public BaseFilesystemTest, |
| public testing::WithParamInterface<TestFilesystemOptions> { |
| protected: |
| FilesystemTest() : BaseFilesystemTest(GetParam()) {} |
| }; |
| |
| } // namespace fs_test |
| |
| #endif // SRC_STORAGE_FS_TEST_FS_TEST_FIXTURE_H_ |