36 lines
1.0 KiB
Go
36 lines
1.0 KiB
Go
package configkit
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/engine"
|
|
)
|
|
|
|
func TestWrappedSourcesPreserveEngineOwnership(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
type config struct {
|
|
Value string `yaml:"value"`
|
|
}
|
|
data := []byte("value: retained\n")
|
|
source := Bytes("snapshot.yml", data)
|
|
data[7] = 'X'
|
|
result, err := engine.Load[config](source.toEngine(), engine.SecretBinding{})
|
|
if err != nil || result.Config.Value != "retained" {
|
|
t.Fatalf("snapshotted source = %#v, %v", result, err)
|
|
}
|
|
|
|
readerSource := Reader("reader.yml", strings.NewReader("value: once\n"))
|
|
first := readerSource
|
|
if _, err := engine.Load[config](first.toEngine(), engine.SecretBinding{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, err = engine.Load[config](readerSource.toEngine(), engine.SecretBinding{})
|
|
var loadError *engine.LoadError
|
|
if !errors.As(err, &loadError) || len(loadError.Diagnostics()) != 1 || loadError.Diagnostics()[0].Code != engine.CodeSourceReaderUsed {
|
|
t.Fatalf("copied reader source error = %#v", err)
|
|
}
|
|
}
|