Ctrl K
ComunidadGuías…

api/controller/cleanup_reference_writer_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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")
	}
}