1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/builder/dockerfile/builder_test.go
Yong Tang d32efdbf8b Sort the build labels passed from build --labels
This fix tries to fix the issue in 29619 where
labels passed from `build --labels` are not sorted.
As a result, if multiple labels have been passed,
each `docker build --labels A=A --labels B=B --labels C=C`
will generate different layers.

This fix fixes the issue by sort the Labels before
they are concatenated to `LABEL ...`.

A unit test has been added to cover the changes

This fix fixes 29619.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
2016-12-22 07:32:52 -08:00

54 lines
1.2 KiB
Go

package dockerfile
import (
"strings"
"testing"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/builder/dockerfile/parser"
)
func TestBuildProcessLabels(t *testing.T) {
dockerfile := "FROM scratch"
d := parser.Directive{}
parser.SetEscapeToken(parser.DefaultEscapeToken, &d)
n, err := parser.Parse(strings.NewReader(dockerfile), &d)
if err != nil {
t.Fatalf("Error when parsing Dockerfile: %s", err)
}
options := &types.ImageBuildOptions{
Labels: map[string]string{
"org.e": "cli-e",
"org.d": "cli-d",
"org.c": "cli-c",
"org.b": "cli-b",
"org.a": "cli-a",
},
}
b := &Builder{
runConfig: &container.Config{},
options: options,
directive: d,
dockerfile: n,
}
err = b.processLabels()
if err != nil {
t.Fatalf("Error when processing labels: %s", err)
}
expected := []string{
"FROM scratch",
`LABEL "org.a"='cli-a' "org.b"='cli-b' "org.c"='cli-c' "org.d"='cli-d' "org.e"='cli-e'`,
}
if len(b.dockerfile.Children) != 2 {
t.Fatalf("Expect 2, got %d", len(b.dockerfile.Children))
}
for i, v := range b.dockerfile.Children {
if v.Original != expected[i] {
t.Fatalf("Expect '%s' for %dth children, got, '%s'", expected[i], i, v.Original)
}
}
}