2011-01-11 05:07:29 +08:00
|
|
|
package org.broadinstitute.sting.queue.util
|
|
|
|
|
|
|
|
|
|
import org.broadinstitute.sting.BaseTest
|
|
|
|
|
import org.testng.annotations.Test
|
|
|
|
|
import org.testng.Assert
|
|
|
|
|
|
2011-01-25 12:11:49 +08:00
|
|
|
class ShellJobUnitTest {
|
2011-01-11 05:07:29 +08:00
|
|
|
@Test
|
|
|
|
|
def testEcho {
|
|
|
|
|
val job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("echo Hello World")
|
|
|
|
|
job.run()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test(expectedExceptions=Array(classOf[JobExitException]))
|
|
|
|
|
def testBadQuotes {
|
|
|
|
|
val job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("echo 'Hello World")
|
|
|
|
|
job.run()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
def testGoodQuotes {
|
|
|
|
|
val job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("echo 'Hello World'")
|
|
|
|
|
job.run()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
def testEscapeCharacters {
|
|
|
|
|
var job: ShellJob = null
|
|
|
|
|
|
|
|
|
|
job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("echo #")
|
2011-01-25 12:11:49 +08:00
|
|
|
job.outputFile = BaseTest.createTempFile("temp", "")
|
2011-01-11 05:07:29 +08:00
|
|
|
job.run()
|
|
|
|
|
Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, "")
|
|
|
|
|
|
|
|
|
|
job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("""echo \#""")
|
2011-01-25 12:11:49 +08:00
|
|
|
job.outputFile = BaseTest.createTempFile("temp", "")
|
2011-01-11 05:07:29 +08:00
|
|
|
job.run()
|
|
|
|
|
Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, "#")
|
|
|
|
|
|
|
|
|
|
job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript("""echo \\#""")
|
2011-01-25 12:11:49 +08:00
|
|
|
job.outputFile = BaseTest.createTempFile("temp", "")
|
2011-01-11 05:07:29 +08:00
|
|
|
job.run()
|
|
|
|
|
Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, """\#""")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
def testLongCommand {
|
|
|
|
|
// This command fails on some systems with a 4096 character limit when run via the old sh -c "echo ...",
|
|
|
|
|
// but works on the same systems when run via sh <script>
|
|
|
|
|
val builder = new StringBuilder
|
|
|
|
|
builder.append("echo ")
|
|
|
|
|
for (i <- 1 to 500) {
|
|
|
|
|
val s = i.toString
|
|
|
|
|
builder.append("000".take(3-s.length)).append(s).append("______ ")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val job = new ShellJob
|
|
|
|
|
job.shellScript = writeScript(builder.toString)
|
|
|
|
|
job.run()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private def writeScript(contents: String) = {
|
2011-01-25 12:11:49 +08:00
|
|
|
val file = BaseTest.createTempFile("temp", "")
|
|
|
|
|
IOUtils.writeContents(file, contents)
|
|
|
|
|
file
|
2011-01-11 05:07:29 +08:00
|
|
|
}
|
|
|
|
|
}
|