#include "base/command_line.h"
#include "base/files/file.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/test/multiprocess_test.h"
#include "base/test/test_timeouts.h"
#include "base/threading/platform_thread.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/multiprocess_func_list.h"
File;
FilePath;
namespace {
const char kTempDirFlag[] = …;
const char kFileLockShared[] = …;
const char kFileLockExclusive[] = …;
const char kFileUnlock[] = …;
const char kCloseUnlock[] = …;
const char kExitUnlock[] = …;
const char kLockFile[] = …;
const char kSignalLockFileLocked[] = …;
const char kSignalLockFileClose[] = …;
const char kSignalLockFileClosed[] = …;
const char kSignalLockFileUnlock[] = …;
const char kSignalLockFileUnlocked[] = …;
const char kSignalExit[] = …;
bool SignalEvent(const FilePath& signal_dir, const char* signal_file) { … }
bool CheckEvent(const FilePath& signal_dir, const char* signal_file) { … }
bool WaitForEventWithTimeout(const FilePath& signal_dir,
const char* signal_file,
const base::TimeDelta& timeout) { … }
bool WaitForEvent(const FilePath& signal_dir, const char* signal_file) { … }
#define ChildMain …
#define ChildMainString …
MULTIPROCESS_TEST_MAIN(ChildMain) { … }
}
class FileLockingTest : public testing::Test { … };
TEST_F(FileLockingTest, LockAndUnlockExclusive) { … }
TEST_F(FileLockingTest, LockAndUnlockShared) { … }
TEST_F(FileLockingTest, UnlockOnCloseExclusive) { … }
TEST_F(FileLockingTest, UnlockOnCloseShared) { … }
TEST_F(FileLockingTest, UnlockOnExitExclusive) { … }
TEST_F(FileLockingTest, UnlockOnExitShared) { … }
#if BUILDFLAG(IS_ANDROID)
#define MAYBE_UnlockOnTerminate …
#else
#define MAYBE_UnlockOnTerminate …
#endif
TEST_F(FileLockingTest, MAYBE_UnlockOnTerminate) { … }