4 * Tests for the lock system.
6 class LockFunctionalTest extends DrupalWebTestCase {
8 public static function getInfo() {
10 'name' => 'Locking framework tests',
11 'description' => 'Confirm locking works between two separate requests.',
17 parent::setUp('system_test');
21 * Confirm that we can acquire and release locks in two parallel requests.
23 function testLockAcquire() {
24 $lock_acquired = 'TRUE: Lock successfully acquired in system_test_lock_acquire()';
25 $lock_not_acquired = 'FALSE: Lock not acquired in system_test_lock_acquire()';
26 $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock acquired by this request.', 'Lock');
27 $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock extended by this request.', 'Lock');
28 lock_release('system_test_lock_acquire');
30 // Cause another request to acquire the lock.
31 $this->drupalGet('system-test/lock-acquire');
32 $this->assertText($lock_acquired, 'Lock acquired by the other request.', 'Lock');
33 // The other request has finished, thus it should have released its lock.
34 $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock acquired by this request.', 'Lock');
35 // This request holds the lock, so the other request cannot acquire it.
36 $this->drupalGet('system-test/lock-acquire');
37 $this->assertText($lock_not_acquired, 'Lock not acquired by the other request.', 'Lock');
38 lock_release('system_test_lock_acquire');
40 // Try a very short timeout and lock breaking.
41 $this->assertTrue(lock_acquire('system_test_lock_acquire', 0.5), 'Lock acquired by this request.', 'Lock');
43 // The other request should break our lock.
44 $this->drupalGet('system-test/lock-acquire');
45 $this->assertText($lock_acquired, 'Lock acquired by the other request, breaking our lock.', 'Lock');
46 // We cannot renew it, since the other thread took it.
47 $this->assertFalse(lock_acquire('system_test_lock_acquire'), 'Lock cannot be extended by this request.', 'Lock');
49 // Check the shut-down function.
50 $lock_acquired_exit = 'TRUE: Lock successfully acquired in system_test_lock_exit()';
51 $lock_not_acquired_exit = 'FALSE: Lock not acquired in system_test_lock_exit()';
52 $this->drupalGet('system-test/lock-exit');
53 $this->assertText($lock_acquired_exit, 'Lock acquired by the other request before exit.', 'Lock');
54 $this->assertTrue(lock_acquire('system_test_lock_exit'), 'Lock acquired by this request after the other request exits.', 'Lock');