Mercurial Hosting > nabble
view src/nabble/view/lib/Test.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line source
package nabble.view.lib; import java.io.IOException; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.ArrayList; import java.util.ListIterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fschmidt.db.DbDatabase; import fschmidt.util.java.IoUtils; import nabble.model.ModelHome; import nabble.model.Site; import nabble.model.Db; import nabble.model.User; import nabble.model.ModelException; import nabble.model.Message; import nabble.model.Node; public final class Test { private Test() {} // never private static final Logger logger = LoggerFactory.getLogger(Test.class); public static interface Task { public void run(Site site) throws Exception; } private static final String PREFEX = "test-"; private static final List<Site> sites = new ArrayList<Site>(); private static final List<Thread> threads = new ArrayList<Thread>(); /* static { try { Connection con = Db.dbGlobal().getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "select site_id from site_global" ); while( rs.next() ) { long siteId = rs.getLong("site_id"); Site site = ModelHome.getSite(siteId); String name = name(site); if( name.startsWith(PREFEX) ) sites.add(site); } rs.close(); stmt.close(); con.close(); } catch(SQLException e) { logger.error("init",e); System.exit(-1); } } */ public static void delete() { checkThreads(); for( Site site : sites ) { site.getRootNode().deleteRecursively(); } sites.clear(); logger.info("sites deleted"); } public static void populate(int n,String email) { if( !sites.isEmpty() ) throw new RuntimeException("sites not empty"); DbDatabase db = Db.dbGlobal(); for( int i=1; i<=n; i++ ) { logger.info("creating site "+i); db.beginTransaction(); try { Site site = ModelHome.newSite( "forum", PREFEX+i, "", Message.Format.TEXT, email, "tester" ); Permissions.addToGroup( (User)site.getRootNode().getOwner(), Permissions.ADMINISTRATORS_GROUP ); String key = site.newRegistration(email,"tester","tester","/"); User user = (User)site.getRootNode().getOwner(); user.setPassword("tester"); user.register(); user.update(); db.commitTransaction(); site = site.getGoodCopy(); sites.add(site); } catch (ModelException e) { throw new RuntimeException(e); } finally { db.endTransaction(); } } logger.info(""+n+" sites populated"); } public static void getGoodCopies() { for( ListIterator<Site> iter = sites.listIterator(); iter.hasNext(); ) { iter.set( iter.next().getGoodCopy() ); } } private static void checkThreads() { if( !threads.isEmpty() ) throw new RuntimeException("tasks running"); } public static void run(final Task task) { for( Site site : sites ) { final Site taskSite = site; Thread thread = new Thread(new Runnable(){public void run(){ try { task.run(taskSite); } catch(Exception e) { logger.error("task failed for "+taskSite,e); } }}); thread.start(); threads.add(thread); } } public static void waitForThreads() { for( Thread thread : threads ) { try { thread.join(); } catch(InterruptedException e) { throw new RuntimeException(e); } } threads.clear(); logger.info("threads done"); } // utils public static String name(Site site) { return site.getRootNode().getSubject(); } public static Node newPost(Node parent,String subject) throws ModelException { Node node; DbDatabase db = parent.getSite().getDb(); db.beginTransaction(); try { node = parent.getGoodCopy().getOwner().newChildNode(Node.Kind.POST,subject,"some message",Message.Format.TEXT,parent); node.insert(false); db.commitTransaction(); } finally { db.endTransaction(); } return node.getGoodCopy(); } public static String readPage(Node node) throws IOException { return IoUtils.readPage( Jtp.url(node) ); } public static void clearPageCache() { MyJtpServlet.getJtpContext().getHttpCache().clear(); } }