mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package buildflags
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/docker/buildx/controller/pb"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
	"github.com/zclconf/go-cty/cty"
 | 
						|
)
 | 
						|
 | 
						|
func TestCacheOptions_DerivedVars(t *testing.T) {
 | 
						|
	t.Setenv("ACTIONS_RUNTIME_TOKEN", "sensitive_token")
 | 
						|
	t.Setenv("ACTIONS_CACHE_URL", "https://cache.github.com")
 | 
						|
	t.Setenv("AWS_ACCESS_KEY_ID", "definitely_dont_look_here")
 | 
						|
	t.Setenv("AWS_SECRET_ACCESS_KEY", "hackers_please_dont_steal")
 | 
						|
	t.Setenv("AWS_SESSION_TOKEN", "not_a_mitm_attack")
 | 
						|
 | 
						|
	cacheFrom, err := ParseCacheEntry([]string{"type=gha", "type=s3,region=us-west-2,bucket=my_bucket,name=my_image"})
 | 
						|
	require.NoError(t, err)
 | 
						|
	require.Equal(t, []*pb.CacheOptionsEntry{
 | 
						|
		{
 | 
						|
			Type: "gha",
 | 
						|
			Attrs: map[string]string{
 | 
						|
				"token": "sensitive_token",
 | 
						|
				"url":   "https://cache.github.com",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			Type: "s3",
 | 
						|
			Attrs: map[string]string{
 | 
						|
				"region":            "us-west-2",
 | 
						|
				"bucket":            "my_bucket",
 | 
						|
				"name":              "my_image",
 | 
						|
				"access_key_id":     "definitely_dont_look_here",
 | 
						|
				"secret_access_key": "hackers_please_dont_steal",
 | 
						|
				"session_token":     "not_a_mitm_attack",
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}, cacheFrom.ToPB())
 | 
						|
}
 | 
						|
 | 
						|
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)
 | 
						|
}
 |