9b3a33d7b9
- introduce internal/router/scheduler to decouple routing, swapping and queuing into interface contracts. - introduce a new `routing` configuration section that supersedes `matrix` and `group` while maintaining backwards compatibility - add FIFO scheduler with prioritized queuing - add internal/router/design.md as developer documentation on implementing new schedulers and routers Fixes #797
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/google/jsonschema-go/jsonschema"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// TestConfig_ExampleMatchesSchema validates that config.example.yaml conforms to
|
|
// config-schema.json. Both files live at the repository root.
|
|
func TestConfig_ExampleMatchesSchema(t *testing.T) {
|
|
const (
|
|
schemaPath = "../../config-schema.json"
|
|
examplePath = "../../config.example.yaml"
|
|
)
|
|
|
|
schemaBytes, err := os.ReadFile(schemaPath)
|
|
if err != nil {
|
|
t.Fatalf("reading %s: %v", schemaPath, err)
|
|
}
|
|
|
|
var schema jsonschema.Schema
|
|
if err := json.Unmarshal(schemaBytes, &schema); err != nil {
|
|
t.Fatalf("unmarshalling schema: %v", err)
|
|
}
|
|
|
|
resolved, err := schema.Resolve(&jsonschema.ResolveOptions{
|
|
BaseURI: "https://github.com/mostlygeek/llama-swap/",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("resolving schema: %v", err)
|
|
}
|
|
|
|
exampleBytes, err := os.ReadFile(examplePath)
|
|
if err != nil {
|
|
t.Fatalf("reading %s: %v", examplePath, err)
|
|
}
|
|
|
|
// Convert YAML to a JSON-like value so numbers and keys match what the
|
|
// validator expects.
|
|
var yamlValue any
|
|
if err := yaml.Unmarshal(exampleBytes, &yamlValue); err != nil {
|
|
t.Fatalf("unmarshalling example yaml: %v", err)
|
|
}
|
|
jsonBytes, err := json.Marshal(yamlValue)
|
|
if err != nil {
|
|
t.Fatalf("converting example to json: %v", err)
|
|
}
|
|
var instance any
|
|
if err := json.Unmarshal(jsonBytes, &instance); err != nil {
|
|
t.Fatalf("unmarshalling example json: %v", err)
|
|
}
|
|
|
|
if err := resolved.Validate(instance); err != nil {
|
|
t.Fatalf("config.example.yaml does not match config-schema.json:\n%v", err)
|
|
}
|
|
}
|