blob: 5f4ea747596d12d2e2734bb95d86c1dd3c058771 [file] [log] [blame]
package stress;
import java.io.File;
import java.util.Properties;
import java.util.Random;
import junit.framework.TestCase;
import com.ecyrd.jspwiki.TestEngine;
import com.ecyrd.jspwiki.TextUtil;
import com.ecyrd.jspwiki.WikiProvider;
import com.ecyrd.jspwiki.providers.CachingProvider;
import com.ecyrd.jspwiki.providers.FileSystemProvider;
public class MassiveRepositoryTest extends TestCase
{
Properties props = new Properties();
TestEngine engine;
protected void setUp() throws Exception
{
super.setUp();
props.load( TestEngine.findTestProperties("/jspwiki_vers.properties") );
props.setProperty( CachingProvider.PROP_CACHECAPACITY, "1000" );
engine = new TestEngine(props);
}
protected void tearDown() throws Exception
{
super.tearDown();
String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
// Remove file
File f = new File( files );
TestEngine.deleteAll(f);
}
private String getName( int i )
{
String baseName = "Page";
return baseName + i;
}
public void testMassiveRepository1()
throws Exception
{
String baseText = "!This is a page %d\r\n\r\nX\r\n\r\nLinks to [%1], [%2], [%3], [%4], [%5], [%6], [%7], [%8], [%9], [%0]";
int numPages = 1000;
int numRevisions = 1000;
int numRenders = 10000;
int tickmarks = 100;
Random random = new Random();
Benchmark sw = new Benchmark();
sw.start();
System.out.println("Creating "+numPages+" pages");
//
// Create repository
//
int pm = numPages/tickmarks;
for( int i = 0; i < numPages; i++ )
{
String name = getName(i);
String text = TextUtil.replaceString( baseText, "%d", name );
for( int r = 0; r < 10; r++ )
{
text = TextUtil.replaceString( text, "%"+r, getName(i+r-5) );
}
engine.saveText( name, text );
if( i % pm == 0 ) { System.out.print("."); System.out.flush(); }
}
System.out.println("\nTook "+sw.toString()+", which is "+sw.toString(numPages)+" adds/second");
//
// Create new versions
//
sw.stop();
sw.reset();
sw.start();
System.out.println("Checking in "+numRevisions+" revisions");
pm = numRevisions/tickmarks;
for( int i = 0; i < numRevisions; i++ )
{
String page = getName( random.nextInt( numPages ) );
String content = engine.getPureText( page, WikiProvider.LATEST_VERSION );
content = TextUtil.replaceString( content, "X", "XX" );
engine.saveText( page, content );
if( i % pm == 0 ) { System.out.print("."); System.out.flush(); }
}
System.out.println("\nTook "+sw.toString()+", which is "+sw.toString(numRevisions)+" adds/second");
assertEquals( "Right number of pages", numPages, engine.getPageCount() );
//
// Rendering random pages
//
sw.stop();
sw.reset();
sw.start();
System.out.println("Rendering "+numRenders+" pages");
pm = numRenders/tickmarks;
for( int i = 0; i < numRenders; i++ )
{
String page = getName( random.nextInt( numPages ) );
String content = engine.getHTML( page, WikiProvider.LATEST_VERSION );
if( i % pm == 0 ) { System.out.print("."); System.out.flush(); }
}
sw.stop();
System.out.println("\nTook "+sw.toString()+", which is "+sw.toString(numRenders)+" renders/second");
}
}