From d72ea6a269c634d0ffc165cb9ba5addb6e418ea2 Mon Sep 17 00:00:00 2001 From: klzgrad Date: Fri, 26 Apr 2019 01:40:46 +0800 Subject: [PATCH] Add continuous integration and tests --- .appveyor.yml | 35 ++++++++++++++++++ .travis.yml | 45 +++++++++++++++++++++++ src/build.sh | 9 ++--- src/get-clang.sh | 2 +- tests/basic.sh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+), 5 deletions(-) create mode 100644 .appveyor.yml create mode 100644 .travis.yml create mode 100755 tests/basic.sh diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000000..015f4dd200 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,35 @@ +branches: + except: + - dev +version: '{build}' +platform: + - x64 + - x86 +image: Visual Studio 2017 +install: + - cinst ninja +cache: + - '%LOCALAPPDATA%\Mozilla\sccache' +build_script: + - bash ./tools/import-upstream.sh + - bash -c 'cd src; ./get-clang.sh' + - bash -c '~/.cargo/bin/sccache -s' + - bash -c 'cd src; EXTRA_FLAGS=target_cpu=\"$Platform\" ./build.sh' + - bash -c '~/.cargo/bin/sccache -s' + - ps: $env:BUILD_NAME="naiveproxy-$env:APPVEYOR_REPO_TAG_NAME-win-$env:PLATFORM" + - bash -c 'mkdir $BUILD_NAME' + - bash -c 'cp src/out/Release/naive.exe src/config.json LICENSE USAGE.txt $BUILD_NAME' + - bash -c '7z a $BUILD_NAME.zip $BUILD_NAME' +test_script: + - bash -c './tests/basic.sh src/out/Release/naive' +artifacts: + - path: $(BUILD_NAME).zip +deploy: + - provider: GitHub + auth_token: + secure: h+qwIoof/3ET7LOldWwlb6XQLmpxYPuaZL4YcFQ8QyclfBrnywzwzDaSqdE2unPg + artifact: $(BUILD_NAME).zip + prerelease: true + force_update: true + on: + APPVEYOR_REPO_TAG: true diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..1a3c1d602f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,45 @@ +branches: + except: + - dev +language: cpp +matrix: + include: + - os: linux + dist: xenial + - os: osx + osx_image: xcode10.2 +addons: + apt: + sources: + - sourceline: 'deb http://archive.ubuntu.com/ubuntu/ xenial-backports universe' + packages: + - ninja-build=1.7.1-1~ubuntu16.04.1 + - pkg-config + - libnss3-dev + homebrew: + packages: + - ninja + - ccache +cache: ccache +script: + - ./tools/import-upstream.sh + - ( cd src; ./get-clang.sh ) + - ccache -s + - ( cd src; ./build.sh ) + - ccache -s + - ./tests/basic.sh src/out/Release/naive + - export BUILD_NAME="naiveproxy-$TRAVIS_BRANCH-$TRAVIS_OS_NAME" + - mkdir $BUILD_NAME + - cp src/out/Release/naive src/config.json LICENSE USAGE.txt $BUILD_NAME + - tar cJf $BUILD_NAME.tar.xz $BUILD_NAME +deploy: + provider: releases + api_key: + secure: hZ+M3GvNpPPMri0u7HkeDM8qCNSzCP2kBxL/68XgF3uvMDkJRX5/gyq27EoQMHyRxni759LlwHttRn6nHSg/CwNgK4fD4WPZWU99XIWKdlI+P1AQkHThjNtABv3P7JOq1HxyuwrcaBPybnDjsQTFE6HG5zsIhXZlUTCHbndCBpYPuDnaqKJJUv4/WzoEjXAlBSkAsBGhEQv+HZhaupw5vSkDkulNgXZrXOoO6uzAtAiR5St38dV7cWXgk6UwoyrVaV8cO0cltveyEPkGYMXJh6YkopJjSVrkYlI8vWsA8CgwdhXwAkYoG1uaIDUdNdlrBXNuA0BOFcU3iEo3D9H/z1/WQUnCuAOVCkYC/QhkTCsioQ5vaNA56+3uY8KOSDNo8XxxBzRIUSwul2lwHCNl6+cf1EhO9brI3Q8q/ZPZLmNIqYDXAI29/MMC13g/ql8UUcy2TwGrx2OE73SIzVBm2hVYI6FFs2hjJzMkknV83K0kr515gXrI+p7ANqnA9vdRBx7zMdOT1etFeuD06wjbLGLmHTS4ykhDYl6wn26fJHm3/OkqNyWllghc8DZnpAHh5AAYrrTIQPlSgtyqGL2qCoCPHbb2WgWewSVhqY+p7JMPchAc6myW3H2c7yL+TDMdRcr9I7DDOpvvfMoGx527Lji54mxGdZmdEpSGxi9Rx3g= + file: $BUILD_NAME.tar.xz + skip_cleanup: true + name: $TRAVIS_BRANCH + prerelease: true + on: + tags: true + all_branches: true diff --git a/src/build.sh b/src/build.sh index bcf4459452..5f496a5560 100755 --- a/src/build.sh +++ b/src/build.sh @@ -6,15 +6,16 @@ mkdir -p "$TMPDIR" if [ "$1" = debug ]; then out=out/Debug - flags="$EXTRA_FLAGS + flags=" is_debug=true is_component_build=true" else out=out/Release - flags="$EXTRA_FLAGS + flags=" is_official_build=true use_jumbo_build=true exclude_unwind_tables=true + enable_resource_whitelist_generation=false symbol_level=0" fi @@ -50,10 +51,10 @@ flags="$flags"' enable_websockets=false disable_ftp_support=true use_kerberos=false - disable_brotli_filter=true enable_mdns=false enable_reporting=false include_transport_security_state_preload_list=false + rtc_use_pipewire=false ' if [ "$(uname)" = Linux ]; then @@ -70,6 +71,6 @@ mkdir -p out python2=$(which python2 2>/dev/null || which python 2>/dev/null) export DEPOT_TOOLS_WIN_TOOLCHAIN=0 -./gn/out/gn gen "$out" --args="$flags" --script-executable=$python2 +./gn/out/gn gen "$out" --args="$flags $EXTRA_FLAGS" --script-executable=$python2 ninja -C "$out" naive diff --git a/src/get-clang.sh b/src/get-clang.sh index bb255695ba..8e00f34e86 100755 --- a/src/get-clang.sh +++ b/src/get-clang.sh @@ -25,7 +25,7 @@ fi # AFDO profile (Linux) if [ "$ARCH" = Linux -a ! -f chrome/android/profiles/afdo.prof ]; then AFDO_PATH=$(cat chrome/android/profiles/newest.txt) - afdo_url="https://storage.googleapis.com/chromeos-prebuilt/afdo-job/llvm/$AFDO_PATH" + afdo_url="https://commondatastorage.googleapis.com/${AFDO_PATH#gs://}" curl "$afdo_url" | bzip2 -cd >chrome/android/profiles/afdo.prof fi diff --git a/tests/basic.sh b/tests/basic.sh new file mode 100755 index 0000000000..69de22b615 --- /dev/null +++ b/tests/basic.sh @@ -0,0 +1,94 @@ +#!/bin/sh + +[ "$1" ] || exit 1 +naive="$1" +set -ex + +test_proxy() { + curl -v --proxy "$1" https://www.google.com/humans.txt | grep '^Google is built' +} + +test_naive() { + test_name="$1" + proxy="$2" + echo "TEST '$test_name':" + shift 2 + if ( + trap 'kill $pid' EXIT + pid= + for arg in "$@"; do + $naive $arg & pid="$pid $!" + done + sleep 1 + test_proxy "$proxy" + ); then + echo "TEST '$test_name': PASS" + true + else + echo "TEST '$test_name': FAIL" + false + fi +} + +test_naive 'Default config' socks5h://127.0.0.1:1080 '--log' + +echo '{"listen":"socks://127.0.0.1:60101","log":""}' >config.json +test_naive 'Default config file' socks5h://127.0.0.1:60101 '' +rm -f config.json + +echo '{"listen":"socks://127.0.0.1:60201","log":""}' >/tmp/config.json +test_naive 'Config file' socks5h://127.0.0.1:60201 '/tmp/config.json' +rm -f /tmp/config.json + +test_naive 'Trivial - listen scheme only' socks5h://127.0.0.1:1080 \ + '--log --listen=socks://' + +test_naive 'Trivial - listen no host' socks5h://127.0.0.1:60301 \ + '--log --listen=socks://:60301' + +test_naive 'Trivial - listen no port' socks5h://127.0.0.1:1080 \ + '--log --listen=socks://127.0.0.1' + +test_naive 'SOCKS-SOCKS' socks5h://127.0.0.1:60401 \ + '--log --listen=socks://:60401 --proxy=socks://127.0.0.1:60402' \ + '--log --listen=socks://:60402' + +test_naive 'SOCKS-SOCKS - proxy no port' socks5h://127.0.0.1:60501 \ + '--log --listen=socks://:60501 --proxy=socks://127.0.0.1' \ + '--log --listen=socks://:1080' + +test_naive 'SOCKS-HTTP' socks5h://127.0.0.1:60601 \ + '--log --listen=socks://:60601 --proxy=http://127.0.0.1:60602' \ + '--log --listen=http://:60602' + +test_naive 'HTTP-HTTP' http://127.0.0.1:60701 \ + '--log --listen=http://:60701 --proxy=http://127.0.0.1:60702' \ + '--log --listen=http://:60702' + +test_naive 'HTTP-SOCKS' http://127.0.0.1:60801 \ + '--log --listen=http://:60801 --proxy=http://127.0.0.1:60802' \ + '--log --listen=http://:60802' + +test_naive 'SOCKS-HTTP padded' socks5h://127.0.0.1:60901 \ + '--log --listen=socks://:60901 --proxy=http://127.0.01:60902 --padding' \ + '--log --listen=http://:60902 --padding' + +test_naive 'SOCKS-SOCKS-SOCKS' socks5h://127.0.0.1:61001 \ + '--log --listen=socks://:61001 --proxy=socks://127.0.0.1:61002' \ + '--log --listen=socks://:61002 --proxy=socks://127.0.0.1:61003' \ + '--log --listen=socks://:61003' + +test_naive 'SOCKS-HTTP-SOCKS' socks5h://127.0.0.1:61101 \ + '--log --listen=socks://:61101 --proxy=socks://127.0.0.1:61102' \ + '--log --listen=socks://:61102 --proxy=socks://127.0.0.1:61103' \ + '--log --listen=socks://:61103' + +test_naive 'HTTP-SOCKS-HTTP' socks5h://127.0.0.1:61201 \ + '--log --listen=socks://:61201 --proxy=socks://127.0.0.1:61202' \ + '--log --listen=socks://:61202 --proxy=socks://127.0.0.1:61203' \ + '--log --listen=socks://:61203' + +test_naive 'HTTP-HTTP-HTTP' socks5h://127.0.0.1:61301 \ + '--log --listen=socks://:61301 --proxy=socks://127.0.0.1:61302' \ + '--log --listen=socks://:61302 --proxy=socks://127.0.0.1:61303' \ + '--log --listen=socks://:61303'