package org.docbag.template.transformer.velocity; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import junit.framework.Assert; import org.docbag.stream.MemoryInputStream; import org.docbag.template.MemoryTemplateStream; import org.junit.Test; /** * ThreadAwareTemplateResourceLoaderTest * * @author Jakub Torbicki */ public class ThreadAwareTemplateResourceLoaderTest { private static final int THREADS_NUMBER = 200; private static final int TEMPLATES_NUMBER = 1000; private static Exception exception; private static final ThreadAwareTemplateResourceLoader loader = new ThreadAwareTemplateResourceLoader(); @Test public void testThreadSafety() throws Exception { int poolSize = THREADS_NUMBER; ExecutorService service = Executors.newFixedThreadPool(poolSize); List<Future<Runnable>> futures = new ArrayList<Future<Runnable>>(); for (int n = 0; n < THREADS_NUMBER; n++) { Future f = service.submit(new DocumentGenerator()); futures.add(f); } for (Future<Runnable> f : futures) { f.get(); } service.shutdownNow(); if (exception != null) { throw exception; } } @Test public void testIsSourceModified() throws Exception { ThreadAwareTemplateResourceLoader loader = new ThreadAwareTemplateResourceLoader(); Assert.assertFalse(loader.isSourceModified(null)); } @Test public void testGetLastModified() throws Exception { ThreadAwareTemplateResourceLoader loader = new ThreadAwareTemplateResourceLoader(); Assert.assertEquals(0, loader.getLastModified(null)); } private static class DocumentGenerator implements Runnable { public void run() { int n = TEMPLATES_NUMBER / THREADS_NUMBER; for (int i = 0; i < n; i++) { try { MemoryInputStream stream = new MemoryInputStream(new byte[0]); loader.putResource(new MemoryTemplateStream(stream, Thread.currentThread().getName())); Assert.assertTrue(loader.getResourceStream(Thread.currentThread().getName()) == stream); Assert.assertNull(loader.getResourceStream(Thread.currentThread().getName() + "_FALSE_1")); loader.clearResource(); Assert.assertNull(loader.getResourceStream(Thread.currentThread().getName())); } catch (Exception e) { exception = e; break; } } } } }