github.com/sams1990/dockerrepo@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  }