mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-28 10:31:57 +00:00
167 lines
5.4 KiB
Bash
Executable File
167 lines
5.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Tags: no-fasttest
|
|
# shellcheck disable=SC2155
|
|
|
|
set -e
|
|
|
|
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
# shellcheck source=../shell_config.sh
|
|
. "$CURDIR"/../shell_config.sh
|
|
|
|
|
|
urls=(
|
|
"http://www.example.com"
|
|
"https://secure.example.com"
|
|
"http://example.com"
|
|
"https://www.example.org"
|
|
"https://subdomain.example.com"
|
|
"http://sub.sub.example.com"
|
|
"http://192.168.1.1"
|
|
"https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]"
|
|
"http://example.com:8080"
|
|
"https://example.com:443"
|
|
"http://example.com/path/to/page.html"
|
|
"https://example.com/path/with/trailing/slash/"
|
|
"http://example.com/search?q=query&lang=en"
|
|
"https://example.com/path?param1=value1¶m2=value2"
|
|
"http://example.com/page.html#section1"
|
|
"https://example.com/document.pdf#page=10"
|
|
"http://user:password@example.com"
|
|
"https://user@example.com"
|
|
"https://user:pass@sub.example.com:8080/path/page.html?query=123#fragment"
|
|
"http://example.com/path%20with%20spaces"
|
|
"https://example.com/search?q=encode+this"
|
|
"http://例子.测试"
|
|
"https://mañana.com"
|
|
"http://example.com/%E2%82%AC"
|
|
"data:text/plain;base64,SGVsbG8sIFdvcmxkIQ=="
|
|
"file:///C:/path/to/file.txt"
|
|
"file:///home/user/document.pdf"
|
|
"ftp://ftp.example.com/pub/file.zip"
|
|
"ftps://secure-ftp.example.com/private/doc.pdf"
|
|
"mailto:user@example.com"
|
|
"mailto:user@example.com?subject=Hello&body=How%20are%20you"
|
|
"git://github.com/user/repo.git"
|
|
"ssh://user@host.xz:port/path/to/repo.git"
|
|
"https://example.com/path(1)/[2]/{3}"
|
|
"http://example.com/path;param?query,value"
|
|
""
|
|
"http://"
|
|
"example.com"
|
|
"http:"
|
|
"//"
|
|
"?query=value"
|
|
"#fragment"
|
|
"http://?#"
|
|
"http://xn--bcher-kva.ch"
|
|
"https://xn--bcher-kva.xn--tckwe/xn--8ws00zhy3a/%E6%B8%AC%E8%A9%A6.php?xn--o39an51a5phao35a=xn--mgbh0fb&xn--fiq228c5hs=test"
|
|
"https://xn--3e0b707e.xn--79-8kcre8v3a/%ED%85%8C%EC%8A%A4%ED%8A%B8/%ED%8C%8C%EC%9D%BC.jsp?xn--i1b6b1a6a2e=xn--9t4b11yi5a&xn--3e0b707e=xn--80aaa1cbgbm"
|
|
"https://example.com/path?param=value&special=!@#$%^&*()"
|
|
|
|
"http://example.com/path/with/~tilde"
|
|
"https://example.com/path/with/\`backtick\`"
|
|
|
|
"https://example.com/path?param1=value1¶m2=value2¶m3=value3#section1#section2"
|
|
"http://example.com/page?q1=v1&q2=v2#frag1#frag2#frag3"
|
|
|
|
"https://example.com/☃/snowman"
|
|
"http://example.com/path/⽇本語"
|
|
"https://example.com/ü/ñ/path?q=ç"
|
|
|
|
"https://example.com/path/to/very/long/url/that/exceeds/two/hundred/and/fifty/five/characters/lorem/ipsum/dolor/sit/amet/consectetur/adipiscing/elit/sed/do/eiusmod/tempor/incididunt/ut/labore/et/dolore/magna/aliqua/ut/enim/ad/minim/veniam/quis/nostrud/exercitation/ullamco/laboris/nisi/ut/aliquip/ex/ea/commodo/consequat"
|
|
|
|
"https://example.com//path///to//file"
|
|
"http://example.com/path?param1=value1&¶m2=value2&&¶m3=value3"
|
|
|
|
"http://example.com/%70%61%74%68?%70%61%72%61%6d=%76%61%6c%75%65#%66%72%61%67%6d%65%6e%74"
|
|
|
|
"HtTpS://ExAmPlE.cOm/PaTh"
|
|
"http://EXAMPLE.COM/PATH"
|
|
|
|
"http://127.0.0.1:8080/path"
|
|
"https://[::1]/path"
|
|
"http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:8080/path"
|
|
|
|
"http://example.com:65535/path"
|
|
"https://example.com:0/path"
|
|
|
|
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="
|
|
|
|
"https://user:password@example.com:8080/path?query=value#fragment"
|
|
"ftp://anonymous:password@ftp.example.com/pub/"
|
|
|
|
"http://example.com/path%20with%20spaces"
|
|
"https://example.com/search?q=query%20with%20spaces"
|
|
|
|
"https://www.mañana.com/path"
|
|
"http://例子.测试/path"
|
|
"https://рм.рф/path"
|
|
|
|
"https://user:pass@sub.example.com:8080/p/a/t/h?query=123&key=value#fragid1"
|
|
|
|
"jdbc:mysql://localhost:3306/database"
|
|
"market://details?id=com.example.app"
|
|
"tel:+1-816-555-1212"
|
|
"sms:+18165551212"
|
|
|
|
"http://[1080:0:0:0:8:800:200C:417A]/index.html"
|
|
"https://[2001:db8::1428:57ab]:8080/path"
|
|
|
|
"http://.."
|
|
"http://../"
|
|
"http://??"
|
|
"http://??/"
|
|
"http:///a"
|
|
"http://example.com??"
|
|
"http://example.com??/"
|
|
"foo://example.com:8042/over/there?name=ferret#nose"
|
|
"//example.com/path"
|
|
)
|
|
|
|
|
|
base64URLEncode() {
|
|
echo -n "$1" | base64 -w0 | tr '+/' '-_' | tr -d '='
|
|
}
|
|
|
|
base64URLDecode() {
|
|
local len=$((${#1} % 4))
|
|
local result="$1"
|
|
if [ $len -eq 2 ]; then result="$1"'=='
|
|
elif [ $len -eq 3 ]; then result="$1"'='
|
|
fi
|
|
echo "$result" | tr '_-' '/+' | base64 -w0 -d
|
|
}
|
|
|
|
test() {
|
|
local input="$1"
|
|
local encode_ch=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLEncode('$input')")
|
|
local encode_gold=$(base64URLEncode $input)
|
|
|
|
local decode_ch=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLDecode('$encode_gold')")
|
|
local decode_gold=$(base64URLDecode $encode_gold)
|
|
|
|
if [ "$encode_ch" != "$encode_gold" ]; then
|
|
echo "Input: $input"
|
|
echo "Expected: $encode_gold"
|
|
echo "Got: $encode_ch"
|
|
fi
|
|
|
|
if [ "$decode_ch" != "$input" ] || [ "$decode_ch" != "$decode_gold" ]; then
|
|
echo "Input: $input"
|
|
echo "Decode gold: $decode_gold"
|
|
echo "Got: $decode_ch"
|
|
fi
|
|
}
|
|
|
|
|
|
for url in "${urls[@]}"; do
|
|
test "$url"
|
|
done
|
|
|
|
# special case for '
|
|
decode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLDecode(base64URLEncode('http://example.com/!$&\'()*+,;=:@/path'))")
|
|
if [ "$decode" != "http://example.com/!$&\'()*+,;=:@/path" ]; then
|
|
echo "Special case fail"
|
|
echo "Got: $decode"
|
|
fi
|