Merge pull request #5185
2191eac
add tests to travis (Cory Fields)7667850
tests: replace the old (unused since Travis) tests with new rpc test scripts (Cory Fields)fa7f8cd
tests: remove old pull-tester scripts (Cory Fields)5122ea7
tests: fix forknotify.py on windows (Cory Fields)7a41614
tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment (Cory Fields)f635269
tests: enable alertnotify test for Windows (Cory Fields)
This commit is contained in:
commit
2a6972133f
18 changed files with 89 additions and 344 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -99,7 +99,9 @@ linux-coverage-build
|
|||
linux-build
|
||||
win32-build
|
||||
qa/pull-tester/run-bitcoind-for-test.sh
|
||||
qa/pull-tester/build-tests.sh
|
||||
qa/pull-tester/tests-config.sh
|
||||
qa/pull-tester/cache/*
|
||||
qa/pull-tester/test.*/*
|
||||
|
||||
!src/leveldb*/Makefile
|
||||
|
||||
|
|
|
@ -27,17 +27,17 @@ matrix:
|
|||
- compiler: ": ARM"
|
||||
env: HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf" DEP_OPTS="NO_QT=1" GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat"
|
||||
- compiler: ": bitcoind"
|
||||
env: HOST=x86_64-unknown-linux-gnu DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat CPPFLAGS=-DDEBUG_LOCKORDER"
|
||||
env: HOST=x86_64-unknown-linux-gnu PACKAGES="bc" DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat CPPFLAGS=-DDEBUG_LOCKORDER"
|
||||
- compiler: ": No wallet"
|
||||
env: HOST=x86_64-unknown-linux-gnu DEP_OPTS="NO_WALLET=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat"
|
||||
- compiler: ": 32-bit + dash"
|
||||
env: HOST=i686-pc-linux-gnu PACKAGES="g++-multilib" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat" USE_SHELL="/bin/dash"
|
||||
env: HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat" USE_SHELL="/bin/dash"
|
||||
- compiler: ": Cross-Mac"
|
||||
env: HOST=x86_64-apple-darwin11 PACKAGES="gcc-multilib g++-multilib cmake libcap-dev libz-dev libbz2-dev" OSX_SDK=10.7 GOAL="deploy"
|
||||
- compiler: ": Win64"
|
||||
env: HOST=x86_64-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-dev wine" RUN_TESTS=true GOAL="deploy"
|
||||
env: HOST=x86_64-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 mingw-w64-dev wine bc" RUN_TESTS=true GOAL="deploy"
|
||||
- compiler: ": Win32"
|
||||
env: HOST=i686-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686 mingw-w64-dev wine" RUN_TESTS=true GOAL="deploy"
|
||||
env: HOST=i686-w64-mingw32 PACKAGES="nsis gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686 mingw-w64-dev wine bc" RUN_TESTS=true GOAL="deploy"
|
||||
install:
|
||||
- if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get update; fi
|
||||
- if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get install --no-upgrade -qq $PACKAGES; fi
|
||||
|
@ -60,5 +60,6 @@ script:
|
|||
- ./configure --cache-file=../config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG || ( cat config.log && false)
|
||||
- make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && make $GOAL V=1 ; false )
|
||||
- if [ "$RUN_TESTS" = "true" ]; then make check; fi
|
||||
- if [ "$RUN_TESTS" = "true" ]; then qa/pull-tester/rpc-tests.sh; fi
|
||||
after_script:
|
||||
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then (echo "Upload goes here. Something like: scp -r $BASE_OUTDIR server" || echo "upload failed"); fi
|
||||
|
|
|
@ -172,7 +172,7 @@ check-local:
|
|||
@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) 2>&1
|
||||
endif
|
||||
|
||||
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/pull-tester.sh qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING)
|
||||
EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING)
|
||||
|
||||
CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
|
||||
|
||||
|
|
|
@ -824,7 +824,7 @@ AC_SUBST(MINIUPNPC_CPPFLAGS)
|
|||
AC_SUBST(MINIUPNPC_LIBS)
|
||||
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/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh])
|
||||
AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
|
||||
AC_OUTPUT
|
||||
|
||||
dnl Taken from https://wiki.debian.org/RpathIssue
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# Param1: The prefix to mingw staging
|
||||
# Param2: Path to java comparison tool
|
||||
# Param3: Number of make jobs. Defaults to 1.
|
||||
|
||||
# Exit immediately if anything fails:
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
MINGWPREFIX=$1
|
||||
JAVA_COMPARISON_TOOL=$2
|
||||
RUN_EXPENSIVE_TESTS=$3
|
||||
JOBS=${4-1}
|
||||
OUT_DIR=${5-}
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "Usage: $0 [mingw-prefix] [java-comparison-tool] <make jobs> <save output dir>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DISTDIR=@PACKAGE@-@VERSION@
|
||||
|
||||
# Cross-compile for windows first (breaking the mingw/windows build is most common)
|
||||
cd @abs_top_srcdir@
|
||||
make distdir
|
||||
mkdir -p win32-build
|
||||
rsync -av $DISTDIR/ win32-build/
|
||||
rm -r $DISTDIR
|
||||
cd win32-build
|
||||
|
||||
if [ $RUN_EXPENSIVE_TESTS = 1 ]; then
|
||||
./configure --disable-silent-rules --disable-ccache --prefix=$MINGWPREFIX --host=i586-mingw32msvc --with-qt-bindir=$MINGWPREFIX/host/bin --with-qt-plugindir=$MINGWPREFIX/plugins --with-qt-incdir=$MINGWPREFIX/include --with-boost=$MINGWPREFIX --with-protoc-bindir=$MINGWPREFIX/host/bin CPPFLAGS=-I$MINGWPREFIX/include LDFLAGS=-L$MINGWPREFIX/lib --with-comparison-tool="$JAVA_COMPARISON_TOOL"
|
||||
else
|
||||
./configure --disable-silent-rules --disable-ccache --prefix=$MINGWPREFIX --host=i586-mingw32msvc --with-qt-bindir=$MINGWPREFIX/host/bin --with-qt-plugindir=$MINGWPREFIX/plugins --with-qt-incdir=$MINGWPREFIX/include --with-boost=$MINGWPREFIX --with-protoc-bindir=$MINGWPREFIX/host/bin CPPFLAGS=-I$MINGWPREFIX/include LDFLAGS=-L$MINGWPREFIX/lib
|
||||
fi
|
||||
make -j$JOBS
|
||||
|
||||
# And compile for Linux:
|
||||
cd @abs_top_srcdir@
|
||||
make distdir
|
||||
mkdir -p linux-build
|
||||
rsync -av $DISTDIR/ linux-build/
|
||||
rm -r $DISTDIR
|
||||
cd linux-build
|
||||
if [ $RUN_EXPENSIVE_TESTS = 1 ]; then
|
||||
./configure --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL" --enable-comparison-tool-reorg-tests
|
||||
else
|
||||
./configure --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL"
|
||||
fi
|
||||
make -j$JOBS
|
||||
|
||||
# link interesting binaries to parent out/ directory, if it exists. Do this before
|
||||
# running unit tests (we want bad binaries to be easy to find)
|
||||
if [ -d "$OUT_DIR" -a -w "$OUT_DIR" ]; then
|
||||
set +e
|
||||
# Windows:
|
||||
cp @abs_top_srcdir@/win32-build/src/bitcoind.exe $OUT_DIR/bitcoind.exe
|
||||
cp @abs_top_srcdir@/win32-build/src/test/test_bitcoin.exe $OUT_DIR/test_bitcoin.exe
|
||||
cp @abs_top_srcdir@/win32-build/src/qt/bitcoind-qt.exe $OUT_DIR/bitcoin-qt.exe
|
||||
# Linux:
|
||||
cp @abs_top_srcdir@/linux-build/src/bitcoind $OUT_DIR/bitcoind
|
||||
cp @abs_top_srcdir@/linux-build/src/test/test_bitcoin $OUT_DIR/test_bitcoin
|
||||
cp @abs_top_srcdir@/linux-build/src/qt/bitcoind-qt $OUT_DIR/bitcoin-qt
|
||||
set -e
|
||||
fi
|
||||
|
||||
# Run unit tests and blockchain-tester on Linux:
|
||||
cd @abs_top_srcdir@/linux-build
|
||||
make check
|
||||
|
||||
# Run RPC integration test on Linux:
|
||||
@abs_top_srcdir@/qa/rpc-tests/wallet.sh @abs_top_srcdir@/linux-build/src
|
||||
@abs_top_srcdir@/qa/rpc-tests/listtransactions.py --srcdir @abs_top_srcdir@/linux-build/src
|
||||
@abs_top_srcdir@/qa/rpc-tests/forknotify.py --srcdir @abs_top_srcdir@/linux-build/src
|
||||
# Clean up cache/ directory that the python regression tests create
|
||||
rm -rf cache
|
||||
|
||||
if [ $RUN_EXPENSIVE_TESTS = 1 ]; then
|
||||
# Run unit tests and blockchain-tester on Windows:
|
||||
cd @abs_top_srcdir@/win32-build
|
||||
make check
|
||||
fi
|
||||
|
||||
# Clean up builds (pull-tester machine doesn't have infinite disk space)
|
||||
cd @abs_top_srcdir@/linux-build
|
||||
make clean
|
||||
cd @abs_top_srcdir@/win32-build
|
||||
make clean
|
||||
|
||||
# TODO: Fix code coverage builds on pull-tester machine
|
||||
# # Test code coverage
|
||||
# cd @abs_top_srcdir@
|
||||
# make distdir
|
||||
# mv $DISTDIR linux-coverage-build
|
||||
# cd linux-coverage-build
|
||||
# ./configure --enable-lcov --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL"
|
||||
# make -j$JOBS
|
||||
# make cov
|
|
@ -1,193 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
import json
|
||||
from urllib import urlopen
|
||||
import requests
|
||||
import getpass
|
||||
from string import Template
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
class RunError(Exception):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
def __str__(self):
|
||||
return repr(self.value)
|
||||
|
||||
def run(command, **kwargs):
|
||||
fail_hard = kwargs.pop("fail_hard", True)
|
||||
# output to /dev/null by default:
|
||||
kwargs.setdefault("stdout", open('/dev/null', 'w'))
|
||||
kwargs.setdefault("stderr", open('/dev/null', 'w'))
|
||||
command = Template(command).substitute(os.environ)
|
||||
if "TRACE" in os.environ:
|
||||
if 'cwd' in kwargs:
|
||||
print("[cwd=%s] %s"%(kwargs['cwd'], command))
|
||||
else: print(command)
|
||||
try:
|
||||
process = subprocess.Popen(command.split(' '), **kwargs)
|
||||
process.wait()
|
||||
except KeyboardInterrupt:
|
||||
process.terminate()
|
||||
raise
|
||||
if process.returncode != 0 and fail_hard:
|
||||
raise RunError("Failed: "+command)
|
||||
return process.returncode
|
||||
|
||||
def checkout_pull(clone_url, commit, out):
|
||||
# Init
|
||||
build_dir=os.environ["BUILD_DIR"]
|
||||
run("umount ${CHROOT_COPY}/proc", fail_hard=False)
|
||||
run("rsync --delete -apv ${CHROOT_MASTER}/ ${CHROOT_COPY}")
|
||||
run("rm -rf ${CHROOT_COPY}${SCRIPTS_DIR}")
|
||||
run("cp -a ${SCRIPTS_DIR} ${CHROOT_COPY}${SCRIPTS_DIR}")
|
||||
# Merge onto upstream/master
|
||||
run("rm -rf ${BUILD_DIR}")
|
||||
run("mkdir -p ${BUILD_DIR}")
|
||||
run("git clone ${CLONE_URL} ${BUILD_DIR}")
|
||||
run("git remote add pull "+clone_url, cwd=build_dir, stdout=out, stderr=out)
|
||||
run("git fetch pull", cwd=build_dir, stdout=out, stderr=out)
|
||||
if run("git merge "+ commit, fail_hard=False, cwd=build_dir, stdout=out, stderr=out) != 0:
|
||||
return False
|
||||
run("chown -R ${BUILD_USER}:${BUILD_GROUP} ${BUILD_DIR}", stdout=out, stderr=out)
|
||||
run("mount --bind /proc ${CHROOT_COPY}/proc")
|
||||
return True
|
||||
|
||||
def commentOn(commentUrl, success, inMerge, needTests, linkUrl):
|
||||
common_message = """
|
||||
This test script verifies pulls every time they are updated. It, however, dies sometimes and fails to test properly. If you are waiting on a test, please check timestamps to verify that the test.log is moving at http://jenkins.bluematt.me/pull-tester/current/
|
||||
Contact BlueMatt on freenode if something looks broken."""
|
||||
|
||||
# Remove old BitcoinPullTester comments (I'm being lazy and not paginating here)
|
||||
recentcomments = requests.get(commentUrl+"?sort=created&direction=desc",
|
||||
auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json
|
||||
for comment in recentcomments:
|
||||
if comment["user"]["login"] == os.environ["GITHUB_USER"] and common_message in comment["body"]:
|
||||
requests.delete(comment["url"],
|
||||
auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"]))
|
||||
|
||||
if success == True:
|
||||
if needTests:
|
||||
message = "Automatic sanity-testing: PLEASE ADD TEST-CASES, though technically passed. See " + linkUrl + " for binaries and test log."
|
||||
else:
|
||||
message = "Automatic sanity-testing: PASSED, see " + linkUrl + " for binaries and test log."
|
||||
|
||||
post_data = { "body" : message + common_message}
|
||||
elif inMerge:
|
||||
post_data = { "body" : "Automatic sanity-testing: FAILED MERGE, see " + linkUrl + " for test log." + """
|
||||
|
||||
This pull does not merge cleanly onto current master""" + common_message}
|
||||
else:
|
||||
post_data = { "body" : "Automatic sanity-testing: FAILED BUILD/TEST, see " + linkUrl + " for binaries and test log." + """
|
||||
|
||||
This could happen for one of several reasons:
|
||||
1. It chanages changes build scripts in a way that made them incompatible with the automated testing scripts (please tweak those patches in qa/pull-tester)
|
||||
2. It adds/modifies tests which test network rules (thanks for doing that), which conflicts with a patch applied at test time
|
||||
3. It does not build on either Linux i386 or Win32 (via MinGW cross compile)
|
||||
4. The test suite fails on either Linux i386 or Win32
|
||||
5. The block test-cases failed (lookup the first bNN identifier which failed in https://github.com/TheBlueMatt/test-scripts/blob/master/FullBlockTestGenerator.java)
|
||||
|
||||
If you believe this to be in error, please ping BlueMatt on freenode or TheBlueMatt here.
|
||||
""" + common_message}
|
||||
|
||||
resp = requests.post(commentUrl, json.dumps(post_data), auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"]))
|
||||
|
||||
def testpull(number, comment_url, clone_url, commit):
|
||||
print("Testing pull %d: %s : %s"%(number, clone_url,commit))
|
||||
|
||||
dir = os.environ["RESULTS_DIR"] + "/" + commit + "/"
|
||||
print(" ouput to %s"%dir)
|
||||
if os.path.exists(dir):
|
||||
os.system("rm -r " + dir)
|
||||
os.makedirs(dir)
|
||||
currentdir = os.environ["RESULTS_DIR"] + "/current"
|
||||
os.system("rm -r "+currentdir)
|
||||
os.system("ln -s " + dir + " " + currentdir)
|
||||
out = open(dir + "test.log", 'w+')
|
||||
|
||||
resultsurl = os.environ["RESULTS_URL"] + commit
|
||||
checkedout = checkout_pull(clone_url, commit, out)
|
||||
if checkedout != True:
|
||||
print("Failed to test pull - sending comment to: " + comment_url)
|
||||
commentOn(comment_url, False, True, False, resultsurl)
|
||||
open(os.environ["TESTED_DB"], "a").write(commit + "\n")
|
||||
return
|
||||
|
||||
run("rm -rf ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False);
|
||||
run("mkdir -p ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False);
|
||||
run("chown -R ${BUILD_USER}:${BUILD_GROUP} ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False)
|
||||
|
||||
script = os.environ["BUILD_PATH"]+"/qa/pull-tester/pull-tester.sh"
|
||||
script += " ${BUILD_PATH} ${MINGW_DEPS_DIR} ${SCRIPTS_DIR}/BitcoindComparisonTool_jar/BitcoindComparisonTool.jar 0 6 ${OUT_DIR}"
|
||||
returncode = run("chroot ${CHROOT_COPY} sudo -u ${BUILD_USER} -H timeout ${TEST_TIMEOUT} "+script,
|
||||
fail_hard=False, stdout=out, stderr=out)
|
||||
|
||||
run("mv ${CHROOT_COPY}/${OUT_DIR} " + dir)
|
||||
run("mv ${BUILD_DIR} " + dir)
|
||||
|
||||
if returncode == 42:
|
||||
print("Successfully tested pull (needs tests) - sending comment to: " + comment_url)
|
||||
commentOn(comment_url, True, False, True, resultsurl)
|
||||
elif returncode != 0:
|
||||
print("Failed to test pull - sending comment to: " + comment_url)
|
||||
commentOn(comment_url, False, False, False, resultsurl)
|
||||
else:
|
||||
print("Successfully tested pull - sending comment to: " + comment_url)
|
||||
commentOn(comment_url, True, False, False, resultsurl)
|
||||
open(os.environ["TESTED_DB"], "a").write(commit + "\n")
|
||||
|
||||
def environ_default(setting, value):
|
||||
if not setting in os.environ:
|
||||
os.environ[setting] = value
|
||||
|
||||
if getpass.getuser() != "root":
|
||||
print("Run me as root!")
|
||||
sys.exit(1)
|
||||
|
||||
if "GITHUB_USER" not in os.environ or "GITHUB_AUTH_TOKEN" not in os.environ:
|
||||
print("GITHUB_USER and/or GITHUB_AUTH_TOKEN environment variables not set")
|
||||
sys.exit(1)
|
||||
|
||||
environ_default("CLONE_URL", "https://github.com/bitcoin/bitcoin.git")
|
||||
environ_default("MINGW_DEPS_DIR", "/mnt/w32deps")
|
||||
environ_default("SCRIPTS_DIR", "/mnt/test-scripts")
|
||||
environ_default("CHROOT_COPY", "/mnt/chroot-tmp")
|
||||
environ_default("CHROOT_MASTER", "/mnt/chroot")
|
||||
environ_default("OUT_DIR", "/mnt/out")
|
||||
environ_default("BUILD_PATH", "/mnt/bitcoin")
|
||||
os.environ["BUILD_DIR"] = os.environ["CHROOT_COPY"] + os.environ["BUILD_PATH"]
|
||||
environ_default("RESULTS_DIR", "/mnt/www/pull-tester")
|
||||
environ_default("RESULTS_URL", "http://jenkins.bluematt.me/pull-tester/")
|
||||
environ_default("GITHUB_REPO", "bitcoin/bitcoin")
|
||||
environ_default("TESTED_DB", "/mnt/commits-tested.txt")
|
||||
environ_default("BUILD_USER", "matt")
|
||||
environ_default("BUILD_GROUP", "matt")
|
||||
environ_default("TEST_TIMEOUT", str(60*60*2))
|
||||
|
||||
print("Optional usage: pull-tester.py 2112")
|
||||
|
||||
f = open(os.environ["TESTED_DB"])
|
||||
tested = set( line.rstrip() for line in f.readlines() )
|
||||
f.close()
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
pull = requests.get("https://api.github.com/repos/"+os.environ["GITHUB_REPO"]+"/pulls/"+sys.argv[1],
|
||||
auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json
|
||||
testpull(pull["number"], pull["_links"]["comments"]["href"],
|
||||
pull["head"]["repo"]["clone_url"], pull["head"]["sha"])
|
||||
|
||||
else:
|
||||
for page in range(1,100):
|
||||
result = requests.get("https://api.github.com/repos/"+os.environ["GITHUB_REPO"]+"/pulls?state=open&page=%d"%(page,),
|
||||
auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json
|
||||
if len(result) == 0: break;
|
||||
for pull in result:
|
||||
if pull["head"]["sha"] in tested:
|
||||
print("Pull %d already tested"%(pull["number"],))
|
||||
continue
|
||||
testpull(pull["number"], pull["_links"]["comments"]["href"],
|
||||
pull["head"]["repo"]["clone_url"], pull["head"]["sha"])
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# Helper script for pull-tester.
|
||||
#Param 1: path to bitcoin srcroot
|
||||
#Param ...: arguments for build-test.sh
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "usage: $0 [bitcoin srcroot] build-test arguments..."
|
||||
fi
|
||||
|
||||
killall -q bitcoin-cli
|
||||
killall -q bitcoind
|
||||
|
||||
cd $1
|
||||
shift
|
||||
|
||||
./autogen.sh
|
||||
./configure
|
||||
./qa/pull-tester/build-tests.sh "$@"
|
19
qa/pull-tester/rpc-tests.sh
Executable file
19
qa/pull-tester/rpc-tests.sh
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
CURDIR=$(cd $(dirname "$0"); pwd)
|
||||
# Get BUILDDIR and REAL_BITCOIND
|
||||
. "${CURDIR}/tests-config.sh"
|
||||
|
||||
export BITCOINCLI=${BUILDDIR}/qa/pull-tester/run-bitcoin-cli
|
||||
export BITCOIND=${REAL_BITCOIND}
|
||||
|
||||
#Run the tests
|
||||
|
||||
if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then
|
||||
${BUILDDIR}/qa/rpc-tests/wallet.sh "${BUILDDIR}/src"
|
||||
${BUILDDIR}/qa/rpc-tests/listtransactions.py --srcdir "${BUILDDIR}/src"
|
||||
${BUILDDIR}/qa/rpc-tests/forknotify.py --srcdir "${BUILDDIR}/src"
|
||||
else
|
||||
echo "No rpc tests to run. Wallet, utils, and bitcoind must all be enabled"
|
||||
fi
|
13
qa/pull-tester/run-bitcoin-cli
Executable file
13
qa/pull-tester/run-bitcoin-cli
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This is a thin wrapper around bitcoin-cli that strips the Windows-style EOLs
|
||||
# from the output if present. It is necessary when using bitcoin-cli.exe on
|
||||
# Linux since shells will interpret the line-endings as part of the result.
|
||||
|
||||
CURDIR=$(cd $(dirname "$0"); pwd)
|
||||
# Get BUILDDIR and REAL_BITCOIND
|
||||
|
||||
# Grab the value of $REAL_BITCOINCLI which may be bitcoin-cli.exe.
|
||||
. "${CURDIR}/tests-config.sh"
|
||||
|
||||
"${REAL_BITCOINCLI}" "$@" | sed 's/\r//'
|
16
qa/pull-tester/tests-config.sh.in
Executable file
16
qa/pull-tester/tests-config.sh.in
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
# Copyright (c) 2013-2014 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
BUILDDIR="@abs_top_builddir@"
|
||||
EXEEXT="@EXEEXT@"
|
||||
|
||||
# These will turn into comments if they were disabled when configuring.
|
||||
@ENABLE_WALLET_TRUE@ENABLE_WALLET=1
|
||||
@BUILD_BITCOIN_UTILS_TRUE@ENABLE_UTILS=1
|
||||
@BUILD_BITCOIND_TRUE@ENABLE_BITCOIND=1
|
||||
|
||||
REAL_BITCOIND="$BUILDDIR/src/bitcoind${EXEEXT}"
|
||||
REAL_BITCOINCLI="$BUILDDIR/src/bitcoin-cli${EXEEXT}"
|
||||
|
|
@ -18,13 +18,14 @@
|
|||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 path_to_binaries"
|
||||
echo "e.g. $0 ../../src"
|
||||
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -f
|
||||
|
||||
BITCOIND=${1}/bitcoind
|
||||
CLI=${1}/bitcoin-cli
|
||||
BITCOIND=${BITCOIND:-${1}/bitcoind}
|
||||
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
|
||||
|
||||
DIR="${BASH_SOURCE%/*}"
|
||||
SENDANDWAIT="${DIR}/send.sh"
|
||||
|
|
|
@ -23,7 +23,7 @@ class ForkNotifyTest(BitcoinTestFramework):
|
|||
with open(self.alert_filename, 'w') as f:
|
||||
pass # Just open then close to create zero-length file
|
||||
self.nodes.append(start_node(0, self.options.tmpdir,
|
||||
["-blockversion=2", "-alertnotify=echo %s >> '" + self.alert_filename + "'"]))
|
||||
["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""]))
|
||||
# Node1 mines block.version=211 blocks
|
||||
self.nodes.append(start_node(1, self.options.tmpdir,
|
||||
["-blockversion=211"]))
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 path_to_binaries"
|
||||
echo "e.g. $0 ../../src"
|
||||
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -f
|
||||
|
||||
BITCOIND=${1}/bitcoind
|
||||
CLI=${1}/bitcoin-cli
|
||||
BITCOIND=${BITCOIND:-${1}/bitcoind}
|
||||
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
|
||||
|
||||
DIR="${BASH_SOURCE%/*}"
|
||||
SENDANDWAIT="${DIR}/send.sh"
|
||||
|
|
|
@ -85,11 +85,11 @@ def initialize_chain(test_dir):
|
|||
# Create cache directories, run bitcoinds:
|
||||
for i in range(4):
|
||||
datadir=initialize_datadir("cache", i)
|
||||
args = [ "bitcoind", "-keypool=1", "-datadir="+datadir, "-discover=0" ]
|
||||
args = [ os.getenv("BITCOIND", "bitcoind"), "-keypool=1", "-datadir="+datadir, "-discover=0" ]
|
||||
if i > 0:
|
||||
args.append("-connect=127.0.0.1:"+str(p2p_port(0)))
|
||||
bitcoind_processes[i] = subprocess.Popen(args)
|
||||
subprocess.check_call([ "bitcoin-cli", "-datadir="+datadir,
|
||||
subprocess.check_call([ os.getenv("BITCOINCLI", "bitcoin-cli"), "-datadir="+datadir,
|
||||
"-rpcwait", "getblockcount"], stdout=devnull)
|
||||
devnull.close()
|
||||
rpcs = []
|
||||
|
@ -150,11 +150,11 @@ def start_node(i, dir, extra_args=None, rpchost=None):
|
|||
Start a bitcoind and return RPC connection to it
|
||||
"""
|
||||
datadir = os.path.join(dir, "node"+str(i))
|
||||
args = [ "bitcoind", "-datadir="+datadir, "-keypool=1", "-discover=0" ]
|
||||
args = [ os.getenv("BITCOIND", "bitcoind"), "-datadir="+datadir, "-keypool=1", "-discover=0" ]
|
||||
if extra_args is not None: args.extend(extra_args)
|
||||
bitcoind_processes[i] = subprocess.Popen(args)
|
||||
devnull = open("/dev/null", "w+")
|
||||
subprocess.check_call([ "bitcoin-cli", "-datadir="+datadir] +
|
||||
subprocess.check_call([ os.getenv("BITCOINCLI", "bitcoin-cli"), "-datadir="+datadir] +
|
||||
_rpchost_to_args(rpchost) +
|
||||
["-rpcwait", "getblockcount"], stdout=devnull)
|
||||
devnull.close()
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 path_to_binaries"
|
||||
echo "e.g. $0 ../../src"
|
||||
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -f
|
||||
|
||||
BITCOIND=${1}/bitcoind
|
||||
CLI=${1}/bitcoin-cli
|
||||
BITCOIND=${BITCOIND:-${1}/bitcoind}
|
||||
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
|
||||
|
||||
DIR="${BASH_SOURCE%/*}"
|
||||
SENDANDWAIT="${DIR}/send.sh"
|
||||
|
|
|
@ -36,11 +36,12 @@
|
|||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 path_to_binaries"
|
||||
echo "e.g. $0 ../../src"
|
||||
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BITCOIND=${1}/bitcoind
|
||||
CLI=${1}/bitcoin-cli
|
||||
BITCOIND=${BITCOIND:-${1}/bitcoind}
|
||||
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
|
||||
|
||||
DIR="${BASH_SOURCE%/*}"
|
||||
SENDANDWAIT="${DIR}/send.sh"
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 path_to_binaries"
|
||||
echo "e.g. $0 ../../src"
|
||||
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -f
|
||||
|
||||
BITCOIND=${1}/bitcoind
|
||||
CLI=${1}/bitcoin-cli
|
||||
BITCOIND=${BITCOIND:-${1}/bitcoind}
|
||||
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
|
||||
|
||||
DIR="${BASH_SOURCE%/*}"
|
||||
SENDANDWAIT="${DIR}/send.sh"
|
||||
|
|
|
@ -154,9 +154,6 @@ BOOST_AUTO_TEST_CASE(AlertApplies)
|
|||
}
|
||||
|
||||
|
||||
// This uses sh 'echo' to test the -alertnotify function, writing to a
|
||||
// /tmp file. So skip it on Windows:
|
||||
#ifndef WIN32
|
||||
BOOST_AUTO_TEST_CASE(AlertNotify)
|
||||
{
|
||||
SetMockTime(11);
|
||||
|
@ -171,15 +168,24 @@ BOOST_AUTO_TEST_CASE(AlertNotify)
|
|||
|
||||
std::vector<std::string> r = read_lines(temp);
|
||||
BOOST_CHECK_EQUAL(r.size(), 4u);
|
||||
|
||||
// Windows built-in echo semantics are different than posixy shells. Quotes and
|
||||
// whitespace are printed literally.
|
||||
|
||||
#ifndef WIN32
|
||||
BOOST_CHECK_EQUAL(r[0], "Alert 1");
|
||||
BOOST_CHECK_EQUAL(r[1], "Alert 2, cancels 1");
|
||||
BOOST_CHECK_EQUAL(r[2], "Alert 2, cancels 1");
|
||||
BOOST_CHECK_EQUAL(r[3], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed
|
||||
|
||||
#else
|
||||
BOOST_CHECK_EQUAL(r[0], "'Alert 1' ");
|
||||
BOOST_CHECK_EQUAL(r[1], "'Alert 2, cancels 1' ");
|
||||
BOOST_CHECK_EQUAL(r[2], "'Alert 2, cancels 1' ");
|
||||
BOOST_CHECK_EQUAL(r[3], "'Evil Alert; /bin/ls; echo ' ");
|
||||
#endif
|
||||
boost::filesystem::remove(temp);
|
||||
|
||||
SetMockTime(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
|
Loading…
Reference in a new issue