Include test cases of different hcl files

Signed-off-by: Patrick Van Stee <patrick@vanstee.me>
pull/192/head
Patrick Van Stee 5 years ago
parent f10d8dab5e
commit abed97cf33

@ -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 "db" { }
context = "./db"
tags = ["docker.io/tonistiigi/db"] target "webapp" {
} context = "./dir"
dockerfile = "Dockerfile-alternate"
target "webapp" { args = {
context = "./dir" buildno = "123"
dockerfile = "Dockerfile-alternate" }
args = {
buildno = "${BUILD_NUMBER}"
} }
}
target "cross" {
target "cross" { platforms = [
platforms = [ "linux/amd64",
"linux/amd64", "linux/arm64"
"linux/arm64" ]
] }
}
target "webapp-plus" {
target "webapp-plus" { inherits = ["webapp", "cross"]
inherits = ["webapp", "cross"] args = {
args = { IAMCROSS = "true"
IAMCROSS = "true" }
} }
} `)
`)
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{"db", "webapp"}, c.Groups[0].Targets)
c, err := ParseHCL(dt, "docker-bake.hcl") require.Equal(t, 4, len(c.Targets))
require.NoError(t, err) require.Equal(t, c.Targets[0].Name, "db")
require.Equal(t, "./db", *c.Targets[0].Context)
require.Equal(t, 1, len(c.Groups)) require.Equal(t, c.Targets[1].Name, "webapp")
require.Equal(t, "default", c.Groups[0].Name) require.Equal(t, 1, len(c.Targets[1].Args))
require.Equal(t, []string{"db", "webapp"}, c.Groups[0].Targets) require.Equal(t, "123", c.Targets[1].Args["buildno"])
require.Equal(t, 4, len(c.Targets)) require.Equal(t, c.Targets[2].Name, "cross")
require.Equal(t, c.Targets[0].Name, "db") require.Equal(t, 2, len(c.Targets[2].Platforms))
require.Equal(t, "./db", *c.Targets[0].Context) require.Equal(t, []string{"linux/amd64", "linux/arm64"}, c.Targets[2].Platforms)
require.Equal(t, c.Targets[1].Name, "webapp") require.Equal(t, c.Targets[3].Name, "webapp-plus")
require.Equal(t, 1, len(c.Targets[1].Args)) require.Equal(t, 1, len(c.Targets[3].Args))
require.Equal(t, "456", c.Targets[1].Args["buildno"]) 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"
}
require.Equal(t, c.Targets[2].Name, "cross") group "default" {
require.Equal(t, 2, len(c.Targets[2].Platforms)) targets = ["webapp"]
require.Equal(t, []string{"linux/amd64", "linux/arm64"}, c.Targets[2].Platforms) }
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}"
}
}
`)
require.Equal(t, c.Targets[3].Name, "webapp-plus") _, err := ParseHCL(dt, "docker-bake.hcl")
require.Equal(t, 1, len(c.Targets[3].Args)) require.Error(t, err)
require.Equal(t, map[string]string{"IAMCROSS": "true"}, c.Targets[3].Args) require.Contains(t, err.Error(), "docker-bake.hcl:7,17-37: Variables not allowed; Variables may not be used here.")
})
} }

Loading…
Cancel
Save