b31907d700c1fe956e4e4c20e64d91de027d7c84 markd Tue May 14 02:03:33 2024 -0700 merge blatHuge implementation diff --git src/gfServer/tests/dynTester src/gfServer/tests/dynTester index 8f507bc..2a7b523 100755 --- src/gfServer/tests/dynTester +++ src/gfServer/tests/dynTester @@ -7,30 +7,32 @@ import argparse import subprocess import re from collections import namedtuple debug = False valGrind = False def parseArgs(): usage = """Run a test of qfServer dynserver""" parser = argparse.ArgumentParser(description=usage) parser.add_argument('--debug', action="store_true", default=False, help="enable debug tracing") parser.add_argument('--valgrind', action="store_true", default=False, help="run valgrind on gfServer without to valgrind.out") + parser.add_argument('--gfServer', default="gfServer", + help="gfServer command to use") parser.add_argument('rootDir', help="data root directory") parser.add_argument('queryType', choices=("query", "protQuery", "transQuery", "pcr"), help="query type to run") parser.add_argument('genome', help="genome name") parser.add_argument('genomeDataDir', help="directory for genome files") parser.add_argument('queryFa', help="query fasta, for PCR, each data line should contain the two primers, separated by a '/'") parser.add_argument('resultsOut', help="out is saved here for checking ") args = parser.parse_args() global debug, valgrind debug = args.debug @@ -92,37 +94,37 @@ buf = bytes(buf, encoding="utf8") if debug: print("debug: write:", str(buf, encoding="latin-1"), file=sys.stderr) fh.write(buf) def netSendString(fh, data): "Send a string down a socket - length byte first. (matches net.c)" fh.write(fh, bytes(len(data))) fh.write(data) def netRecieveString(fd): "Read string return it (matches net.c)" buf = readBytes(fd, 1) return readBytes(fd, buf[0]) -def serverStart(rootDir): +def serverStart(gfServerCmd, rootDir): "start server process" # unbuffered is required, as protocol is not line-terminate cmd = [] if valgrind: cmd += ["valgrind", "--log-file=valgrind.out"] - cmd += ["gfServer"] + cmd += [gfServerCmd] if debug: cmd += ["-log=/dev/stderr", "-debugLog"] cmd += ["dynserver", rootDir] if debug: print("debug: start:", " ".join(cmd), file=sys.stderr) return subprocess.Popen(cmd, bufsize=0, stdin=subprocess.PIPE, stdout=subprocess.PIPE) def serverWait(gfServer): "wait for server process to exit" gfServer.stdin.close() gfServer.stdout.close() gfServer.wait() if gfServer.returncode != 0: raise Exception("gfServer process exited with {}".format(gfServer.returncode)) @@ -154,35 +156,35 @@ maxDistance = 4 * 1024 query = "{}{} {} {} {} {} {}\n".format(gfSignature, "pcr", genome, genomeDataDir, seq.data, seq.revPrimer, maxDistance) print(query, file=resultsFh) writeBytes(gfServer.stdin, query) readResults(gfServer, resultsFh) def infoRequest(gfServer, queryType, genome, genomeDataDir, resultsFh): "info request to the server" infoType = "untransInfo" if queryType in ("query", "pcr") else "transInfo" query = "{}{} {} {}\n".format(gfSignature, infoType, genome, genomeDataDir) print(query, file=resultsFh) writeBytes(gfServer.stdin, query) readResults(gfServer, resultsFh) -def dynTester(rootDir, queryType, genome, genomeDataDir, queryFa, resultsFh): +def dynTester(gfServerCmd, rootDir, queryType, genome, genomeDataDir, queryFa, resultsFh): "run tests" seqs = readFastaSeqs(queryFa) if len(seqs) == 0: raise Exception("no sequences found in {}".format(queryFa)) - gfServer = serverStart(rootDir) + gfServer = serverStart(gfServerCmd, rootDir) for seq in seqs: if queryType == "pcr": pcrRequest(gfServer, genome, genomeDataDir, seq, resultsFh) else: queryRequest(gfServer, queryType, genome, genomeDataDir, seq, resultsFh) infoRequest(gfServer, queryType, genome, genomeDataDir, resultsFh) serverWait(gfServer) def main(): args = parseArgs() with open(args.resultsOut, "w") as resultsFh: - dynTester(args.rootDir, args.queryType, args.genome, args.genomeDataDir, args.queryFa, resultsFh) + dynTester(args.gfServer, args.rootDir, args.queryType, args.genome, args.genomeDataDir, args.queryFa, resultsFh) main()