blob: d360343b5561f64a3560911447c988ed089241ac [file] [log] [blame]
// 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_