mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package commands
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
func TestTruncPlatforms(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name         string
 | 
						|
		platforms    []string
 | 
						|
		max          int
 | 
						|
		expectedList map[string][]string
 | 
						|
		expectedOut  string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name:      "arm64 preferred and emulated",
 | 
						|
			platforms: []string{"linux/arm64*", "linux/amd64", "linux/amd64/v2", "linux/riscv64", "linux/ppc64le", "linux/s390x", "linux/386", "linux/mips64le", "linux/mips64", "linux/arm/v7", "linux/arm/v6"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/amd64": {
 | 
						|
					"linux/amd64",
 | 
						|
					"linux/amd64/v2",
 | 
						|
				},
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v7",
 | 
						|
					"linux/arm/v6",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64*",
 | 
						|
				},
 | 
						|
				"linux/ppc64le": {
 | 
						|
					"linux/ppc64le",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/amd64 (+2), linux/arm64*, linux/arm (+2), linux/ppc64le, (5 more)",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "riscv64 preferred only",
 | 
						|
			platforms: []string{"linux/riscv64*"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/riscv64": {
 | 
						|
					"linux/riscv64*",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/riscv64*",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "amd64 no preferred and emulated",
 | 
						|
			platforms: []string{"linux/amd64", "linux/amd64/v2", "linux/amd64/v3", "linux/386", "linux/arm64", "linux/riscv64", "linux/ppc64le", "linux/s390x", "linux/mips64le", "linux/mips64", "linux/arm/v7", "linux/arm/v6"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/amd64": {
 | 
						|
					"linux/amd64",
 | 
						|
					"linux/amd64/v2",
 | 
						|
					"linux/amd64/v3",
 | 
						|
				},
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v7",
 | 
						|
					"linux/arm/v6",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64",
 | 
						|
				},
 | 
						|
				"linux/ppc64le": {
 | 
						|
					"linux/ppc64le",
 | 
						|
				}},
 | 
						|
			expectedOut: "linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (5 more)",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "amd64 no preferred",
 | 
						|
			platforms: []string{"linux/amd64", "linux/386"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/386": {
 | 
						|
					"linux/386",
 | 
						|
				},
 | 
						|
				"linux/amd64": {
 | 
						|
					"linux/amd64",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/amd64, linux/386",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "arm64 no preferred",
 | 
						|
			platforms: []string{"linux/arm64", "linux/arm/v7", "linux/arm/v6"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v7",
 | 
						|
					"linux/arm/v6",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/arm64, linux/arm (+2)",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "all preferred",
 | 
						|
			platforms: []string{"darwin/arm64*", "linux/arm64*", "linux/arm/v5*", "linux/arm/v6*", "linux/arm/v7*", "windows/arm64*"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"darwin/arm64": {
 | 
						|
					"darwin/arm64*",
 | 
						|
				},
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v5*",
 | 
						|
					"linux/arm/v6*",
 | 
						|
					"linux/arm/v7*",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64*",
 | 
						|
				},
 | 
						|
				"windows/arm64": {
 | 
						|
					"windows/arm64*",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/arm64*, linux/arm* (+3), darwin/arm64*, windows/arm64*",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "no major preferred",
 | 
						|
			platforms: []string{"linux/amd64/v2*", "linux/arm/v6*", "linux/mips64le*", "linux/amd64", "linux/amd64/v3", "linux/386", "linux/arm64", "linux/riscv64", "linux/ppc64le", "linux/s390x", "linux/mips64", "linux/arm/v7"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/amd64": {
 | 
						|
					"linux/amd64/v2*",
 | 
						|
					"linux/amd64",
 | 
						|
					"linux/amd64/v3",
 | 
						|
				},
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v6*",
 | 
						|
					"linux/arm/v7",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64",
 | 
						|
				},
 | 
						|
				"linux/ppc64le": {
 | 
						|
					"linux/ppc64le",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/amd64* (+3), linux/arm64, linux/arm* (+2), linux/ppc64le, (5 more)",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:      "no major with multiple variants",
 | 
						|
			platforms: []string{"linux/arm64", "linux/arm/v7", "linux/arm/v6", "linux/mips64le/softfloat", "linux/mips64le/hardfloat"},
 | 
						|
			max:       4,
 | 
						|
			expectedList: map[string][]string{
 | 
						|
				"linux/arm": {
 | 
						|
					"linux/arm/v7",
 | 
						|
					"linux/arm/v6",
 | 
						|
				},
 | 
						|
				"linux/arm64": {
 | 
						|
					"linux/arm64",
 | 
						|
				},
 | 
						|
				"linux/mips64le": {
 | 
						|
					"linux/mips64le/softfloat",
 | 
						|
					"linux/mips64le/hardfloat",
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedOut: "linux/arm64, linux/arm (+2), linux/mips64le (+2)",
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		tt := tt
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			tpfs := truncPlatforms(tt.platforms, tt.max)
 | 
						|
			assert.Equal(t, tt.expectedList, tpfs.List())
 | 
						|
			assert.Equal(t, tt.expectedOut, tpfs.String())
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |