67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
package source
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type tokenProviderRoundTripper func(*http.Request) (*http.Response, error)
|
|
|
|
func (f tokenProviderRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
return f(req)
|
|
}
|
|
|
|
func TestCrossPlatformCoveragePersonalSourceResolvesTokenForEveryTicketRequest(t *testing.T) {
|
|
tokens := []string{"token-a", "token-b"}
|
|
calls := 0
|
|
source, err := NewPersonal(PersonalConfig{
|
|
AccessTokenProvider: func(context.Context) (string, error) {
|
|
token := tokens[calls]
|
|
calls++
|
|
return token, nil
|
|
},
|
|
ClientID: "client",
|
|
SourceID: "source",
|
|
TicketURL: "https://ticket.test",
|
|
HTTPClient: &http.Client{Transport: tokenProviderRoundTripper(func(req *http.Request) (*http.Response, error) {
|
|
want := tokens[calls-1]
|
|
if got := req.Header.Get("x-user-access-token"); got != want {
|
|
t.Fatalf("token header = %q, want %q", got, want)
|
|
}
|
|
return &http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(strings.NewReader(`{"endpoint":"wss://stream.test","ticket":"ticket"}`)), Header: make(http.Header)}, nil
|
|
})},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for range 2 {
|
|
if _, err := source.fetchTicket(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if calls != 2 {
|
|
t.Fatalf("provider calls = %d, want 2", calls)
|
|
}
|
|
}
|
|
|
|
func TestCrossPlatformCoveragePortalTicketProviderFailureStopsBeforeHTTP(t *testing.T) {
|
|
want := errors.New("token store failed")
|
|
httpCalled := false
|
|
_, err := requestPortalTicket(context.Background(), &PortalTicketConfig{
|
|
TicketURL: "https://ticket.test",
|
|
AccessTokenProvider: func(context.Context) (string, error) { return "", want },
|
|
SourceID: "source",
|
|
HTTPClient: &http.Client{Transport: tokenProviderRoundTripper(func(*http.Request) (*http.Response, error) {
|
|
httpCalled = true
|
|
return nil, errors.New("unexpected HTTP")
|
|
})},
|
|
})
|
|
if !errors.Is(err, want) || httpCalled {
|
|
t.Fatalf("request error = %v, httpCalled=%v", err, httpCalled)
|
|
}
|
|
}
|