package org.openntf.domino.junit; import java.util.Collection; import org.openntf.domino.session.ISessionFactory; import org.openntf.domino.session.NativeSessionFactory; import org.openntf.domino.session.TrustedSessionFactory; import org.openntf.domino.thread.DominoThread; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; public enum TestRunnerUtil { ; public static ISessionFactory NATIVE_SESSION = new NativeSessionFactory(null); public static ISessionFactory TRUSTED_SESSION = new TrustedSessionFactory(null); public static void runAsDominoThread(final Runnable r, final ISessionFactory sf) { Factory.startup(); lotus.domino.NotesThread.sinitThread(); Factory.initThread(Factory.STRICT_THREAD_CONFIG); Factory.setSessionFactory(sf, SessionType.CURRENT); Thread t = new DominoThread(r, "TestRunner"); t.start(); try { t.join(); } catch (InterruptedException e) { e.printStackTrace(); } Factory.termThread(); lotus.domino.NotesThread.stermThread(); Factory.shutdown(); } public static void runAsDominoThread(final Runnable r, final ISessionFactory sf, final int instances) { Factory.startup(); lotus.domino.NotesThread.sinitThread(); Factory.initThread(Factory.STRICT_THREAD_CONFIG); Factory.setSessionFactory(sf, SessionType.CURRENT); Thread[] t = new Thread[instances]; for (int i = 0; i < instances; i++) { t[i] = new DominoThread(r, "TestRunner-" + i); //System.out.println("Starting Thread " + t[i].getName()); t[i].start(); } try { for (int i = 0; i < instances; i++) { t[i].join(); } } catch (InterruptedException e) { e.printStackTrace(); } Factory.termThread(); lotus.domino.NotesThread.stermThread(); Factory.shutdown(); } public static void runAsDominoThread(final Class<? extends Runnable>[] runClasses, final ISessionFactory sf, final int instances) { Factory.startup(); lotus.domino.NotesThread.sinitThread(); Factory.initThread(Factory.STRICT_THREAD_CONFIG); Factory.setSessionFactory(sf, SessionType.CURRENT); Thread[] t = new Thread[instances * runClasses.length]; int classCount = 0; for (Class<? extends Runnable> r : runClasses) { int tInst = classCount++ * instances; for (int i = 0; i < instances; i++) { try { t[tInst + i] = new DominoThread(r.newInstance(), "TestDominoRunner-" + tInst); t[tInst + i].start(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } } try { for (int i = 0; i < t.length; i++) { t[i].join(); } } catch (InterruptedException e) { e.printStackTrace(); } Factory.termThread(); lotus.domino.NotesThread.stermThread(); Factory.shutdown(); } public static void runAsDominoThread(final Collection<Class<? extends Runnable>> runClasses, final ISessionFactory sf, final int instances) { Factory.startup(); lotus.domino.NotesThread.sinitThread(); Factory.initThread(Factory.STRICT_THREAD_CONFIG); Factory.setSessionFactory(sf, SessionType.CURRENT); Thread[] t = new Thread[instances * runClasses.size()]; for (Class<? extends Runnable> r : runClasses) { for (int i = 0; i < instances; i++) { try { t[i] = new DominoThread(r.newInstance(), "TestRunner-" + i); t[i].start(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } } try { for (int i = 0; i < t.length; i++) { t[i].join(); } } catch (InterruptedException e) { e.printStackTrace(); } Factory.termThread(); lotus.domino.NotesThread.stermThread(); Factory.shutdown(); } public static void runAsDominoThread(final Class<? extends Runnable> r, final ISessionFactory sf, final int instances) { Factory.startup(); lotus.domino.NotesThread.sinitThread(); Factory.initThread(Factory.STRICT_THREAD_CONFIG); Factory.setSessionFactory(sf, SessionType.CURRENT); Thread[] t = new Thread[instances]; for (int i = 0; i < instances; i++) { try { t[i] = new DominoThread(r.newInstance(), "TestRunner-" + i); t[i].start(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } try { for (int i = 0; i < instances; i++) { t[i].join(); } } catch (InterruptedException e) { e.printStackTrace(); } Factory.termThread(); lotus.domino.NotesThread.stermThread(); Factory.shutdown(); } public static void runAsNotesThread(final Class<? extends Runnable> r, final int instances) { lotus.domino.NotesThread.sinitThread(); Thread[] t = new Thread[instances]; for (int i = 0; i < instances; i++) { try { t[i] = new lotus.domino.NotesThread(r.newInstance(), "TestNotesRunner-" + i); t[i].start(); Thread.sleep(300); // sleep some millis, as the legacy notes API may crash } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } try { for (int i = 0; i < instances; i++) { t[i].join(); } } catch (InterruptedException e) { e.printStackTrace(); } lotus.domino.NotesThread.stermThread(); } }