#!/bin/bash cd "$( dirname "${BASH_SOURCE[0]}" )/.." if ! go build; then echo "build failed" exit 1 fi PROXY_ADDR=127.0.0.1:7788 COW_ADDR=127.0.0.1:8899 if [[ -z "$TRAVIS" ]]; then RCDIR=~/.cow/ else # on travis RCDIR=./script/ fi ./cow -rc $RCDIR/debugrc -listen=cow://aes-128-cfb:foobar@$COW_ADDR & parent_pid=$! ./cow -rc ./script/httprc -listen=http://$PROXY_ADDR & cow_pid=$! stop_cow() { kill -SIGTERM $parent_pid kill -SIGTERM $cow_pid } trap 'stop_cow' TERM INT sleep 1 test_get() { local url url=$1 target=$2 noproxy=$3 code=$4 echo -n "GET $url " if [[ -z $code ]]; then code="200" fi # get 5 times for i in {1..2}; do # -s silent to disable progress meter, but enable --show-error # -i to include http header # -L to follow redirect so we should always get HTTP 200 if [[ -n $noproxy ]]; then cont=`curl -s --show-error -i -L $url 2>&1` else cont=`curl -s --show-error -i -L -x $PROXY_ADDR $url 2>&1` fi ok=`echo $cont | grep -E -o "HTTP/1\.1 +$code"` html=`echo $cont | grep -E -o -i "$target"` if [[ -z $ok || -z $html ]] ; then echo "==============================" echo "GET $url FAILED!!!" echo "$ok" echo "$html" echo $cont echo "==============================" kill -SIGTERM $cow_pid exit 1 fi sleep 0.3 done echo "passed" } test_get $PROXY_ADDR/pac "apple.com" "noproxy" # test for pac test_get google.com "" # blocked site, all kinds of block method test_get https://google.com "" # Sites that may timeout on travis. if [[ -z $TRAVIS ]]; then test_get plan9.bell-labs.com/magic/man2html/1/2l "" "" "404" # single LF in response header test_get www.wpxap.com "" # 301 redirect test_get www.taobao.com "" # chunked encoding, weird can't tests for in script test_get https://www.alipay.com "" fi stop_cow sleep 0.5 rm -f ./script/stat* exit 0