Files

55 lines
1.4 KiB
Go

package io
import (
"io"
"log/slog"
"net/http/httptest"
"net/url"
"testing"
"git.yeij.top/AskaEth/Cyrene_v2/internal/config"
"git.yeij.top/AskaEth/Cyrene_v2/internal/logger"
"git.yeij.top/AskaEth/Cyrene_v2/pkg/plugins/sdk"
)
// silentLogger is the base logger used by test fixtures so that expected
// security-denial WARN records are not dumped into the test output.
func silentLogger() *slog.Logger {
return logger.New(logger.Options{Out: io.Discard})
}
// buildTools builds a tool set over cfg with a silent logger, applying opts on
// top (caller options win over the default discard logger).
func buildTools(t *testing.T, cfg *config.Config, opts ...Option) []sdk.Tool {
t.Helper()
all := append([]Option{WithLogger(silentLogger())}, opts...)
set, err := New(cfg, all...)
if err != nil {
t.Fatalf("New: %v", err)
}
return set
}
// findTool returns the tool with the given name from a set, failing the test
// when it is absent.
func findTool(t *testing.T, set []sdk.Tool, name string) sdk.Tool {
t.Helper()
for _, tool := range set {
if tool.Name() == name {
return tool
}
}
t.Fatalf("tool %q not found in set", name)
return nil
}
// serverHost returns the bare host (no port, no brackets) of a test server, the
// value to put on the SSRF allowlist so the tools may reach it.
func serverHost(srv *httptest.Server) string {
u, err := url.Parse(srv.URL)
if err != nil {
return ""
}
return u.Hostname()
}