!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!"); } void regularTest { lock1 = new FileBasedLock(file); lock1.verbose = true; lock2 = new FileBasedLock(file); lock2.verbose = true; 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 { lock1 = new FileBasedLock(file); lock1.verbose = true; lock2 = new FileBasedLock(file); lock2.verbose = true; 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); } }