81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func mockContext() context.Context {
|
|
return context.WithValue(context.Background(), tokenKey, &Token{Token: "xxx"})
|
|
}
|
|
|
|
func tokenHandler(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodPost {
|
|
http.Error(rw, fmt.Sprintf("invalid method, got %s want %s", req.Method, http.MethodPost), http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
|
|
username, password, ok := req.BasicAuth()
|
|
if !ok || username != "user" || password != "secret" {
|
|
http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
_ = json.NewEncoder(rw).Encode(Token{
|
|
Token: "xxx",
|
|
Lifetime: 666,
|
|
TokenType: "bearer",
|
|
})
|
|
}
|
|
|
|
func TestClient_obtainToken(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
t.Cleanup(server.Close)
|
|
|
|
mux.HandleFunc("/", tokenHandler)
|
|
|
|
client := NewClient("user", "secret")
|
|
client.HTTPClient = server.Client()
|
|
client.AuthEndpoint, _ = url.Parse(server.URL)
|
|
|
|
assert.Nil(t, client.token)
|
|
|
|
tok, err := client.obtainToken(context.Background())
|
|
require.NoError(t, err)
|
|
|
|
assert.NotNil(t, tok)
|
|
assert.NotZero(t, tok.Deadline)
|
|
assert.Equal(t, "xxx", tok.Token)
|
|
}
|
|
|
|
func TestClient_CreateAuthenticatedContext(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
t.Cleanup(server.Close)
|
|
|
|
mux.HandleFunc("/", tokenHandler)
|
|
|
|
client := NewClient("user", "secret")
|
|
client.HTTPClient = server.Client()
|
|
client.AuthEndpoint, _ = url.Parse(server.URL)
|
|
|
|
assert.Nil(t, client.token)
|
|
|
|
ctx, err := client.CreateAuthenticatedContext(context.Background())
|
|
require.NoError(t, err)
|
|
|
|
tok := getToken(ctx)
|
|
|
|
assert.NotNil(t, tok)
|
|
assert.NotZero(t, tok.Deadline)
|
|
assert.Equal(t, "xxx", tok.Token)
|
|
}
|