api/controller/cleanup_reference_writer_test.go
Rama main · réplica de lectura del repositorio original.
package controller
import (
"context"
"net/http/httptest"
"path/filepath"
"strings"
"testing"
"github.com/go-chi/chi"
"github.com/goodrain/rainbond/api/middleware"
"github.com/goodrain/rainbond/db/model"
guard "github.com/goodrain/rainbond/pkg/cleanup"
"github.com/jinzhu/gorm"
)
func TestConsoleWriterAnnouncementRequiresAuthenticationAndObservedIdentity(t *testing.T) {
database, err := gorm.Open("sqlite3", filepath.Join(t.TempDir(), "console.db"))
if err != nil {
t.Fatal(err)
}
defer database.Close()
database.LogMode(false)
if err := database.AutoMigrate(&model.CleanupReferenceWriter{}).Error; err != nil {
t.Fatal(err)
}
calls := 0
h := &CleanupCoordinationHandler{database: func() *gorm.DB { return database }, inspectConsoleWriter: func(ctx context.Context, pod, uid string) (guard.ReferenceWriter, error) {
calls++
return guard.ReferenceWriter{Namespace: "system", PodName: pod, PodUID: uid, ContainerName: "rbd-app-ui", ContainerID: "containerd://observed", ImageID: "observed-image", Role: "console", Protocol: guard.ReferenceWriterProtocol}, nil
}}
router := chi.NewRouter()
router.Use(middleware.CleanupIdentity)
router.Post("/reference-writers/console", h.RegisterConsoleReferenceWriter)
t.Setenv("TOKEN", "isolated-test-credential")
invoke := func(auth, body string) int {
request := httptest.NewRequest("POST", "/reference-writers/console", strings.NewReader(body))
request.Header.Set("Authorization", auth)
response := httptest.NewRecorder()
router.ServeHTTP(response, request)
return response.Code
}
valid := `{"pod":"console-pod","pod_uid":"pod-uid","protocol":"registry-reference-v1"}`
if invoke("", valid) == 200 || calls != 0 {
t.Fatal("unauthenticated announcement")
}
for _, body := range []string{`{"pod":"console-pod","pod_uid":"pod-uid","protocol":"old"}`, `{"pod":"console-pod","pod_uid":"pod-uid","protocol":"registry-reference-v1","image_id":"caller-claim"}`} {
if invoke("Token isolated-test-credential", body) == 200 || calls != 0 {
t.Fatal("unsupported or claimed identity accepted")
}
}
if status := invoke("Token isolated-test-credential", valid); status != 200 || calls != 1 {
t.Fatal(status, calls)
}
var records []model.CleanupReferenceWriter
if err := database.Find(&records).Error; err != nil || len(records) != 1 || records[0].ImageID != "observed-image" || records[0].Role != "console" {
t.Fatal("wrong observed identity", err)
}
if database.HasTable(&model.CleanupStorage{}) {
t.Fatal("announcement created a storage")
}
}