feat: backend service
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package integration_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"galaxy/integration/testenv"
|
||||
)
|
||||
|
||||
// TestAdminFlow_BootstrapAndCRUD verifies that the bootstrap admin
|
||||
// account can authenticate against backend's admin surface, create a
|
||||
// second admin, and that the second admin can disable the first.
|
||||
func TestAdminFlow_BootstrapAndCRUD(t *testing.T) {
|
||||
plat := testenv.Bootstrap(t, testenv.BootstrapOptions{})
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
|
||||
bootstrap := testenv.NewBackendAdminClient(plat.Backend.HTTPURL, plat.Backend.AdminUser, plat.Backend.AdminPassword)
|
||||
|
||||
// Create a second admin account.
|
||||
body := map[string]any{
|
||||
"username": "secondary",
|
||||
"password": "secondary-secret-pw",
|
||||
}
|
||||
raw, resp, err := bootstrap.Do(ctx, http.MethodPost, "/api/v1/admin/admin-accounts", body)
|
||||
if err != nil {
|
||||
t.Fatalf("create admin: %v", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("create admin: status %d body=%s", resp.StatusCode, string(raw))
|
||||
}
|
||||
|
||||
// Switch to the secondary admin and disable the bootstrap admin.
|
||||
secondary := testenv.NewBackendAdminClient(plat.Backend.HTTPURL, "secondary", "secondary-secret-pw")
|
||||
raw, resp, err = secondary.Do(ctx, http.MethodPost, "/api/v1/admin/admin-accounts/"+plat.Backend.AdminUser+"/disable", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("disable bootstrap: %v", err)
|
||||
}
|
||||
if resp.StatusCode/100 != 2 {
|
||||
t.Fatalf("disable bootstrap: status %d body=%s", resp.StatusCode, string(raw))
|
||||
}
|
||||
|
||||
// Bootstrap admin should now be unauthorised on every endpoint.
|
||||
raw, resp, err = bootstrap.Do(ctx, http.MethodGet, "/api/v1/admin/admin-accounts", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("bootstrap after disable: %v", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusUnauthorized {
|
||||
t.Fatalf("bootstrap should be unauthorized after disable: status %d body=%s", resp.StatusCode, string(raw))
|
||||
}
|
||||
_ = json.RawMessage(raw)
|
||||
}
|
||||
Reference in New Issue
Block a user