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