github.com/lazyboychen7/engine@v17.12.1-ce-rc2+incompatible/builder/dockerfile/buildargs_test.go (about) 1 package dockerfile 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func strPtr(source string) *string { 11 return &source 12 } 13 14 func TestGetAllAllowed(t *testing.T) { 15 buildArgs := newBuildArgs(map[string]*string{ 16 "ArgNotUsedInDockerfile": strPtr("fromopt1"), 17 "ArgOverriddenByOptions": strPtr("fromopt2"), 18 "ArgNoDefaultInDockerfileFromOptions": strPtr("fromopt3"), 19 "HTTP_PROXY": strPtr("theproxy"), 20 }) 21 22 buildArgs.AddMetaArg("ArgFromMeta", strPtr("frommeta1")) 23 buildArgs.AddMetaArg("ArgFromMetaOverridden", strPtr("frommeta2")) 24 buildArgs.AddMetaArg("ArgFromMetaNotUsed", strPtr("frommeta3")) 25 26 buildArgs.AddArg("ArgOverriddenByOptions", strPtr("fromdockerfile2")) 27 buildArgs.AddArg("ArgWithDefaultInDockerfile", strPtr("fromdockerfile1")) 28 buildArgs.AddArg("ArgNoDefaultInDockerfile", nil) 29 buildArgs.AddArg("ArgNoDefaultInDockerfileFromOptions", nil) 30 buildArgs.AddArg("ArgFromMeta", nil) 31 buildArgs.AddArg("ArgFromMetaOverridden", strPtr("fromdockerfile3")) 32 33 all := buildArgs.GetAllAllowed() 34 expected := map[string]string{ 35 "HTTP_PROXY": "theproxy", 36 "ArgOverriddenByOptions": "fromopt2", 37 "ArgWithDefaultInDockerfile": "fromdockerfile1", 38 "ArgNoDefaultInDockerfileFromOptions": "fromopt3", 39 "ArgFromMeta": "frommeta1", 40 "ArgFromMetaOverridden": "fromdockerfile3", 41 } 42 assert.Equal(t, expected, all) 43 } 44 45 func TestGetAllMeta(t *testing.T) { 46 buildArgs := newBuildArgs(map[string]*string{ 47 "ArgNotUsedInDockerfile": strPtr("fromopt1"), 48 "ArgOverriddenByOptions": strPtr("fromopt2"), 49 "ArgNoDefaultInMetaFromOptions": strPtr("fromopt3"), 50 "HTTP_PROXY": strPtr("theproxy"), 51 }) 52 53 buildArgs.AddMetaArg("ArgFromMeta", strPtr("frommeta1")) 54 buildArgs.AddMetaArg("ArgOverriddenByOptions", strPtr("frommeta2")) 55 buildArgs.AddMetaArg("ArgNoDefaultInMetaFromOptions", nil) 56 57 all := buildArgs.GetAllMeta() 58 expected := map[string]string{ 59 "HTTP_PROXY": "theproxy", 60 "ArgFromMeta": "frommeta1", 61 "ArgOverriddenByOptions": "fromopt2", 62 "ArgNoDefaultInMetaFromOptions": "fromopt3", 63 } 64 assert.Equal(t, expected, all) 65 } 66 67 func TestWarnOnUnusedBuildArgs(t *testing.T) { 68 buildArgs := newBuildArgs(map[string]*string{ 69 "ThisArgIsUsed": strPtr("fromopt1"), 70 "ThisArgIsNotUsed": strPtr("fromopt2"), 71 "HTTPS_PROXY": strPtr("referenced builtin"), 72 "HTTP_PROXY": strPtr("unreferenced builtin"), 73 }) 74 buildArgs.AddArg("ThisArgIsUsed", nil) 75 buildArgs.AddArg("HTTPS_PROXY", nil) 76 77 buffer := new(bytes.Buffer) 78 buildArgs.WarnOnUnusedBuildArgs(buffer) 79 out := buffer.String() 80 assert.NotContains(t, out, "ThisArgIsUsed") 81 assert.NotContains(t, out, "HTTPS_PROXY") 82 assert.NotContains(t, out, "HTTP_PROXY") 83 assert.Contains(t, out, "ThisArgIsNotUsed") 84 } 85 86 func TestIsUnreferencedBuiltin(t *testing.T) { 87 buildArgs := newBuildArgs(map[string]*string{ 88 "ThisArgIsUsed": strPtr("fromopt1"), 89 "ThisArgIsNotUsed": strPtr("fromopt2"), 90 "HTTPS_PROXY": strPtr("referenced builtin"), 91 "HTTP_PROXY": strPtr("unreferenced builtin"), 92 }) 93 buildArgs.AddArg("ThisArgIsUsed", nil) 94 buildArgs.AddArg("HTTPS_PROXY", nil) 95 96 assert.True(t, buildArgs.IsReferencedOrNotBuiltin("ThisArgIsUsed")) 97 assert.True(t, buildArgs.IsReferencedOrNotBuiltin("ThisArgIsNotUsed")) 98 assert.True(t, buildArgs.IsReferencedOrNotBuiltin("HTTPS_PROXY")) 99 assert.False(t, buildArgs.IsReferencedOrNotBuiltin("HTTP_PROXY")) 100 }