Benjamin Eberlei has a new post today about how you can use PHPUnit tests to ensure that database locking is working like it should. With the help of Gearman he shows you how to use some locking tests for Doctrine setups to ensure rows locked for a specific amount of time are staying that way.
Since PHP does not support process forking or threads naturally you run into a serious problem. How do you execute two database queries in parallel and verify that indeed one query is locking read access for the second one? [...] Solving this problem with Gearman provides a pretty nice "real-world" example for the Job-Server that I wanted to share.
He includes the code to make a sample "agent" to run a transaction and lock a certain set of information. On the other side, there's the worker method that loops to find the locked items until they disappear. The PHPUnit tests case combines these in a "testLockIsAcquired" with a handler for the completed test.