github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/builder/dockerfile/buildargs_test.go (about)

     1  package dockerfile // import "github.com/docker/docker/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  }