Combine final metadata traversal
This commit is contained in:
@@ -109,10 +109,9 @@ func (m Metadata) hasHistoricalPath(path Path) bool {
|
||||
}
|
||||
|
||||
func finalizeMetadataPaths(m *Metadata, final *document.Node, applications []historyApplication, earlier ...*document.Node) {
|
||||
m.effectivePaths = effectivePathIndex(final)
|
||||
m.effectivePaths = make(map[string]Path)
|
||||
m.historicalPaths = make(map[string][]Path)
|
||||
add := func(path Path, _ *document.Node) {
|
||||
pointer := path.String()
|
||||
addHistorical := func(path Path, pointer string) {
|
||||
for _, prior := range m.historicalPaths[pointer] {
|
||||
if matchesPathShape(path, prior) {
|
||||
return
|
||||
@@ -120,7 +119,14 @@ func finalizeMetadataPaths(m *Metadata, final *document.Node, applications []his
|
||||
}
|
||||
m.historicalPaths[pointer] = append(m.historicalPaths[pointer], path.clone())
|
||||
}
|
||||
walkDocument(final, Path{}, add)
|
||||
walkDocument(final, Path{}, func(path Path, _ *document.Node) {
|
||||
pointer := path.String()
|
||||
m.effectivePaths[pointer] = path.clone()
|
||||
addHistorical(path, pointer)
|
||||
})
|
||||
add := func(path Path, _ *document.Node) {
|
||||
addHistorical(path, path.String())
|
||||
}
|
||||
for _, tree := range earlier {
|
||||
walkDocument(tree, Path{}, add)
|
||||
}
|
||||
|
||||
@@ -47,6 +47,60 @@ func TestMetadataHistoricalPaths(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMetadataPathIndexesOwnIndependentSegments(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
final := parseDocumentForDecode(t, "service: {workers: [1]}\n")
|
||||
var metadata Metadata
|
||||
finalizeMetadataPaths(&metadata, final, nil)
|
||||
pointer := "/service/workers/0"
|
||||
effective := metadata.effectivePaths[pointer]
|
||||
historical := metadata.historicalPaths[pointer]
|
||||
if effective.String() != pointer || len(historical) != 1 || historical[0].String() != pointer {
|
||||
t.Fatalf("path indexes = %#v, %#v", effective, historical)
|
||||
}
|
||||
|
||||
effective.segments[0].key = "effective"
|
||||
if historical[0].String() != pointer {
|
||||
t.Fatal("effective path mutation changed historical path")
|
||||
}
|
||||
historical[0].segments[2].index = 1
|
||||
if effective.String() != "/effective/workers/0" {
|
||||
t.Fatal("historical path mutation changed effective path")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMetadataPathIndexesRetainDistinctHistoricalShapes(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
final := parseDocumentForDecode(t, "shape: [replacement]\n")
|
||||
earlier := parseDocumentForDecode(t, "shape: {'0': base}\n")
|
||||
var metadata Metadata
|
||||
// Repeated trees must not add duplicate shapes to the historical index.
|
||||
finalizeMetadataPaths(&metadata, final, nil, earlier, earlier, final)
|
||||
keyPath := Keys("shape", "0")
|
||||
indexPath := Keys("shape").Index(0)
|
||||
pointer := indexPath.String()
|
||||
if !reflect.DeepEqual(metadata.effectivePaths[pointer], indexPath) {
|
||||
t.Fatal("effective index does not reflect the final sequence")
|
||||
}
|
||||
historical := metadata.historicalPaths[pointer]
|
||||
if len(historical) != 2 {
|
||||
t.Fatalf("historical shapes = %#v, want one key and one index", historical)
|
||||
}
|
||||
for _, want := range []Path{keyPath, indexPath} {
|
||||
found := false
|
||||
for _, path := range historical {
|
||||
if reflect.DeepEqual(path, want) {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
if !found || !metadata.hasHistoricalPath(want) {
|
||||
t.Fatalf("historical index lost shape %#v", want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestHistoricalPathsExposeHiddenBaseOwnershipWithoutResolvingBaseSecrets(t *testing.T) {
|
||||
t.Setenv("CONFIGKIT_HISTORY_UNUSED_PROD_KEY", "")
|
||||
t.Setenv("CONFIGKIT_HISTORY_TEST_KEY", "synthetic-test-key")
|
||||
|
||||
Reference in New Issue
Block a user