flock_ut.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "flock.h"
  2. #include "file_lock.h"
  3. #include "guard.h"
  4. #include "tempfile.h"
  5. #include <library/cpp/testing/unittest/registar.h>
  6. Y_UNIT_TEST_SUITE(TFileLockTest) {
  7. Y_UNIT_TEST(TestFlock) {
  8. TTempFileHandle tmp("./file");
  9. UNIT_ASSERT_EQUAL(Flock(tmp.GetHandle(), LOCK_EX), 0);
  10. UNIT_ASSERT_EQUAL(Flock(tmp.GetHandle(), LOCK_UN), 0);
  11. }
  12. Y_UNIT_TEST(TestFileLocker) {
  13. TTempFileHandle tmp("./file.locker");
  14. TFileLock fileLockExclusive1("./file.locker");
  15. TFileLock fileLockExclusive2("./file.locker");
  16. TFileLock fileLockShared1("./file.locker", EFileLockType::Shared);
  17. TFileLock fileLockShared2("./file.locker", EFileLockType::Shared);
  18. TFileLock fileLockShared3("./file.locker", EFileLockType::Shared);
  19. {
  20. TGuard<TFileLock> guard(fileLockExclusive1);
  21. }
  22. {
  23. TTryGuard<TFileLock> tryGuard(fileLockExclusive1);
  24. UNIT_ASSERT(tryGuard.WasAcquired());
  25. }
  26. {
  27. TGuard<TFileLock> guard1(fileLockExclusive1);
  28. TTryGuard<TFileLock> guard2(fileLockExclusive2);
  29. UNIT_ASSERT(!guard2.WasAcquired());
  30. }
  31. {
  32. TGuard<TFileLock> guard1(fileLockShared1);
  33. TTryGuard<TFileLock> guard2(fileLockShared2);
  34. TTryGuard<TFileLock> guard3(fileLockShared3);
  35. UNIT_ASSERT(guard2.WasAcquired());
  36. UNIT_ASSERT(guard3.WasAcquired());
  37. }
  38. {
  39. TGuard<TFileLock> guard1(fileLockExclusive1);
  40. TTryGuard<TFileLock> guard2(fileLockShared1);
  41. TTryGuard<TFileLock> guard3(fileLockShared2);
  42. UNIT_ASSERT(!guard2.WasAcquired());
  43. UNIT_ASSERT(!guard3.WasAcquired());
  44. }
  45. {
  46. TGuard<TFileLock> guard1(fileLockShared1);
  47. TTryGuard<TFileLock> guard2(fileLockExclusive1);
  48. TTryGuard<TFileLock> guard3(fileLockShared2);
  49. UNIT_ASSERT(!guard2.WasAcquired());
  50. UNIT_ASSERT(guard3.WasAcquired());
  51. }
  52. }
  53. } // Y_UNIT_TEST_SUITE(TFileLockTest)