#include "flock.h" #include "file_lock.h" #include "guard.h" #include "tempfile.h" #include Y_UNIT_TEST_SUITE(TFileLockTest) { Y_UNIT_TEST(TestFlock) { TTempFileHandle tmp("./file"); UNIT_ASSERT_EQUAL(Flock(tmp.GetHandle(), LOCK_EX), 0); UNIT_ASSERT_EQUAL(Flock(tmp.GetHandle(), LOCK_UN), 0); } Y_UNIT_TEST(TestFileLocker) { TTempFileHandle tmp("./file.locker"); TFileLock fileLockExclusive1("./file.locker"); TFileLock fileLockExclusive2("./file.locker"); TFileLock fileLockShared1("./file.locker", EFileLockType::Shared); TFileLock fileLockShared2("./file.locker", EFileLockType::Shared); TFileLock fileLockShared3("./file.locker", EFileLockType::Shared); { TGuard guard(fileLockExclusive1); } { TTryGuard tryGuard(fileLockExclusive1); UNIT_ASSERT(tryGuard.WasAcquired()); } { TGuard guard1(fileLockExclusive1); TTryGuard guard2(fileLockExclusive2); UNIT_ASSERT(!guard2.WasAcquired()); } { TGuard guard1(fileLockShared1); TTryGuard guard2(fileLockShared2); TTryGuard guard3(fileLockShared3); UNIT_ASSERT(guard2.WasAcquired()); UNIT_ASSERT(guard3.WasAcquired()); } { TGuard guard1(fileLockExclusive1); TTryGuard guard2(fileLockShared1); TTryGuard guard3(fileLockShared2); UNIT_ASSERT(!guard2.WasAcquired()); UNIT_ASSERT(!guard3.WasAcquired()); } { TGuard guard1(fileLockShared1); TTryGuard guard2(fileLockExclusive1); TTryGuard guard3(fileLockShared2); UNIT_ASSERT(!guard2.WasAcquired()); UNIT_ASSERT(guard3.WasAcquired()); } } } // Y_UNIT_TEST_SUITE(TFileLockTest)