83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package auth
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestTicketStoreIssueValidate(t *testing.T) {
|
|
store := NewTicketStore(0)
|
|
ticket, err := store.Issue()
|
|
if err != nil || ticket == "" {
|
|
t.Fatal("expected valid ticket")
|
|
}
|
|
if !store.Validate(ticket) {
|
|
t.Fatal("expected valid ticket")
|
|
}
|
|
if store.Validate("invalid") {
|
|
t.Fatal("expected invalid ticket to fail")
|
|
}
|
|
}
|
|
|
|
func TestTicketStoreConsume(t *testing.T) {
|
|
store := NewTicketStore(0)
|
|
ticket, err := store.Issue()
|
|
if err != nil || !store.Consume(ticket) {
|
|
t.Fatal("expected consume to succeed")
|
|
}
|
|
if store.Validate(ticket) {
|
|
t.Fatal("consumed ticket should be invalid")
|
|
}
|
|
}
|
|
|
|
func TestBasicAuthMiddleware(t *testing.T) {
|
|
handler := BasicAuthMiddleware("admin", "secret")(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
if rec.Code != http.StatusUnauthorized {
|
|
t.Fatalf("expected 401, got %d", rec.Code)
|
|
}
|
|
|
|
req = httptest.NewRequest(http.MethodGet, "/", nil)
|
|
req.SetBasicAuth("admin", "secret")
|
|
rec = httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestFleetSecretMiddleware(t *testing.T) {
|
|
handler := FleetSecretMiddleware("fleet-secret", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
|
|
req := httptest.NewRequest(http.MethodPost, "/beacon", nil)
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
if rec.Code != http.StatusUnauthorized {
|
|
t.Fatalf("expected 401, got %d", rec.Code)
|
|
}
|
|
|
|
req = httptest.NewRequest(http.MethodPost, "/beacon", nil)
|
|
req.Header.Set("Authorization", "Bearer fleet-secret")
|
|
rec = httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestExtractBearer(t *testing.T) {
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
req.Header.Set("Authorization", "Bearer abc123")
|
|
if got := ExtractBearer(req); got != "abc123" {
|
|
t.Fatalf("expected abc123, got %q", got)
|
|
}
|
|
}
|