Forward Scriptorium credentials through the shared adapter path
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
configkit "gitea.maximumdirect.net/eric/ConfigKit"
|
||||
)
|
||||
|
||||
func TestSubprocessRunnerRunSuccessBuildsDeterministicArgsAndCapturesLogs(t *testing.T) {
|
||||
@@ -16,6 +18,13 @@ func TestSubprocessRunnerRunSuccessBuildsDeterministicArgsAndCapturesLogs(t *tes
|
||||
t.Setenv("GO_WANT_SCRIPTORIUM_HELPER", "1")
|
||||
t.Setenv("SCRIPTORIUM_HELPER_MODE", "run_success")
|
||||
t.Setenv("OPENAI_KEY_SOURCE", "super-secret")
|
||||
loaded, err := configkit.Load[struct {
|
||||
Credentials []configkit.Secret `yaml:"credentials"`
|
||||
}](configkit.Bytes("test.yml", []byte("credentials: [OPENAI_KEY_SOURCE]\n")))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Setenv("OPENAI_KEY_SOURCE", "changed-after-load")
|
||||
recordPath := filepath.Join(t.TempDir(), "record.json")
|
||||
t.Setenv("SCRIPTORIUM_HELPER_RECORD_PATH", recordPath)
|
||||
|
||||
@@ -34,7 +43,7 @@ func TestSubprocessRunnerRunSuccessBuildsDeterministicArgsAndCapturesLogs(t *tes
|
||||
StderrLogPath: filepath.Join(dir, "logs", "scriptorium.run.stderr.log"),
|
||||
GeneratedConfigPath: filepath.Join(dir, "config", "scriptorium.run.generated.yml"),
|
||||
Timeout: mustParseScriptoriumDuration(t, "2s"),
|
||||
APIKeyEnv: "OPENAI_KEY_SOURCE",
|
||||
Credentials: loaded.Config.Credentials,
|
||||
}
|
||||
writeScriptoriumFile(t, req.InputPaths["transcript"], `{"segments":[]}`)
|
||||
writeScriptoriumFile(t, req.InputPaths["other"], "notes\n")
|
||||
@@ -70,7 +79,6 @@ func TestSubprocessRunnerRunSuccessBuildsDeterministicArgsAndCapturesLogs(t *tes
|
||||
"--input", "transcript=" + req.InputPaths["transcript"],
|
||||
"--var", "campaign_name=Icewind Dale",
|
||||
"--var", "session_id=2026-05-03",
|
||||
"--api-key-env", "OPENAI_KEY_SOURCE",
|
||||
"--timeout", "2s",
|
||||
"--out", req.OutputPath,
|
||||
}
|
||||
@@ -94,13 +102,31 @@ func TestSubprocessRunnerRunExitCodeOneFails(t *testing.T) {
|
||||
t.Setenv("GO_WANT_SCRIPTORIUM_HELPER", "1")
|
||||
t.Setenv("SCRIPTORIUM_HELPER_MODE", "fail_exit1")
|
||||
t.Setenv("SCRIPTORIUM_HELPER_RECORD_PATH", filepath.Join(t.TempDir(), "record.json"))
|
||||
t.Setenv("CUSTOM_PROVIDER_KEY", "synthetic-failure-secret")
|
||||
loaded, loadErr := configkit.Load[struct {
|
||||
Credentials []configkit.Secret `yaml:"credentials"`
|
||||
}](configkit.Bytes("test.yml", []byte("credentials: [CUSTOM_PROVIDER_KEY]\n")))
|
||||
if loadErr != nil {
|
||||
t.Fatal(loadErr)
|
||||
}
|
||||
|
||||
runner := NewSubprocessRunner()
|
||||
req := runReqForTest(t, writeScriptoriumHelperWrapper(t))
|
||||
req.Credentials = loaded.Config.Credentials
|
||||
res, err := runner.RunArtifact(context.Background(), req)
|
||||
if err == nil {
|
||||
t.Fatal("RunArtifact() error = nil, want non-nil")
|
||||
}
|
||||
if strings.Contains(err.Error(), "synthetic-failure-secret") {
|
||||
t.Fatal("failure leaked credential")
|
||||
}
|
||||
data, readErr := os.ReadFile(req.StderrLogPath)
|
||||
if readErr != nil {
|
||||
t.Fatal(readErr)
|
||||
}
|
||||
if strings.Contains(string(data), "synthetic-failure-secret") || !strings.Contains(string(data), "<redacted>") {
|
||||
t.Fatal("failure log did not redact selected credential")
|
||||
}
|
||||
if res.ExitCode != 1 {
|
||||
t.Fatalf("ExitCode = %d, want 1", res.ExitCode)
|
||||
}
|
||||
@@ -245,6 +271,7 @@ func TestScriptoriumSubprocessHelper(t *testing.T) {
|
||||
os.Exit(0)
|
||||
case "fail_exit1":
|
||||
_, _ = os.Stderr.WriteString("scriptorium helper failure\n")
|
||||
_, _ = os.Stderr.WriteString(os.Getenv("CUSTOM_PROVIDER_KEY"))
|
||||
os.Exit(1)
|
||||
case "fail_exit2_with_output":
|
||||
writeScriptoriumHelperFile(outputPath, "validation failed artifact\n")
|
||||
|
||||
Reference in New Issue
Block a user