301 lines
5.2 KiB
Go
301 lines
5.2 KiB
Go
package httpbearer
|
||
|
||
import (
|
||
"testing"
|
||
)
|
||
|
||
func TestParse(t *testing.T) {
|
||
|
||
tests := []struct{
|
||
Value string
|
||
Expected string
|
||
}{
|
||
{
|
||
Value: "Bearer ",
|
||
Expected: "",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer 0",
|
||
Expected: "0",
|
||
},
|
||
{
|
||
Value: "Bearer 1",
|
||
Expected: "1",
|
||
},
|
||
{
|
||
Value: "Bearer a",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer x",
|
||
Expected: "x",
|
||
},
|
||
{
|
||
Value: "Bearer B",
|
||
Expected: "B",
|
||
},
|
||
{
|
||
Value: "Bearer Z",
|
||
Expected: "Z",
|
||
},
|
||
{
|
||
Value: "Bearer ۴",
|
||
Expected: "۴",
|
||
},
|
||
{
|
||
Value: "Bearer ۵",
|
||
Expected: "۵",
|
||
},
|
||
{
|
||
Value: "Bearer 🙂",
|
||
Expected: "🙂",
|
||
},
|
||
{
|
||
Value: "Bearer 😈",
|
||
Expected: "😈",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer a",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer ab",
|
||
Expected: "ab",
|
||
},
|
||
{
|
||
Value: "Bearer abc",
|
||
Expected: "abc",
|
||
},
|
||
{
|
||
Value: "Bearer abcd",
|
||
Expected: "abcd",
|
||
},
|
||
{
|
||
Value: "Bearer abcde",
|
||
Expected: "abcde",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer a ",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer ab ",
|
||
Expected: "ab",
|
||
},
|
||
{
|
||
Value: "Bearer abc ",
|
||
Expected: "abc",
|
||
},
|
||
{
|
||
Value: "Bearer abcd ",
|
||
Expected: "abcd",
|
||
},
|
||
{
|
||
Value: "Bearer abcde ",
|
||
Expected: "abcde",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer a\t",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer ab\t",
|
||
Expected: "ab",
|
||
},
|
||
{
|
||
Value: "Bearer abc\t",
|
||
Expected: "abc",
|
||
},
|
||
{
|
||
Value: "Bearer abcd\t",
|
||
Expected: "abcd",
|
||
},
|
||
{
|
||
Value: "Bearer abcde\t",
|
||
Expected: "abcde",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer a\r\n ",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer ab\r\n ",
|
||
Expected: "ab",
|
||
},
|
||
{
|
||
Value: "Bearer abc\r\n ",
|
||
Expected: "abc",
|
||
},
|
||
{
|
||
Value: "Bearer abcd\r\n ",
|
||
Expected: "abcd",
|
||
},
|
||
{
|
||
Value: "Bearer abcde\r\n ",
|
||
Expected: "abcde",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer a\r\n\t",
|
||
Expected: "a",
|
||
},
|
||
{
|
||
Value: "Bearer ab\r\n\t",
|
||
Expected: "ab",
|
||
},
|
||
{
|
||
Value: "Bearer abc\r\n\t",
|
||
Expected: "abc",
|
||
},
|
||
{
|
||
Value: "Bearer abcd\r\n\t",
|
||
Expected: "abcd",
|
||
},
|
||
{
|
||
Value: "Bearer abcde\r\n\t",
|
||
Expected: "abcde",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer XYZ123\r",
|
||
Expected: "XYZ123\r",
|
||
},
|
||
{
|
||
Value: "Bearer XYZ123\r ",
|
||
Expected: "XYZ123\r",
|
||
},
|
||
{
|
||
Value: "Bearer XYZ123\r\t",
|
||
Expected: "XYZ123\r",
|
||
},
|
||
{
|
||
Value: "Bearer XYZ123\r\r\n ",
|
||
Expected: "XYZ123\r",
|
||
},
|
||
{
|
||
Value: "Bearer XYZ123\r\r\n\t",
|
||
Expected: "XYZ123\r",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer\tawcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer \tawcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer\t awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer\r\n\tawcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer \r\n\t awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
|
||
|
||
|
||
{
|
||
Value: "Bearer awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj ",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj\t",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj\r\n\t ",
|
||
Expected: "awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
}
|
||
|
||
for testNumber, test := range tests {
|
||
|
||
actual, successful := Parse(test.Value)
|
||
expected := test.Expected
|
||
|
||
if !successful {
|
||
t.Errorf("For test #%d, expected to be able to parse HTTP bearer token successfully but actually didn't.", testNumber)
|
||
t.Logf("VALUE: %q", test.Value)
|
||
continue
|
||
}
|
||
|
||
if expected != actual {
|
||
t.Errorf("For test #%d, the actual bearer token is not what was expected.", testNumber)
|
||
t.Logf("EXPECTED: %q", expected)
|
||
t.Logf("ACTUAL: %q", actual)
|
||
t.Logf("VALUE: %q", test.Value)
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestParse_fail(t *testing.T) {
|
||
|
||
tests := []struct{
|
||
Value string
|
||
}{
|
||
{
|
||
Value: "",
|
||
},
|
||
{
|
||
Value: "bearer awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Token awcQ.j/YQLCF-yhC0Dah@wCn_NJe3e[VwKv1gzj!!SP3PHtj",
|
||
},
|
||
{
|
||
Value: "Bearer",
|
||
},
|
||
}
|
||
|
||
for testNumber, test := range tests {
|
||
|
||
actual, successful := Parse(test.Value)
|
||
|
||
if successful {
|
||
t.Errorf("For test #%d, expected parseing of HTTP bearer token to be unsuccessfully but actually was.", testNumber)
|
||
t.Logf("VALUE: %q", test.Value)
|
||
continue
|
||
}
|
||
|
||
if expected := ""; expected != actual {
|
||
t.Errorf("For test #%d, expected result to be empty string but actually wasn't.", testNumber)
|
||
t.Logf("EXPECTED: %q", expected)
|
||
t.Logf("ACTUAL: %q", actual)
|
||
t.Logf("VALUE: %q", test.Value)
|
||
continue
|
||
}
|
||
}
|
||
}
|