Path: blob/main/components/public-api-server/pkg/auth/auth_test.go
2500 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package auth56import (7"net/http"8"testing"910"github.com/stretchr/testify/require"11)1213func TestBearerTokenFromHeaders(t *testing.T) {14type Scenario struct {15Name string1617// Input18Header http.Header1920// Output21Token string22Error error23}2425for _, s := range []Scenario{26{27Name: "happy case",28Header: addToHeader(http.Header{}, "Authorization", "Bearer foo"),29Token: "foo",30},31{32Name: "leading and trailing spaces are trimmed",33Header: addToHeader(http.Header{}, "Authorization", " Bearer foo "),34Token: "foo",35},36{37Name: "anything after Bearer is extracted",38Header: addToHeader(http.Header{}, "Authorization", "Bearer foo bar"),39Token: "foo bar",40},41{42Name: "duplicate bearer",43Header: addToHeader(http.Header{}, "Authorization", "Bearer Bearer foo"),44Token: "Bearer foo",45},46{47Name: "missing Bearer prefix fails",48Header: addToHeader(http.Header{}, "Authorization", "foo"),49Error: NoAccessToken,50},51{52Name: "missing Authorization header fails",53Header: http.Header{},54Error: NoAccessToken,55},56} {57t.Run(s.Name, func(t *testing.T) {58token, err := BearerTokenFromHeaders(s.Header)59require.ErrorIs(t, err, s.Error)60require.Equal(t, s.Token, token)61})62}63}6465func addToHeader(h http.Header, key, value string) http.Header {66h.Add(key, value)67return h68}697071