Warning: session_start(): open(/var/lib/php/sessions/sess_ilao65gh7mur9gc51cirsovs87, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
cprint TestFileBasedLock {
switchable File file;
switchable double timeout = 10;
transient FileBasedLock lock1, lock2;
transient S contents; // contents for lock file
start-thread {
if (file == null)
setField(file := javaxCachesDir("Lock Test/lockfile-" + aGlobalID()));
print("Using file: " + file);
contents = null;
regularTest();
crashTest();
contents = "hello";
regularTest();
crashTest();
print("All OK!");
}
FileBasedLock makeLock() {
FileBasedLock lock = new(file);
if (contents != null)
lock.contentsForLockFile(contents);
lock.verbose = true;
lock.timeout = timeout;
ret lock;
}
void regularTest() {
afterwards { cleanMeUp(); }
lock1 = makeLock();
lock2 = makeLock();
assertTrueVerbose("Locking lock1", lock1.tryToLock());
// Check lock file contents
assertEquals(unnull(contents), loadTextFile(file)));
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);
}
}