Include test cases of different hcl files

Signed-off-by: Patrick Van Stee <patrick@vanstee.me>
This commit is contained in:
Patrick Van Stee 2020-04-15 21:00:20 -04:00
parent f10d8dab5e
commit abed97cf33

View File

@ -8,65 +8,156 @@ import (
) )
func TestParseHCL(t *testing.T) { func TestParseHCL(t *testing.T) {
os.Setenv("BUILD_NUMBER", "456") t.Parallel()
var dt = []byte(` t.Run("Basic", func(t *testing.T) {
variable "BUILD_NUMBER" { dt := []byte(`
default = "123" group "default" {
} targets = ["db", "webapp"]
group "default" {
targets = ["db", "webapp"]
}
target "db" {
context = "./db"
tags = ["docker.io/tonistiigi/db"]
}
target "webapp" {
context = "./dir"
dockerfile = "Dockerfile-alternate"
args = {
buildno = "${BUILD_NUMBER}"
} }
}
target "cross" { target "db" {
platforms = [ context = "./db"
"linux/amd64", tags = ["docker.io/tonistiigi/db"]
"linux/arm64"
]
}
target "webapp-plus" {
inherits = ["webapp", "cross"]
args = {
IAMCROSS = "true"
} }
}
`)
c, err := ParseHCL(dt, "docker-bake.hcl") target "webapp" {
require.NoError(t, err) context = "./dir"
dockerfile = "Dockerfile-alternate"
args = {
buildno = "123"
}
}
require.Equal(t, 1, len(c.Groups)) target "cross" {
require.Equal(t, "default", c.Groups[0].Name) platforms = [
require.Equal(t, []string{"db", "webapp"}, c.Groups[0].Targets) "linux/amd64",
"linux/arm64"
]
}
require.Equal(t, 4, len(c.Targets)) target "webapp-plus" {
require.Equal(t, c.Targets[0].Name, "db") inherits = ["webapp", "cross"]
require.Equal(t, "./db", *c.Targets[0].Context) args = {
IAMCROSS = "true"
}
}
`)
require.Equal(t, c.Targets[1].Name, "webapp") c, err := ParseHCL(dt, "docker-bake.hcl")
require.Equal(t, 1, len(c.Targets[1].Args)) require.NoError(t, err)
require.Equal(t, "456", c.Targets[1].Args["buildno"])
require.Equal(t, c.Targets[2].Name, "cross") require.Equal(t, 1, len(c.Groups))
require.Equal(t, 2, len(c.Targets[2].Platforms)) require.Equal(t, "default", c.Groups[0].Name)
require.Equal(t, []string{"linux/amd64", "linux/arm64"}, c.Targets[2].Platforms) require.Equal(t, []string{"db", "webapp"}, c.Groups[0].Targets)
require.Equal(t, c.Targets[3].Name, "webapp-plus") require.Equal(t, 4, len(c.Targets))
require.Equal(t, 1, len(c.Targets[3].Args)) require.Equal(t, c.Targets[0].Name, "db")
require.Equal(t, map[string]string{"IAMCROSS": "true"}, c.Targets[3].Args) require.Equal(t, "./db", *c.Targets[0].Context)
require.Equal(t, c.Targets[1].Name, "webapp")
require.Equal(t, 1, len(c.Targets[1].Args))
require.Equal(t, "123", c.Targets[1].Args["buildno"])
require.Equal(t, c.Targets[2].Name, "cross")
require.Equal(t, 2, len(c.Targets[2].Platforms))
require.Equal(t, []string{"linux/amd64", "linux/arm64"}, c.Targets[2].Platforms)
require.Equal(t, c.Targets[3].Name, "webapp-plus")
require.Equal(t, 1, len(c.Targets[3].Args))
require.Equal(t, map[string]string{"IAMCROSS": "true"}, c.Targets[3].Args)
})
t.Run("WithFunctions", func(t *testing.T) {
dt := []byte(`
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${add(123, 1)}"
}
}
`)
c, err := ParseHCL(dt, "docker-bake.hcl")
require.NoError(t, err)
require.Equal(t, 1, len(c.Groups))
require.Equal(t, "default", c.Groups[0].Name)
require.Equal(t, []string{"webapp"}, c.Groups[0].Targets)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, c.Targets[0].Name, "webapp")
require.Equal(t, "124", c.Targets[0].Args["buildno"])
})
t.Run("WithVariables", func(t *testing.T) {
dt := []byte(`
variable "BUILD_NUMBER" {
default = "123"
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${BUILD_NUMBER}"
}
}
`)
c, err := ParseHCL(dt, "docker-bake.hcl")
require.NoError(t, err)
require.Equal(t, 1, len(c.Groups))
require.Equal(t, "default", c.Groups[0].Name)
require.Equal(t, []string{"webapp"}, c.Groups[0].Targets)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, c.Targets[0].Name, "webapp")
require.Equal(t, "123", c.Targets[0].Args["buildno"])
os.Setenv("BUILD_NUMBER", "456")
c, err = ParseHCL(dt, "docker-bake.hcl")
require.NoError(t, err)
require.Equal(t, 1, len(c.Groups))
require.Equal(t, "default", c.Groups[0].Name)
require.Equal(t, []string{"webapp"}, c.Groups[0].Targets)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, c.Targets[0].Name, "webapp")
require.Equal(t, "456", c.Targets[0].Args["buildno"])
})
t.Run("WithIncorrectVariables", func(t *testing.T) {
dt := []byte(`
variable "DEFAULT_BUILD_NUMBER" {
default = "1"
}
variable "BUILD_NUMBER" {
default = "${DEFAULT_BUILD_NUMBER}"
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${BUILD_NUMBER}"
}
}
`)
_, err := ParseHCL(dt, "docker-bake.hcl")
require.Error(t, err)
require.Contains(t, err.Error(), "docker-bake.hcl:7,17-37: Variables not allowed; Variables may not be used here.")
})
} }