Files
buildx/util/buildflags/policy_test.go
T
2026-01-14 09:34:23 -08:00

95 lines
2.6 KiB
Go

package buildflags
import (
"os"
"path/filepath"
"testing"
"github.com/docker/buildx/policy"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/require"
"github.com/zclconf/go-cty/cty"
)
func TestPolicyConfigs_FromCtyValue(t *testing.T) {
policyDir := t.TempDir()
policyPath := filepath.Join(policyDir, "policy.rego")
policyData := []byte("package docker\n")
require.NoError(t, os.WriteFile(policyPath, policyData, 0o600))
in := cty.TupleVal([]cty.Value{
cty.ObjectVal(map[string]cty.Value{
"filename": cty.StringVal(policyPath),
"reset": cty.BoolVal(true),
"strict": cty.BoolVal(true),
"log-level": cty.StringVal("warn"),
}),
cty.StringVal("filename=" + policyPath + ",disabled=true"),
})
var actual PolicyConfigs
err := actual.FromCtyValue(in, nil)
require.NoError(t, err)
require.Len(t, actual, 2)
require.Equal(t, policyPath, actual[0].Files[0].Filename)
require.Equal(t, policyData, actual[0].Files[0].Data)
require.True(t, actual[0].Reset)
require.NotNil(t, actual[0].Strict)
require.True(t, *actual[0].Strict)
require.NotNil(t, actual[0].LogLevel)
require.Equal(t, logrus.WarnLevel, *actual[0].LogLevel)
require.Equal(t, policyPath, actual[1].Files[0].Filename)
require.Equal(t, policyData, actual[1].Files[0].Data)
require.True(t, actual[1].Disabled)
}
func TestPolicyConfigs_ToCtyValue(t *testing.T) {
lvl := logrus.InfoLevel
strict := true
in := PolicyConfigs{
{
Files: []policy.File{{Filename: "a.rego"}},
Reset: true,
},
{
Files: []policy.File{{Filename: "b.rego"}},
Disabled: true,
Strict: &strict,
LogLevel: &lvl,
},
}
actual := in.ToCtyValue()
expected := cty.ListVal([]cty.Value{
cty.MapVal(map[string]cty.Value{
"filename": cty.StringVal("a.rego"),
"reset": cty.StringVal("true"),
}),
cty.MapVal(map[string]cty.Value{
"filename": cty.StringVal("b.rego"),
"disabled": cty.StringVal("true"),
"strict": cty.StringVal("true"),
"log-level": cty.StringVal("info"),
}),
})
result := actual.Equals(expected)
require.True(t, result.True())
}
func TestPolicyConfig_FromCtyValue(t *testing.T) {
policyDir := t.TempDir()
policyPath := filepath.Join(policyDir, "policy.rego")
policyData := []byte("package docker\n")
require.NoError(t, os.WriteFile(policyPath, policyData, 0o600))
var actual PolicyConfig
err := actual.FromCtyValue(cty.StringVal("filename="+policyPath+",disabled=true"), nil)
require.NoError(t, err)
require.Equal(t, policyPath, actual.Files[0].Filename)
require.Equal(t, policyData, actual.Files[0].Data)
require.True(t, actual.Disabled)
}