52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package customer
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestRemoteControllerClientAuthAndCreate(t *testing.T) {
|
|
const secret = "0123456789abcdef0123456789abcdef"
|
|
seen := false
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Header.Get("Authorization") != "Bearer "+secret {
|
|
t.Fatalf("authorization = %q", r.Header.Get("Authorization"))
|
|
}
|
|
switch r.URL.Path {
|
|
case "/internal/health":
|
|
w.WriteHeader(http.StatusOK)
|
|
case "/internal/workers":
|
|
seen = true
|
|
var cfg WorkerContainerConfig
|
|
if err := json.NewDecoder(r.Body).Decode(&cfg); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if cfg.WorkerID != "wrk_test" || cfg.Image != "worker:test" {
|
|
t.Fatalf("unexpected cfg: %+v", cfg)
|
|
}
|
|
_ = json.NewEncoder(w).Encode(map[string]string{"id": "container_123"})
|
|
default:
|
|
http.NotFound(w, r)
|
|
}
|
|
}))
|
|
defer ts.Close()
|
|
|
|
c, err := NewRemoteControllerClient(ts.URL, secret)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := c.Ping(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
id, err := c.CreateWorker(context.Background(), WorkerContainerConfig{WorkerID: "wrk_test", Image: "worker:test"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if id != "container_123" || !seen {
|
|
t.Fatalf("id=%q seen=%v", id, seen)
|
|
}
|
|
}
|