65 lines
2.7 KiB
Go
65 lines
2.7 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/notarius/internal/core/artifacts"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/core/config"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/contracts"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/pipeline"
|
|
)
|
|
|
|
func TestOversizedNPCRegistryFailsBeforeRuntimeAndCheckpointConstruction(t *testing.T) {
|
|
components := productionTestComponents(t)
|
|
npcPath := filepath.Join(t.TempDir(), "npcs.json")
|
|
if err := os.WriteFile(npcPath, []byte(strings.Repeat("x", 1048577)), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkpointRoot := filepath.Join(t.TempDir(), "checkpoints")
|
|
content := string(readRepositoryFile(t, "examples", "dnd-npc-spell-sequential.config.yml"))
|
|
content = replaceRequiredOnce(t, content, " extract: dnd/spells", " extract:\n module: dnd/spells\n references:\n npcs: "+npcPath)
|
|
content = replaceRequiredOnce(t, content, " enabled: false\n directory: \"\"", " enabled: true\n directory: "+checkpointRoot)
|
|
configPath := filepath.Join(t.TempDir(), "config.yml")
|
|
if err := os.WriteFile(configPath, []byte(content), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
llmConstructed := false
|
|
chunkStoreConstructed := false
|
|
options := Options{
|
|
Catalog: catalogFromRegistries(components.registries),
|
|
Registries: components.registries,
|
|
LLMClientFactory: func(context.Context, config.Config, string) (contracts.StructuredLLMClient, []artifacts.LLMProfileManifest, error) {
|
|
llmConstructed = true
|
|
return nil, nil, errors.New("LLM client must not be constructed")
|
|
},
|
|
ChunkPlanStoreFactory: func(string) (pipeline.ChunkPlanStore, error) {
|
|
chunkStoreConstructed = true
|
|
return nil, errors.New("chunk-plan store must not be constructed")
|
|
},
|
|
}
|
|
var stdout, stderr strings.Builder
|
|
code := RunWithOptions([]string{
|
|
"run", "dnd-spells", "--config", configPath,
|
|
"--input", repositoryPath("examples", "seriatim-minimal-transcript.json"),
|
|
"--chunk_cache", "bypass", "--output-dir", t.TempDir(),
|
|
}, &stdout, &stderr, options)
|
|
for _, fragment := range []string{`pipeline "dnd-spells"`, `reference slot "npcs"`, "1048577 bytes", "limit 1048576"} {
|
|
if code == 0 || !strings.Contains(stderr.String(), fragment) {
|
|
t.Fatalf("RunWithOptions() code = %d stderr = %q, want context fragment %q", code, stderr.String(), fragment)
|
|
}
|
|
}
|
|
if llmConstructed || chunkStoreConstructed {
|
|
t.Fatalf("runtime construction = LLM %t, chunk store %t; want materialization failure first", llmConstructed, chunkStoreConstructed)
|
|
}
|
|
if _, err := os.Stat(checkpointRoot); !errors.Is(err, fs.ErrNotExist) {
|
|
t.Fatalf("checkpoint root stat error = %v, want no checkpoint allocation", err)
|
|
}
|
|
}
|