mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-01 03:52:15 +00:00
Add tests for base64URLEncode and base64URLDecode
This commit is contained in:
parent
4613b23c37
commit
37489dc31f
0
tests/queries/0_stateless/03167_base64_url_functions_sh.reference
Executable file
0
tests/queries/0_stateless/03167_base64_url_functions_sh.reference
Executable file
191
tests/queries/0_stateless/03167_base64_url_functions_sh.sh
Executable file
191
tests/queries/0_stateless/03167_base64_url_functions_sh.sh
Executable file
@ -0,0 +1,191 @@
|
||||
#!/usr/bin/env bash
|
||||
# Tags: no-fastest, no-debug
|
||||
# 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" | openssl base64 -e -A | 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 '_-' '/+' | openssl base64 -d -A
|
||||
}
|
||||
|
||||
test_compare_to_gold_encode() {
|
||||
local input="$1"
|
||||
local encode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLEncode('$input')")
|
||||
local encode_gold=$(base64URLEncode $input)
|
||||
|
||||
if [ "$encode" != "$encode_gold" ]; then
|
||||
echo "Input: $input"
|
||||
echo "Expected: $encode_gold"
|
||||
echo "Got: $encode"
|
||||
fi
|
||||
}
|
||||
|
||||
test_compare_to_gold_decode() {
|
||||
local input="$1"
|
||||
local encode_gold=$(base64URLEncode $input)
|
||||
local decode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLDecode('$encode_gold')")
|
||||
local decode_gold=$(base64URLDecode $encode_gold)
|
||||
|
||||
if [ "$decode" != "$decode_gold" ]; then
|
||||
echo "Input: $input"
|
||||
echo "Expected: $decode_gold"
|
||||
echo "Got: $decode"
|
||||
fi
|
||||
}
|
||||
|
||||
test_compare_to_self() {
|
||||
local input="$1"
|
||||
local encode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLEncode('$input')")
|
||||
local decode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLDecode('$encode')")
|
||||
|
||||
if [ "$decode" != "$input" ]; then
|
||||
echo "Input: $input"
|
||||
echo "Encode: $encode"
|
||||
echo "Got: $decode"
|
||||
fi
|
||||
}
|
||||
|
||||
for url in "${urls[@]}"; do
|
||||
test_compare_to_gold_encode "$url"
|
||||
done
|
||||
|
||||
for url in "${urls[@]}"; do
|
||||
test_compare_to_gold_decode "$url"
|
||||
done
|
||||
|
||||
for url in "${urls[@]}"; do
|
||||
test_compare_to_self "$url"
|
||||
done
|
||||
|
||||
# special case for '
|
||||
encode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLEncode('http://example.com/!$&\'()*+,;=:@/path')")
|
||||
decode=$(${CLICKHOUSE_CLIENT} --query="SELECT base64URLDecode('$encode')")
|
||||
if [ "$decode" != "http://example.com/!$&\'()*+,;=:@/path" ]; then
|
||||
echo "Special case fail"
|
||||
echo "Encode: $encode"
|
||||
echo "Got: $decode"
|
||||
fi
|
Loading…
Reference in New Issue
Block a user