Files
act_runner/pkg/model/anchors_test.go
Christopher Homberger 6c827eba95 fix: anchor cyclic detection (#30)
Closes #25

Reviewed-on: https://gitea.com/actions-oss/act-cli/pulls/30
Co-authored-by: Christopher Homberger <christopher.homberger@web.de>
Co-committed-by: Christopher Homberger <christopher.homberger@web.de>
2026-02-02 20:43:49 +00:00

115 lines
1.6 KiB
Go

package model
import (
"testing"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
)
func TestVerifyNilAliasError(t *testing.T) {
var node yaml.Node
err := yaml.Unmarshal([]byte(`
test:
- a
- b
- c`), &node)
*node.Content[0].Content[1].Content[1] = yaml.Node{
Kind: yaml.AliasNode,
}
assert.NoError(t, err)
err = resolveAliases(&node)
assert.Error(t, err)
}
func TestVerifyNoRecursion(t *testing.T) {
table := []struct {
name string
yaml string
yamlErr bool
anchorErr bool
}{
{
name: "no anchors",
yaml: `
a: x
b: y
c: z
`,
yamlErr: false,
anchorErr: false,
},
{
name: "simple anchors",
yaml: `
a: &a x
b: &b y
c: *a
`,
yamlErr: false,
anchorErr: false,
},
{
name: "nested anchors",
yaml: `
a: &a
val: x
b: &b
val: y
c: *a
`,
yamlErr: false,
anchorErr: false,
},
{
name: "circular anchors",
yaml: `
a: &b
ref: *c
b: &c
ref: *b
`,
yamlErr: true,
anchorErr: false,
},
{
name: "self-referencing anchor",
yaml: `
a: &a
ref: *a
`,
yamlErr: false,
anchorErr: true,
},
{
name: "reuse snippet with anchors",
yaml: `
a: &b x
b: &a
ref: *b
c: *a
`,
yamlErr: false,
anchorErr: false,
},
}
for _, tt := range table {
t.Run(tt.name, func(t *testing.T) {
var node yaml.Node
err := yaml.Unmarshal([]byte(tt.yaml), &node)
if tt.yamlErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
err = resolveAliases(&node)
if tt.anchorErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}