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..3cf9cade7a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,43 @@ +branches: + except: + - dev +language: cpp +os: + - linux + - osx +dist: xenial +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 bd2f5394df..c821a895cc 100755 --- a/src/build.sh +++ b/src/build.sh @@ -15,6 +15,7 @@ else is_official_build=true use_jumbo_build=true exclude_unwind_tables=true + enable_resource_whitelist_generation=false symbol_level=0" fi diff --git a/src/get-clang.sh b/src/get-clang.sh index d5ba13b9ca..4c86057a88 100755 --- a/src/get-clang.sh +++ b/src/get-clang.sh @@ -29,6 +29,14 @@ if [ "$ARCH" = Linux -a ! -f chrome/android/profiles/afdo.prof ]; then curl "$afdo_url" | bzip2 -cd >chrome/android/profiles/afdo.prof fi +# dsymutil (Mac) +if [ "$ARCH" = Darwin ]; then + mkdir -p tools/clang/dsymutil + DSYMUTIL_PATH="dsymutil-$CLANG_REVISION-$CLANG_SUB_REVISION.tgz" + dsymutil_url="http://commondatastorage.googleapis.com/chromium-browser-clang-staging/Mac/$DSYMUTIL_PATH" + curl "$dsymutil_url" | tar xzf - -C tools/clang/dsymutil +fi + # sccache (Windows) if [ "$ARCH" = Windows ]; then sccache_url="https://github.com/mozilla/sccache/releases/download/0.2.8/sccache-0.2.8-x86_64-pc-windows-msvc.tar.gz" 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'