55 lines
1.4 KiB
Go
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()
|
|
}
|