drupalModuleEnable('job_queue'); class JobQueueTest extends DrupalTestCase { function get_info() { return array( 'name' => 'Job Queue Feature Tests', 'desc' => 'Test Job Queue module features.', 'group' => 'Job Queue', ); } function testQueueJob() { $desc = 'testJobQueue '. uniqid(); $function = 'sleep'; $arguments = array(1); $file = 'includes/bootstrap.inc'; // We'll use queue 7357(test) and hope no one else does.. $queue = 7357; // clean up our queue just in case. db_query('DELETE FROM {job_queue} WHERE queue = %d', $queue); job_queue_add($function, $desc, $arguments, $file, $queue); $result = db_query("SELECT * FROM {job_queue} WHERE description = '%s'", $desc); $this->assertTrue(db_num_rows($result) == 1, 'Verifying job added to queue'); $job = db_fetch_object($result); $this->assertTrue($job->function == $function, 'Verifying function is unchanged'); $this->assertFalse(array_diff(unserialize($job->arguments), $arguments), 'Verifying arguments are unchanged'); $this->assertTrue($job->file == $file, 'Verifying include file is unchanged'); $this->assertTrue($job->queue == $queue, 'Verifying job is in the proper queue'); $this->assertTrue(job_queue_dequeue($queue), 'Dequeueing Job'); $result = db_query("SELECT * FROM {job_queue} WHERE description = '%s'", $desc); $this->assertTrue(db_num_rows($result) == 0, 'Verifying job dequeued'); // clean up now that we're done; db_query('DELETE FROM {job_queue} WHERE queue = %d', $queue); } function testQueueConcurrencyLocking() { $desc = 'testJobQueue '. uniqid(); $function = 'sleep'; $arguments = array(1); $file = 'includes/bootstrap.inc'; // We'll use queue 7357(test) and hope no one else does.. $queue = 7357; // We'll use 7357 for our lock id as well. $locked = 7357; // clean up our queue just in case. db_query('DELETE FROM {job_queue} WHERE queue = %d', $queue); job_queue_add($function, $desc, $arguments, $file, $queue); $result = db_query("SELECT * FROM {job_queue} WHERE description = '%s'", $desc); $this->assertTrue(db_num_rows($result) == 1, 'Verifying job added to queue'); db_query("UPDATE {job_queue} SET locked = %d WHERE description = '%s'", $locked, $desc); $result = db_query("SELECT * FROM {job_queue} WHERE description = '%s'", $desc); $job = db_fetch_object($result); $this->assertTrue($job->locked == $locked, 'Verify manual locking.'); $this->assertFalse(job_queue_dequeue($locked), 'Verifying dequeue fails after job is locked.'); // clean up now that we're done; db_query('DELETE FROM {job_queue} WHERE queue = %d', $queue); } }