mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	10953: Merged V2.1 to V2.2
      10904: AVM - add test suite wrapper, update existing tests to purge test stores (rather than all stores)
      10909: AVM - unit test updates only (exposed further tests via test suite)
      10947: AVM - unit test update only (extra checks)
   10969: Merged V2.1 to V2.2 (cont)
      10904: AVM - add test suite wrapper, update existing tests to purge test stores (rather than all stores)
   11054: Fixed blind failures in AVM unit tests
   11064: AVM - unit test error handling
   11068: Temporarily remove AvmTestSuite from the build
   11074: AVM - unit tests - added error stack on concurrency tests (to show failure in build output), removed 1 hour freeze, put back AVM test suite
   11218: Merged V2.1 to V2.2
      11217: AVM - unit test fix ("n must be positive")
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@11224 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2005-2008 Alfresco Software Limited.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU General Public License
 | |
|  * as published by the Free Software Foundation; either version 2
 | |
|  * of the License, or (at your option) any later version.
 | |
| 
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
| 
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 | |
|  * As a special exception to the terms and conditions of version 2.0 of
 | |
|  * the GPL, you may redistribute this Program in connection with Free/Libre
 | |
|  * and Open Source Software ("FLOSS") applications as described in Alfresco's
 | |
|  * FLOSS exception.  You should have recieved a copy of the text describing
 | |
|  * the FLOSS exception, and it is also available here:
 | |
|  * http://www.alfresco.com/legal/licensing" */
 | |
| 
 | |
| package org.alfresco.repo.avm;
 | |
| 
 | |
| import java.util.ArrayList;
 | |
| import java.util.List;
 | |
| 
 | |
| import org.alfresco.repo.avm.util.BulkLoader;
 | |
| 
 | |
| /**
 | |
|  * This is a stress test for the AVM repository.
 | |
|  * @author britt
 | |
|  */
 | |
| public class AVMStressTestP extends AVMServiceTestBase
 | |
