tests: fix python test-runner for windows

Windows needed a few fixups to get the tests running:
1. bitcoin-tx needs a file extension in Windows. Take this opportunity to
   add an env file, which pulls variables out of our build config. This can
   be extended as needed, for now it's very simple.
2. After #1, split the args out of the exec key in the test data.
3. Correct the line-endings from windows stdout
This commit is contained in:
Cory Fields 2014-09-30 16:05:27 -04:00
parent 4b2b78b9f2
commit 41d67c78bf
5 changed files with 32 additions and 19 deletions

View File

@ -793,7 +793,7 @@ AC_SUBST(BUILD_TEST)
AC_SUBST(BUILD_QT) AC_SUBST(BUILD_QT)
AC_SUBST(BUILD_TEST_QT) AC_SUBST(BUILD_TEST_QT)
AC_SUBST(MINIUPNPC_CPPFLAGS) AC_SUBST(MINIUPNPC_CPPFLAGS)
AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist]) AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh]) AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh]) AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh])
AC_OUTPUT AC_OUTPUT

View File

@ -7,9 +7,11 @@ import os
import json import json
import sys import sys
def bctest(testDir, testObj): def bctest(testDir, testObj, exeext):
execargs = testObj['exec']
execprog = testObj['exec'] + exeext
execargs = testObj['args']
execrun = [execprog] + execargs
stdinCfg = None stdinCfg = None
inputData = None inputData = None
if "input" in testObj: if "input" in testObj:
@ -22,12 +24,11 @@ def bctest(testDir, testObj):
if "output_cmp" in testObj: if "output_cmp" in testObj:
outputFn = testObj['output_cmp'] outputFn = testObj['output_cmp']
outputData = open(testDir + "/" + outputFn).read() outputData = open(testDir + "/" + outputFn).read()
proc = subprocess.Popen(execrun, stdin=stdinCfg, stdout=subprocess.PIPE, stderr=subprocess.PIPE,universal_newlines=True)
proc = subprocess.Popen(execargs, stdin=stdinCfg, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try: try:
outs = proc.communicate(input=inputData) outs = proc.communicate(input=inputData)
except OSError: except OSError:
print("OSError, Failed to execute " + execargs[0]) print("OSError, Failed to execute " + execprog)
sys.exit(1) sys.exit(1)
if outputData and (outs[0] != outputData): if outputData and (outs[0] != outputData):
@ -41,13 +42,13 @@ def bctest(testDir, testObj):
print("Return code mismatch for " + outputFn) print("Return code mismatch for " + outputFn)
sys.exit(1) sys.exit(1)
def bctester(testDir, input_basename): def bctester(testDir, input_basename, buildenv):
input_filename = testDir + "/" + input_basename input_filename = testDir + "/" + input_basename
raw_data = open(input_filename).read() raw_data = open(input_filename).read()
input_data = json.loads(raw_data) input_data = json.loads(raw_data)
for testObj in input_data: for testObj in input_data:
bctest(testDir, testObj) bctest(testDir, testObj, buildenv.exeext)
sys.exit(0) sys.exit(0)

View File

@ -5,8 +5,9 @@
import os import os
import bctest import bctest
import buildenv
if __name__ == '__main__': if __name__ == '__main__':
bctest.bctester(os.environ["srcdir"] + "/test/data", bctest.bctester(os.environ["srcdir"] + "/test/data",
"bitcoin-util-test.json") "bitcoin-util-test.json",buildenv)

2
src/test/buildenv.py.in Normal file
View File

@ -0,0 +1,2 @@
#!/usr/bin/python
exeext="@EXEEXT@"

View File

@ -1,33 +1,41 @@
[ [
{ "exec": ["./bitcoin-tx", "-create"], { "exec": "././bitcoin-tx",
"args": ["-create"],
"output_cmp": "blanktx.hex" "output_cmp": "blanktx.hex"
}, },
{ "exec": ["./bitcoin-tx", "-"], { "exec": "./bitcoin-tx",
"args": ["-"],
"input": "blanktx.hex", "input": "blanktx.hex",
"output_cmp": "blanktx.hex" "output_cmp": "blanktx.hex"
}, },
{ "exec": ["./bitcoin-tx", "-", "delin=1"], { "exec": "./bitcoin-tx",
"args": ["-", "delin=1"],
"input": "tx394b54bb.hex", "input": "tx394b54bb.hex",
"output_cmp": "tt-delin1-out.hex" "output_cmp": "tt-delin1-out.hex"
}, },
{ "exec": ["./bitcoin-tx", "-", "delin=31"], { "exec": "./bitcoin-tx",
"args": ["-", "delin=31"],
"input": "tx394b54bb.hex", "input": "tx394b54bb.hex",
"return_code": 1 "return_code": 1
}, },
{ "exec": ["./bitcoin-tx", "-", "delout=1"], { "exec": "./bitcoin-tx",
"args": ["-", "delout=1"],
"input": "tx394b54bb.hex", "input": "tx394b54bb.hex",
"output_cmp": "tt-delout1-out.hex" "output_cmp": "tt-delout1-out.hex"
}, },
{ "exec": ["./bitcoin-tx", "-", "delout=2"], { "exec": "./bitcoin-tx",
"args": ["-", "delout=2"],
"input": "tx394b54bb.hex", "input": "tx394b54bb.hex",
"return_code": 1 "return_code": 1
}, },
{ "exec": ["./bitcoin-tx", "-", "locktime=317000"], { "exec": "./bitcoin-tx",
"args": ["-", "locktime=317000"],
"input": "tx394b54bb.hex", "input": "tx394b54bb.hex",
"output_cmp": "tt-locktime317000-out.hex" "output_cmp": "tt-locktime317000-out.hex"
}, },
{ "exec": { "exec": "./bitcoin-tx",
["./bitcoin-tx", "-create", "args":
["-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18", "in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18",
"in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1", "in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1",
@ -35,7 +43,8 @@
"outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"], "outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"],
"output_cmp": "txcreate1.hex" "output_cmp": "txcreate1.hex"
}, },
{ "exec": ["./bitcoin-tx", "-create", "outscript=0:"], { "exec": "./bitcoin-tx",
"args": ["-create", "outscript=0:"],
"output_cmp": "txcreate2.hex" "output_cmp": "txcreate2.hex"
} }
] ]