lego/providers/dns/mythicbeasts/internal/identity_test.go
2023-05-05 09:49:38 +02:00

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