| {
 | |
|     public void testStressA() throws Throwable
 | |
|     {
 | |
|         testNThreads(   1,  // nThreads
 | |
|                         "source/java/org/alfresco/repo/avm/actions", // relative dir to load from (.../repository)
 | |
|                         1,  // nCopies
 | |
|                         1,  // create file
 | |
|                         1,  // create dir
 | |
|                         0,  // rename
 | |
|                         0,  // create layered dir
 | |
|                         0,  // create layered file
 | |
|                         0,  // remove node
 | |
|                         0,  // modify file
 | |
|                         50,  // read file
 | |
|                         0,  // snapshot
 | |
|                         100); // # ops (for each thread)
 | |
|     }
 | |
|     
 | |
|     public void testStressB() throws Throwable
 | |
|     {
 | |
|         testNThreads(   2,  // nThreads
 | |
|                         "source/java/org/alfresco/repo/avm", // relative dir to load from (.../repository)
 | |
|                         1,  // nCopies
 | |
|                         10,  // create file
 | |
|                         2,  // create dir
 | |
|                         2,  // rename
 | |
|                         0,  // create layered dir  // TODO pending ETWOTWO-715 (is 2 in 2.1.x)
 | |
|                         0,  // create layered file // TODO pending ETWOTWO-715 (is 2 in 2.1.x)
 | |
|                         5,  // remove node
 | |
|                         10,  // modify file
 | |
|                         50,  // read file
 | |
|                         5,  // snapshot
 | |
|                         200); // # ops (for each thread)
 | |
|     }
 | |
|     
 | |
|     /*
 | |
|     public void xtestStressZ()
 | |
|     {
 | |
|         testNThreads(   4,      // nThreads
 | |
|                         "source", // relative dir to load from (.../repository)
 | |
|                         8,      // nCopies
 | |
|                         400,    // create file
 | |
|                         20,     // create dir
 | |
|                         5,      // rename
 | |
|                         5,      // create layered dir
 | |
|                         5,      // create layered file
 | |
|                         10,     // remove node
 | |
|                         20,     // modify file
 | |
|                         3200,   // read file
 | |
|                         10,     // snapshot
 | |
|                         40000); // # ops
 | |
|     }
 | |
|     */
 | |
|     
 | |
|     /**
 | |
|      * Test N threads
 | |
|      */
 | |
|     private void testNThreads(int nThreads, 
 | |
|                               String fsPath,
 | |
|                               int nCopies,
 | |
|                               int createFile,
 | |
|                               int createDir,
 | |
|                               int rename,
 | |
|                               int createLayeredDir,
 | |
|                               int createLayeredFile,
 | |
|                               int removeNode,
 | |
|                               int modifyFile,
 | |
|                               int readFile,
 | |
|                               int snapshot,
 | |
|                               int opCount) throws Throwable
 | |
|     {
 | |
|         try
 | |
|         {
 | |
|             BulkLoader loader = new BulkLoader();
 | |
|             loader.setAvmService(fService);
 | |
|             long start = System.currentTimeMillis();
 | |
|             for (int i = 0; i < nCopies; i++)
 | |
|             {
 | |
|                 fService.createDirectory("main:/", "" + i);
 | |
|                 loader.recursiveLoad(fsPath, "main:/" + i);
 | |
|                 fService.createSnapshot("main", null, null);
 | |
|             }
 | |
|             System.out.println("Load time: " + (System.currentTimeMillis() - start));
 | |
|             List<AVMTester> testers = new ArrayList<AVMTester>();
 | |
|             List<Thread> threads = new ArrayList<Thread>();
 | |
|             for (int i = 0; i < nThreads; i++)
 | |
|             {
 | |
|                 AVMTester tester
 | |
|                     = new AVMTester(createFile,
 | |
|                                 createDir,
 | |
|                                 rename,
 | |
|                                 createLayeredDir,
 | |
|                                 createLayeredFile,
 | |
|                                 removeNode,
 | |
|                                 modifyFile,
 | |
|                                 readFile,
 | |
|                                 snapshot,
 | |
|                                 opCount,
 | |
|                                 fService);
 | |
|                 tester.refresh();
 | |
|                 Thread thread = new Thread(tester);
 | |
|                 testers.add(tester);
 | |
|                 threads.add(thread);
 | |
|             }
 | |
|             for (Thread thread : threads)
 | |
|             {
 | |
|                 thread.start();
 | |
|             }
 | |
|             int exited = 0;
 | |
|             // long sampStart = System.currentTimeMillis();
 | |
|             while (exited != nThreads)
 | |
|             {
 | |
|                 try
 | |
|                 {
 | |
|                     Thread.sleep(2000);
 | |
|                     for (int i = 0; i < nThreads; i++)
 | |
|                     {
 | |
|                         if (threads.get(i) == null)
 | |
|                         {
 | |
|                             continue;
 | |
|                         }
 | |
|                         threads.get(i).join(1000);
 | |
|                         if (!threads.get(i).isAlive())
 | |
|                         {
 | |
|                             threads.set(i, null);
 | |
|                             if (testers.get(i).getError())
 | |
|                             {
 | |
|                                 for (AVMTester tester : testers)
 | |
|                                 {
 | |
|                                     tester.setExit();
 | |
|                                 }
 | |
|                                 //fail();
 | |
|                                 System.err.println("Stress tester error");
 | |
|                             }
 | |
|                             exited++;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 catch (InterruptedException e)
 | |
|                 {
 | |
|                     // Do nothing.
 | |
|                 }
 | |
|             }
 | |
|             
 | |
|             int errorCnt = 0;
 | |
|             for (AVMTester tester : testers)
 | |
|             {
 | |
|                 errorCnt += (tester.getError() ? 1 : 0);
 | |
|             }
 | |
|             
 | |
|             if (errorCnt > 0)
 | |
|             {
 | |
|             	StringBuffer errorStack = new StringBuffer();
 | |
|             	errorStack.append("Stress tester errors: ").append(errorCnt).append(" out of ").append(testers.size()).append(" are in error state");
 | |
|             	
 | |
|             	for (AVMTester tester : testers)
 | |
|                 {
 | |
|                    if (tester.getError())
 | |
|                    {
 | |
|                 	   errorStack.append("\n\n").append(tester.getErrorStackTrace());
 | |
|                    }
 | |
|                 }
 | |
|             	
 | |
|             	fail(errorStack.toString());
 | |
|             }
 | |
|         }
 | |
|         catch (Exception e)
 | |
|         {
 | |
|             e.printStackTrace(System.err);
 | |
|             throw e;
 | |
|         }
 | |
|     }
 | |
| }
 |