CI / changes (push) Successful in 8s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 25s
CI / web (push) Failing after 34s
CI / go (push) Failing after 19s
CI / bird2 (push) Has been skipped
CI / release (push) Has been skipped
- Added support for remote speaker configuration in the README and documentation. - Implemented a new endpoint for retrieving the bundle signing public key. - Updated the `evobgp-agent` to include a `serve` command for Panel→Node sync API. - Enhanced CI workflow to validate remote speaker compose files. - Introduced new fields in the API and UI for managing speaker metadata, including dispatch status and sync status. - Improved error handling and response formatting in speaker-related API endpoints. - Updated documentation to reflect changes in remote speaker functionality and usage guidelines.
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package agentserver_test
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"evobgp/internal/agentserver"
|
|
)
|
|
|
|
func TestAgentHealth_requiresAuth(t *testing.T) {
|
|
t.Parallel()
|
|
srv := httptest.NewServer(agentserver.New(agentserver.Config{
|
|
Secret: "test-secret",
|
|
SpeakerID: "sp-1",
|
|
}).Handler())
|
|
defer srv.Close()
|
|
|
|
resp, err := http.Get(srv.URL + "/v1/agent/health")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusUnauthorized {
|
|
t.Fatalf("want 401, got %d", resp.StatusCode)
|
|
}
|
|
|
|
req, _ := http.NewRequest(http.MethodGet, srv.URL+"/v1/agent/health", nil)
|
|
req.Header.Set("Authorization", "Bearer test-secret")
|
|
resp2, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp2.Body.Close() }()
|
|
if resp2.StatusCode != http.StatusOK {
|
|
t.Fatalf("want 200, got %d", resp2.StatusCode)
|
|
}
|
|
}
|
|
|
|
func TestAgentSync_badAuth(t *testing.T) {
|
|
t.Parallel()
|
|
srv := httptest.NewServer(agentserver.New(agentserver.Config{
|
|
Secret: "right",
|
|
SpeakerID: "sp-1",
|
|
ControlPlaneURL: "http://127.0.0.1:1",
|
|
NodeToken: "tok",
|
|
PubKeyB64: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
|
|
ExtractDir: t.TempDir(),
|
|
}).Handler())
|
|
defer srv.Close()
|
|
|
|
req, _ := http.NewRequest(http.MethodPost, srv.URL+"/v1/agent/sync", strings.NewReader("{}"))
|
|
req.Header.Set("Authorization", "Bearer wrong")
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusUnauthorized {
|
|
t.Fatalf("want 401, got %d", resp.StatusCode)
|
|
}
|
|
}
|