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 } } }