Ctrl K
ComunidadGuías…

internal/server/audit_test.go

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

Archivo original ↗Preguntar a KiBot
package restapi

import (
	"bytes"
	"log/slog"
	"net/http"
	"net/http/httptest"
	"strings"
	"testing"

	"github.com/danielmiessler/fabric/internal/core"
	"github.com/danielmiessler/fabric/internal/plugins/db/fsdb"
	"github.com/gin-gonic/gin"
)

func TestAuditLog(t *testing.T) {
	gin.SetMode(gin.TestMode)
	var logs bytes.Buffer
	defer slog.SetDefault(slog.Default())
	slog.SetDefault(slog.New(slog.NewTextHandler(&logs, nil)))

	const key = "synthetic-api-key-0123456789"
	r := newServeEngine(&core.PluginRegistry{Db: fsdb.NewDb(t.TempDir())}, key, nil)
	send := func(method, path, apiKey, body string) {
		req := httptest.NewRequest(method, path, strings.NewReader(body))
		req.Header.Set(APIKeyHeader, apiKey)
		r.ServeHTTP(httptest.NewRecorder(), req)
	}
	send(http.MethodPost, "/patterns/audited", key, "synthetic pattern body")
	send(http.MethodGet, "/patterns/audited", key, "")
	send(http.MethodPost, "/patterns/audited", "wrong-key", "")

	got := logs.String()
	for _, want := range []string{
		`msg="audit: change" method=POST path=/patterns/audited status=200`,
		`msg="API key wrong"`,
	} {
		if !strings.Contains(got, want) {
			t.Errorf("log does not contain %s:\n%s", want, got)
		}
	}
	if n := strings.Count(got, "audit: change"); n != 1 {
		t.Errorf("got %d change events, want 1 (no event for GET or a rejected key):\n%s", n, got)
	}
	if strings.Contains(got, key) || strings.Contains(got, "wrong-key") || strings.Contains(got, "synthetic pattern body") {
		t.Errorf("log contains a key or a body:\n%s", got)
	}
}