!7 cprint TestFileBasedLock { switchable File file; switchable double timeout = 10; transient FileBasedLock lock1, lock2; start-thread { if (file == null) setField(file := javaxCachesDir("Lock Test/lockfile-" + aGlobalID())); print("Using file: " + file); regularTest(); crashTest(); print("All OK!"); } FileBasedLock makeLock() { FileBasedLock lock = new(file); lock.verbose = true; lock.timeout = timeout; ret lock; } void regularTest { afterwards { cleanMeUp(); } lock1 = makeLock(); lock2 = makeLock(); assertTrueVerbose("Locking lock1", lock1.tryToLock()); assertFalseVerbose("Locking lock2", lock2.tryToLock()); print("Waiting for timeout (" + (timeout+1) + "s)"); sleepSeconds(timeout+1); assertFalseVerbose("Locking lock2", lock2.tryToLock()); close(lock1); assertTrueVerbose("Locking lock2", lock2.tryToLock()); close(lock2); print("\nRegular test OK!\n"); } void crashTest { afterwards { cleanMeUp(); } lock1 = makeLock(); lock2 = makeLock(); assertTrueVerbose("Locking lock1", lock1.tryToLock()); assertFalseVerbose("Locking lock2", lock2.tryToLock()); lock1._simulateCrash(); print("Waiting for timeout (" + (timeout+1) + "s)"); sleepSeconds(timeout+1); assertTrueVerbose("Locking lock2", lock2.tryToLock()); closeAll(lock1, lock2); print("\nCrash test OK!\n"); } void cleanMeUp { closeAll(lock1, lock2); } }