I would like to see a few more test cases:

1) a getforupdate without any conflicting transactions 
2) a getforupdate with a conflict transaction that causes a timeout on the get
3) a getforupdate where the transaction fails after it has acquired the lock (to make sure we release the lock if the user runs into a failure further along the transactional logic)
4) a getforupdate that is done multiple times on the same key to make sure that the lock is reentrant