def testSplitPipe(self): "tee into two sorts" nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outFwd = self.getOutputFile(".fwd.out") outRev = self.getOutputFile(".rev.out") fwd = Pipe() rev = Pipe() pd.create(("tee", POut(rev)), stdin=inf, stdout=POut(fwd)) pd.create(("sort",), stdin=fwd, stdout=outFwd) pd.create(("sort","-r"), stdin=rev, stdout=outRev) pd.wait() self.diffExpected(".fwd.out") self.diffExpected(".rev.out") self.commonChecks(nopen, pd, "^tee >\\(sort -r >.+/output/ProcDagTests\\.ProcDagTests\\.testSplitPipe\\.rev\\.out\\) <.+/input/simple1\\.txt \\| sort >.+/output/ProcDagTests\\.ProcDagTests\\.testSplitPipe\\.fwd\\.out$", isRe=True)
def testSimplePipe(self): nopen = self.numOpenFiles() pd = ProcDag() p = Pipe() pd.create(("true",), stdout=p) pd.create(("true",), stdin=p) pd.wait() self.commonChecks(nopen, pd, "true | true")
def testStdioCycleDetect(self): "stdio cycle detection" nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") p1 = Pipe() p2 = Pipe() p3 = Pipe() p4 = Pipe() pd.create(("cat",), stdin=inf, stdout=p1) pd.create(("cat", "/dev/stdin", PIn(p4)), stdin=p1, stdout=p3) pd.create(("cat",), stdin=p3, stdout=p4) ex = None try: pd.wait() except ProcDagException, ex: pass
def testJoinPipe2(self): "cat from two pipeline of two sorts each " nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outf = self.getOutputFile(".out") fwd1 = Pipe() fwd2 = Pipe() rev1 = Pipe() rev2 = Pipe() # sort reverse direction, then sort again into final orders pd.create(("sort","-r"), stdin=inf, stdout=fwd1) pd.create(("sort",), stdin=fwd1, stdout=fwd2) pd.create(("sort",), stdin=inf, stdout=rev1) pd.create(("sort","-r"), stdin=rev1, stdout=rev2) pd.create(("cat", PIn(fwd2), PIn(rev2)), stdout=outf) pd.wait() self.diffExpected(".out") self.commonChecks(nopen, pd, "^cat <\\(sort -r <.+/input/simple1\\.txt \\| sort\\) <\\(sort <.+/input/simple1.txt \\| sort -r\\) >.+/output/ProcDagTests\\.ProcDagTests\\.testJoinPipe2\\.out$", isRe=True)
def testSimplePipeFail(self): nopen = self.numOpenFiles() pd = ProcDag() p = Pipe() pd.create(("false",), stdout=p) pd.create(("true",), stdin=p) err = None try: pd.wait() except Exception,err: pass
def testSplitPipe2(self): "tee into two pipeline of two sorts each " nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outFwd = self.getOutputFile(".fwd.out") outRev = self.getOutputFile(".rev.out") fwd1 = Pipe() fwd2 = Pipe() rev1 = Pipe() rev2 = Pipe() # sort wrong direction, then sort again into final orders pd.create(("tee", POut(rev1)), stdin=inf, stdout=POut(fwd1)) pd.create(("sort","-r"), stdin=fwd1, stdout=fwd2) pd.create(("sort",), stdin=fwd2, stdout=outFwd) pd.create(("sort",), stdin=rev1, stdout=rev2) pd.create(("sort","-r"), stdin=rev2, stdout=outRev) pd.wait() self.diffExpected(".fwd.out") self.diffExpected(".rev.out") self.commonChecks(nopen, pd, "^tee >\\(sort \\| sort -r >.+/output/ProcDagTests\\.ProcDagTests\\.testSplitPipe2\\.rev\\.out\\) <.+/input/simple1\\.txt \\| sort -r \\| sort >.+/output/ProcDagTests\\.ProcDagTests\\.testSplitPipe2\\.fwd\\.out$", isRe=True)
def testArgToStdout(self): "pipe argument to stdout" nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outf = self.getOutputFile(".out") io = Pipe() pd.create(("tee", POut(io)), stdin=inf, stdout="/dev/null") pd.create(("sort","-r"), stdin=io, stdout=outf) pd.wait() self.diffExpected(".out") self.commonChecks(nopen, pd, "^tee >\\(sort -r >.+/output/ProcDagTests\\.ProcDagTests\\.testArgToStdout\\.out\\) <.+/input/simple1\\.txt >/dev/null$", isRe=True)
def testStdoutToArg(self): "stdout to a pipe argument" nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outf = self.getOutputFile(".out") io = Pipe() pd.create(("cat", inf), stdout=io) pd.create(("sort","-r", PIn(io)), stdin="/dev/null", stdout=outf) pd.wait() self.diffExpected(".out") self.commonChecks(nopen, pd, "^sort -r <\\(cat .+/input/simple1.txt\\) </dev/null >.+/output/ProcDagTests\\.ProcDagTests\\.testStdoutToArg\\.out$", isRe=True)
def testArgToArg(self): "pipe argument to argument of another process" nopen = self.numOpenFiles() pd = ProcDag() inf = self.getInputFile("simple1.txt") outf = self.getOutputFile(".out") io = Pipe() pd.create(("tee", POut(io)), stdin=inf, stdout="/dev/null") pd.create(("cat", PIn(io)), stdin="/dev/null", stdout=outf) pd.wait() self.diffExpected(".out") # formatting fails here: (FIXME: improve??), FIXME: doesn't always produce same result, # so we check multiple posibilities self.commonChecks(nopen, pd, "(^tee >\\(cat <\\(tee \\.\\.\\.\\) </dev/null >.+/output/ProcDagTests\\.ProcDagTests\\.testArgToArg\\.out\\) <.+/input/simple1\\.txt >/dev/null ; cat \\.\\.\\.$)" \ + "|(^tee >\\(cat <\\(tee \\.\\.\\.\\) </dev/null >.+/output/ProcDagTests\\.ProcDagTests\\.testArgToArg\\.out\\) <.+/input/simple1\\.txt >/dev/null ; cat \\.\\.\\.$)", isRe=True)