mirror of https://github.com/docker/buildx.git
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package buildflags
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
func TestCacheOptions(t *testing.T) {
|
|
t.Run("MarshalJSON", func(t *testing.T) {
|
|
cache := CacheOptions{
|
|
{Type: "registry", Attrs: map[string]string{"ref": "user/app:cache"}},
|
|
{Type: "local", Attrs: map[string]string{"src": "path/to/cache"}},
|
|
}
|
|
|
|
expected := `[{"type":"registry","ref":"user/app:cache"},{"type":"local","src":"path/to/cache"}]`
|
|
actual, err := json.Marshal(cache)
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, expected, string(actual))
|
|
})
|
|
|
|
t.Run("UnmarshalJSON", func(t *testing.T) {
|
|
in := `[{"type":"registry","ref":"user/app:cache"},{"type":"local","src":"path/to/cache"}]`
|
|
|
|
var actual CacheOptions
|
|
err := json.Unmarshal([]byte(in), &actual)
|
|
require.NoError(t, err)
|
|
|
|
expected := CacheOptions{
|
|
{Type: "registry", Attrs: map[string]string{"ref": "user/app:cache"}},
|
|
{Type: "local", Attrs: map[string]string{"src": "path/to/cache"}},
|
|
}
|
|
require.Equal(t, expected, actual)
|
|
})
|
|
|
|
t.Run("FromCtyValue", func(t *testing.T) {
|
|
in := cty.TupleVal([]cty.Value{
|
|
cty.ObjectVal(map[string]cty.Value{
|
|
"type": cty.StringVal("registry"),
|
|
"ref": cty.StringVal("user/app:cache"),
|
|
}),
|
|
cty.StringVal("type=local,src=path/to/cache"),
|
|
})
|
|
|
|
var actual CacheOptions
|
|
err := actual.FromCtyValue(in, nil)
|
|
require.NoError(t, err)
|
|
|
|
expected := CacheOptions{
|
|
{Type: "registry", Attrs: map[string]string{"ref": "user/app:cache"}},
|
|
{Type: "local", Attrs: map[string]string{"src": "path/to/cache"}},
|
|
}
|
|
require.Equal(t, expected, actual)
|
|
})
|
|
|
|
t.Run("ToCtyValue", func(t *testing.T) {
|
|
attests := CacheOptions{
|
|
{Type: "registry", Attrs: map[string]string{"ref": "user/app:cache"}},
|
|
{Type: "local", Attrs: map[string]string{"src": "path/to/cache"}},
|
|
}
|
|
|
|
actual := attests.ToCtyValue()
|
|
expected := cty.ListVal([]cty.Value{
|
|
cty.MapVal(map[string]cty.Value{
|
|
"type": cty.StringVal("registry"),
|
|
"ref": cty.StringVal("user/app:cache"),
|
|
}),
|
|
cty.MapVal(map[string]cty.Value{
|
|
"type": cty.StringVal("local"),
|
|
"src": cty.StringVal("path/to/cache"),
|
|
}),
|
|
})
|
|
|
|
result := actual.Equals(expected)
|
|
require.True(t, result.True())
|
|
})
|
|
}
|
|
|
|
func TestCacheOptions_RefOnlyFormat(t *testing.T) {
|
|
opts, err := ParseCacheEntry([]string{"ref1", "ref2"})
|
|
require.NoError(t, err)
|
|
require.Equal(t, CacheOptions{
|
|
{Type: "registry", Attrs: map[string]string{"ref": "ref1"}},
|
|
{Type: "registry", Attrs: map[string]string{"ref": "ref2"}},
|
|
}, opts)
|
|
}
|