Removes all references to the controller and moves the remaining sections of code to other packages. Processes has been moved to monitor where it is used and the data structs have been removed so buildflags is used directly. The controller build function has been moved to the commands package. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
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)
|
|
}
|