set -g domain 'https://krk.tojnar.cz' set -g failed 0 function fail set -l message $argv[1] set -l output_file $argv[2] echo "$message" > /dev/stderr cat "$output_file" > /dev/stderr set failed (math $failed + 1) end function test_request set -l uri $argv[1] set -l argc (count $argv) echo "Testing $domain$uri" > /dev/stderr set output_file (mktemp) curl --silent --location --head "$domain$uri" > "$output_file" set last_status (cat "$output_file" | grep --perl-regexp 'HTTP/.+ \K([0-9]{3})' --only-matching | tail -n 1 | string trim) set last_location (cat "$output_file" | grep --perl-regexp --ignore-case 'location: \K(.+)' --only-matching | tail -n 1 | string trim) set -l expected_status 200 if test "$argc" -ge 2 set expected_status $argv[2] end if test "$last_status" != "$expected_status" fail "ERROR: Expected status $expected_status, $last_status received" "$output_file" return end if test "$argc" -ge 3 set -l expected_location $argv[3] if test -z "$last_location" fail "ERROR: Expected location $expected_location but no received" "$output_file" return else if test "$last_location" != "$domain$expected_location" fail "ERROR: Expected location $expected_location, $last_location received" "$output_file" return end else if test -n "$last_location" fail "ERROR: Unexpected location $last_location received" "$output_file" return end echo "OK" > /dev/stderr echo > /dev/stderr end test_request '?lang=cs&page=krk_default' 200 '/' test_request '?lang=en&page=krk_default' 200 '/en/' test_request '?lang=cs' 200 '/' test_request '?lang=en' 200 '/en/' test_request '/mainkrk.php?page=clanky/beskydy-2010' 200 '/clanky/beskydy-2010.html' test_request '/mainkrk.php?page=clanky/beskydy' 404 '/clanky/beskydy.html' test_request '/?page=mcr_2009' 200 '/mcr_2009/' test_request '/?page=mcr_2009/mcr_2009' 200 '/mcr_2009/' test_request '/?page=mcr_2009/probihani_loucna/probihani_loucna' 200 '/mcr_2009/probihani_loucna/' test_request '/?page=clanky' 200 '/clanky/' test_request '/?page=clanky/clanky' 200 '/clanky/' test_request '/?page=mcr_2009/' 200 '/mcr_2009/' test_request '/?page=foo/' 404 '/foo/' test_request '' 200 '/' test_request '/cs/' 200 '/' test_request '/en/' test_request '/en' 200 '/en/' test_request '/cs' 200 '/' test_request '/mainkrk.php' 200 '/' test_request '/cs/mcr_2009/mcr_2009.html' 200 '/mcr_2009/mcr_2009.html' test_request '/en/mcr_2009/mcr_2009.html' test_request '/clanky/beskydy-2010.html' test_request '/clanky/beskydy.html' 404 test_request '/pages/mcr_2009/euro.gif' 200 '/mcr_2009/euro.gif' if test $failed = 0 echo "All tests passed" > /dev/stderr else echo "$failed tests failed" > /dev/stderr exit 1 end