Add testing dirs
[proteocache.git] / testsrc / compbio / engine / FilePullerTester.java
diff --git a/testsrc/compbio/engine/FilePullerTester.java b/testsrc/compbio/engine/FilePullerTester.java
new file mode 100644 (file)
index 0000000..2ffb4c8
--- /dev/null
@@ -0,0 +1,203 @@
+/* Copyright (c) 2009 Peter Troshin\r
+ *  \r
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     \r
+ * \r
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the\r
+ *  Apache License version 2 as published by the Apache Software Foundation\r
+ * \r
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
+ *  License for more details.\r
+ * \r
+ *  A copy of the license is in apache_license.txt. It is also available here:\r
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+ * \r
+ * Any republication or derived work distributed in source code form\r
+ * must include this copyright and license notice.\r
+ */\r
+\r
+package compbio.engine;\r
+\r
+import static org.testng.Assert.assertEquals;\r
+import static org.testng.Assert.assertNotNull;\r
+import static org.testng.Assert.fail;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.testng.annotations.BeforeTest;\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable;\r
+import compbio.engine.local.AsyncLocalRunner;\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.ChunkHolder;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.runner.msa.ClustalW;\r
+import compbio.runner.msa.Muscle;\r
+\r
+public class FilePullerTester {\r
+\r
+       public static String test_input = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+                       + "TO1381.fasta";\r
+\r
+       String jobId;\r
+       String jobId2;\r
+       String jobId3;\r
+\r
+       @BeforeTest(alwaysRun = true)\r
+       public void init() {\r
+               ClustalW clustal = new ClustalW();\r
+               clustal.setInput(test_input);\r
+               Muscle ms = new Muscle().setInput(test_input);\r
+               Muscle ms2 = new Muscle().setInput(test_input);\r
+\r
+               try {\r
+                       // For local execution use relavive\r
+                       ConfiguredExecutable<ClustalW> confClustal = Configurator\r
+                                       .configureExecutable(clustal, Executable.ExecProvider.Local);\r
+                       ConfiguredExecutable<Muscle> confms = Configurator\r
+                                       .configureExecutable(ms, Executable.ExecProvider.Local);\r
+\r
+                       ConfiguredExecutable<Muscle> confms2 = Configurator\r
+                                       .configureExecutable(ms2, Executable.ExecProvider.Local);\r
+\r
+                       AsyncLocalRunner as = new AsyncLocalRunner();\r
+                       jobId = as.submitJob(confClustal);\r
+                       jobId2 = as.submitJob(confms);\r
+                       jobId3 = as.submitJob(confms2);\r
+\r
+                       ConfiguredExecutable<?> al = as.getResults(jobId);\r
+                       ConfiguredExecutable<?> al2 = as.getResults(jobId2);\r
+                       ConfiguredExecutable<?> al3 = as.getResults(jobId3);\r
+                       assertNotNull(al);\r
+                       assertNotNull(al2);\r
+                       assertNotNull(al3);\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_engine })\r
+       public void testPull() {\r
+               assertNotNull(jobId, "init() method failed!");\r
+               String workDir = Configurator.getWorkDirectory(jobId);\r
+               String statFile = workDir + File.separator + ClustalW.getStatFile();\r
+\r
+               ChunkHolder ch = ProgressGetter.pull(statFile, 0);\r
+               while (ch == null) {\r
+                       ch = ProgressGetter.pull(statFile, 0);\r
+               }\r
+               String chunk = "";\r
+               long pos = 0;\r
+               do {\r
+                       chunk = ch.getChunk();\r
+                       assertNotNull(chunk);\r
+                       pos = ch.getNextPosition();\r
+                       ch = ProgressGetter.pull(statFile, pos);\r
+               } while (chunk.length() > 0);\r
+\r
+               // All consequent pulls just return empty chunk and same position =\r
+               // file.length\r
+               ch = ProgressGetter.pull(statFile, pos);\r
+               assertNotNull(ch);\r
+               assertEquals(ch.getChunk().length(), 0);\r
+               // Output file size depends on the operation system fs!\r
+               // assertEquals(ch.getNextPosition(), 668);\r
+\r
+               ch = ProgressGetter.pull(statFile, pos);\r
+               assertNotNull(ch);\r
+               assertEquals(ch.getChunk().length(), 0);\r
+               // Output file size depends on the operation system and fs!\r
+               // assertEquals(ch.getNextPosition(), 668);\r
+\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_engine })\r
+       public void testGetDelay() {\r
+               FilePuller fp = FilePuller.newFilePuller(Configurator\r
+                               .getWorkDirectory(jobId)\r
+                               + File.separator + "stat.log", 256);\r
+               // default delay is 5 minutes\r
+               assertEquals(fp.getDelayValue(TimeUnit.SECONDS), 5 * 60);\r
+               long d = 1000 * 1000 * 1000L * 60; // 1m in nanoseconds\r
+               fp.setDelay(d, TimeUnit.NANOSECONDS);\r
+               assertEquals(fp.getDelayValue(TimeUnit.NANOSECONDS), d);\r
+               assertEquals(fp.getDelayValue(TimeUnit.SECONDS), 60);\r
+               assertEquals(fp.getDelayValue(TimeUnit.MINUTES), 1);\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_engine }, dependsOnMethods = { "testPull" })\r
+       public void testCache() {\r
+               assertNotNull(jobId, "init() method failed!");\r
+               assertNotNull(jobId2, "init() method failed!");\r
+               assertEquals(PulledFileCache.getSize(), 1); // One is from previous test\r
+\r
+               String statFile = Configurator.getWorkDirectory(jobId) + File.separator\r
+                               + ClustalW.getStatFile();\r
+               String statFile2 = Configurator.getWorkDirectory(jobId2)\r
+                               + File.separator + Muscle.getStatFile();\r
+               String statFile3 = Configurator.getWorkDirectory(jobId3)\r
+                               + File.separator + Muscle.getStatFile();\r
+\r
+               ChunkHolder ch = ProgressGetter.pull(statFile, 0);\r
+               assertEquals(PulledFileCache.getSize(), 1); // Still one as job has been\r
+               // retrieved from cache\r
+               ChunkHolder ch2 = ProgressGetter\r
+                               .pull(statFile2, 0, 5, TimeUnit.SECONDS); // 5\r
+               // second delay\r
+               assertEquals(PulledFileCache.getSize(), 2); // One is from previous test\r
+\r
+               // Pull the first job completely\r
+               while (ch == null) {\r
+                       ch = ProgressGetter.pull(statFile, 0);\r
+               }\r
+               String chunk = "";\r
+               long pos = 0;\r
+               do {\r
+                       chunk = ch.getChunk();\r
+                       assertNotNull(chunk);\r
+                       pos = ch.getNextPosition();\r
+                       ch = ProgressGetter.pull(statFile, pos);\r
+               } while (chunk.length() > 0);\r
+\r
+               try {\r
+                       Thread.sleep(1000 * 6);\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               }\r
+               // Elements are removed on put operation only\r
+               assertEquals(PulledFileCache.getSize(), 2); // One is from previous test\r
+               ChunkHolder ch3 = ProgressGetter.pull(statFile3, 0);\r
+               // Now old element was removed, but new added, thus size remains\r
+               // constant\r
+               assertEquals(PulledFileCache.getSize(), 2); // One is from previous test\r
+\r
+       }\r
+\r
+       @Test\r
+       public void testGet() {\r
+\r
+               FilePuller pp = FilePuller\r
+                               .newProgressPuller(AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+                                               + "percentProgress.txt");\r
+               try {\r
+                       assertEquals(pp.getProgress(), 12);\r
+                       pp.disconnect();\r
+               } catch (NumberFormatException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               }\r
+       }\r
+}\r