ozeigermann    2004/12/19 02:35:56

  Modified:    transaction/src/test/org/apache/commons/transaction/locking
                        GenericLockTest.java
  Log:
  Added locking stress test
  
  Revision  Changes    Path
  1.8       +164 -4    
jakarta-commons/transaction/src/test/org/apache/commons/transaction/locking/GenericLockTest.java
  
  Index: GenericLockTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/transaction/src/test/org/apache/commons/transaction/locking/GenericLockTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- GenericLockTest.java      19 Dec 2004 03:07:23 -0000      1.7
  +++ GenericLockTest.java      19 Dec 2004 10:35:55 -0000      1.8
  @@ -549,4 +549,164 @@
           }
   
       }
  +
  +    public void testStress() throws Throwable {
  +
  +        sLogger.logInfo("\n\nStress checking locks\n\n");
  +        
  +        final String owner1 = "owner1";
  +        final String owner2 = "owner2";
  +        final String owner3 = "owner3";
  +        final String owner4 = "owner4";
  +        final String owner5 = "owner5";
  +        final String owner6 = "owner6";
  +        final String owner7 = "owner7";
  +        final String owner8 = "owner8";
  +        final String owner9 = "owner9";
  +        final String owner10 = "owner10";
  +
  +        final String res1 = "res1";
  +        final String res2 = "res2";
  +        final String res3 = "res3";
  +
  +        // choose low timeout so sometimes an owner times out
  +        final ReadWriteUpgradeLockManager manager = new 
ReadWriteUpgradeLockManager(sLogger, 100);
  +
  +        final RendezvousBarrier restart = new RendezvousBarrier("restart", 
5, TIMEOUT, sLogger);
  +        final RendezvousBarrier start = new RendezvousBarrier("start", 5, 
TIMEOUT, sLogger);
  +
  +        for (int i = 0; i < CONCURRENT_TESTS; i++) {
  +            
  +            System.out.print(".");
  +
  +            Thread t1 = new Thread(new Runnable() {
  +                public void run() {
  +                    try {
  +                        try {
  +                            synchronized (start) {
  +                                start.meet();
  +                                start.reset();
  +                            }
  +                            manager.readLock(owner1, res1);
  +                            manager.readLock(owner1, res2);
  +                            manager.upgradeLock(owner1, res3);
  +                            manager.writeLock(owner1, res3);
  +                        } catch (LockException ie) {
  +                        } finally {
  +                            manager.releaseAll(owner1);
  +                            synchronized (restart) {
  +                                restart.meet();
  +                                restart.reset();
  +                            }
  +                        }
  +                    } catch (InterruptedException ie) {
  +                    }
  +                }
  +            }, "Thread #1");
  +            t1.start();
  +
  +            Thread t2 = new Thread(new Runnable() {
  +                public void run() {
  +                    try {
  +                        try {
  +                            synchronized (start) {
  +                                start.meet();
  +                                start.reset();
  +                            }
  +                            manager.readLock(owner2, res1);
  +                            manager.readLock(owner2, res2);
  +                            manager.upgradeLock(owner2, res3);
  +                            manager.writeLock(owner2, res3);
  +                        } catch (LockException ie) {
  +                        } finally {
  +                            manager.releaseAll(owner2);
  +                            synchronized (restart) {
  +                                restart.meet();
  +                                restart.reset();
  +                            }
  +                        }
  +                    } catch (InterruptedException ie) {
  +                    }
  +                }
  +            }, "Thread #2");
  +            t2.start();
  +
  +            Thread t3 = new Thread(new Runnable() {
  +                public void run() {
  +                    try {
  +                        try {
  +                            synchronized (start) {
  +                                start.meet();
  +                                start.reset();
  +                            }
  +                            manager.readLock(owner3, res1);
  +                            manager.readLock(owner3, res2);
  +                            manager.upgradeLock(owner3, res3);
  +                            manager.writeLock(owner3, res3);
  +                        } catch (LockException ie) {
  +                        } finally {
  +                            manager.releaseAll(owner3);
  +                            synchronized (restart) {
  +                                restart.meet();
  +                                restart.reset();
  +                            }
  +                        }
  +                    } catch (InterruptedException ie) {
  +                    }
  +                }
  +            }, "Thread #3");
  +            t3.start();
  +
  +            Thread t4 = new Thread(new Runnable() {
  +                public void run() {
  +                    try {
  +                        try {
  +                            synchronized (start) {
  +                                start.meet();
  +                                start.reset();
  +                            }
  +                            manager.readLock(owner4, res1);
  +                            manager.readLock(owner4, res2);
  +                            manager.upgradeLock(owner4, res3);
  +                            manager.writeLock(owner4, res3);
  +                        } catch (LockException ie) {
  +                        } finally {
  +                            manager.releaseAll(owner4);
  +                            synchronized (restart) {
  +                                restart.meet();
  +                                restart.reset();
  +                            }
  +                        }
  +                    } catch (InterruptedException ie) {
  +                    }
  +                }
  +            }, "Thread #4");
  +            t4.start();
  +
  +            try {
  +                try {
  +                    synchronized (start) {
  +                        start.meet();
  +                        start.reset();
  +                    }
  +                    manager.readLock("reader", res1);
  +                    manager.readLock("reader", res2);
  +                    manager.readLock("reader", res3);
  +
  +                } catch (LockException ie) {
  +                } finally {
  +                    manager.releaseAll("reader");
  +                    try {
  +                        synchronized (restart) {
  +                            restart.meet();
  +                            restart.reset();
  +                        }
  +                    } catch (InterruptedException ie) {
  +                    }
  +                }
  +            } catch (InterruptedException ie) {
  +            }
  +        }
  +
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to