Files
hi-server/tests/acceptance/acceptance_test.go

112 lines
3.2 KiB
Go

package acceptance
import (
"context"
"net/http"
"net/url"
"os"
"testing"
)
func TestMain(m *testing.M) {
code := m.Run()
if err := writeReport(testConfig); err != nil && code == 0 {
code = 1
}
os.Exit(code)
}
func TestFixtureSeedLoader(t *testing.T) {
c := cfg(t)
ctx := context.Background()
newFixtureLoader(c).SeedIfConfigured(t, ctx)
}
func TestPublicSmoke(t *testing.T) {
c := cfg(t)
ctx := context.Background()
client := newClient(c)
t.Run("happy path user info", func(t *testing.T) {
token := loginUser(t, ctx, client, c)
envelope, raw, status, err := client.WithToken(token).Get(ctx, "/v1/public/user/info", nil)
if err != nil {
t.Fatalf("request failed: %v", err)
}
assertOK(t, envelope, raw, status)
recordCase(t, "public", http.MethodGet, "/v1/public/user/info", "200 envelope")
})
t.Run("error path missing auth", func(t *testing.T) {
envelope, raw, status, err := client.Get(ctx, "/v1/public/user/info", nil)
if err != nil {
t.Fatalf("request failed: %v", err)
}
assertAPIError(t, envelope, raw, status)
recordCase(t, "public", http.MethodGet, "/v1/public/user/info", "non-200 envelope without auth")
})
}
func TestAdminSmoke(t *testing.T) {
c := cfg(t)
ctx := context.Background()
client := newClient(c)
t.Run("happy path current admin", func(t *testing.T) {
token := loginAdmin(t, ctx, client, c)
envelope, raw, status, err := client.WithToken(token).Get(ctx, "/v1/admin/user/current", nil)
if err != nil {
t.Fatalf("request failed: %v", err)
}
assertOK(t, envelope, raw, status)
recordCase(t, "admin", http.MethodGet, "/v1/admin/user/current", "200 envelope")
})
t.Run("error path missing auth", func(t *testing.T) {
envelope, raw, status, err := client.Get(ctx, "/v1/admin/user/current", nil)
if err != nil {
t.Fatalf("request failed: %v", err)
}
assertAPIError(t, envelope, raw, status)
recordCase(t, "admin", http.MethodGet, "/v1/admin/user/current", "non-200 envelope without auth")
})
}
func TestNodeSmoke(t *testing.T) {
c := cfg(t)
ctx := context.Background()
client := newClient(c)
loader := newFixtureLoader(c)
t.Run("happy path server config", func(t *testing.T) {
secret, err := loader.NodeSecret(ctx)
if err != nil {
t.Fatalf("load node secret: %v", err)
}
secret = requireSecret(t, "node secret", secret)
query := url.Values{}
query.Set("secret_key", secret)
query.Set("protocols", c.NodeProtocol)
envelope, raw, status, err := client.Get(ctx, "/v2/server/"+c.NodeServerID, query)
if err != nil {
t.Fatalf("request failed: %v", err)
}
assertOK(t, envelope, raw, status)
recordCase(t, "node", http.MethodGet, "/v2/server/{server_id}", "200 envelope")
})
t.Run("error path invalid secret", func(t *testing.T) {
query := url.Values{}
query.Set("secret_key", "invalid-"+c.RunID)
query.Set("protocols", c.NodeProtocol)
_, raw, status, err := client.Get(ctx, "/v1/server/config", query)
if err != nil {
t.Fatalf("request failed: %v", err)
}
if status != http.StatusForbidden {
t.Fatalf("http status = %d, want 403; body=%s", status, sanitizeBody(raw))
}
recordCase(t, "node", http.MethodGet, "/v1/server/config", "403 with invalid secret")
})
}