From 15fecb0bf348d4c5c7deb8094de5e8b3900d0412 Mon Sep 17 00:00:00 2001 From: Justin Cormack Date: Mon, 8 Aug 2016 15:08:55 +0100 Subject: [PATCH] More helpful error message when not sufficiently argumentative The error message suggests you need one argument even when you have provided one. Suggest having another argument. Signed-off-by: Justin Cormack Upstream-commit: 4ce93940b7c2a640c94296f20352cf6f052d1028 Component: engine --- .../engine/builder/dockerfile/dispatchers.go | 8 +++++-- .../builder/dockerfile/dispatchers_test.go | 22 +++++++++++++++++-- .../builder/dockerfile/evaluator_test.go | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/components/engine/builder/dockerfile/dispatchers.go b/components/engine/builder/dockerfile/dispatchers.go index dd237c10be..dc5b7ef0b8 100644 --- a/components/engine/builder/dockerfile/dispatchers.go +++ b/components/engine/builder/dockerfile/dispatchers.go @@ -155,7 +155,7 @@ func label(b *Builder, args []string, attributes map[string]bool, original strin // func add(b *Builder, args []string, attributes map[string]bool, original string) error { if len(args) < 2 { - return errAtLeastOneArgument("ADD") + return errAtLeastTwoArguments("ADD") } if err := b.flags.Parse(); err != nil { @@ -171,7 +171,7 @@ func add(b *Builder, args []string, attributes map[string]bool, original string) // func dispatchCopy(b *Builder, args []string, attributes map[string]bool, original string) error { if len(args) < 2 { - return errAtLeastOneArgument("COPY") + return errAtLeastTwoArguments("COPY") } if err := b.flags.Parse(); err != nil { @@ -760,6 +760,10 @@ func errExactlyOneArgument(command string) error { return fmt.Errorf("%s requires exactly one argument", command) } +func errAtLeastTwoArguments(command string) error { + return fmt.Errorf("%s requires at least two arguments", command) +} + func errTooManyArguments(command string) error { return fmt.Errorf("Bad input to %s, too many arguments", command) } diff --git a/components/engine/builder/dockerfile/dispatchers_test.go b/components/engine/builder/dockerfile/dispatchers_test.go index 75d1185a0f..22ff66a68c 100644 --- a/components/engine/builder/dockerfile/dispatchers_test.go +++ b/components/engine/builder/dockerfile/dispatchers_test.go @@ -43,8 +43,6 @@ func TestCommandsAtLeastOneArgument(t *testing.T) { commands := []commandWithFunction{ {"ENV", func(args []string) error { return env(nil, args, nil, "") }}, {"LABEL", func(args []string) error { return label(nil, args, nil, "") }}, - {"ADD", func(args []string) error { return add(nil, args, nil, "") }}, - {"COPY", func(args []string) error { return dispatchCopy(nil, args, nil, "") }}, {"ONBUILD", func(args []string) error { return onbuild(nil, args, nil, "") }}, {"EXPOSE", func(args []string) error { return expose(nil, args, nil, "") }}, {"VOLUME", func(args []string) error { return volume(nil, args, nil, "") }}} @@ -64,6 +62,26 @@ func TestCommandsAtLeastOneArgument(t *testing.T) { } } +func TestCommandsAtLeastTwoArguments(t *testing.T) { + commands := []commandWithFunction{ + {"ADD", func(args []string) error { return add(nil, args, nil, "") }}, + {"COPY", func(args []string) error { return dispatchCopy(nil, args, nil, "") }}} + + for _, command := range commands { + err := command.function([]string{"arg1"}) + + if err == nil { + t.Fatalf("Error should be present for %s command", command.name) + } + + expectedError := fmt.Sprintf("%s requires at least two arguments", command.name) + + if err.Error() != expectedError { + t.Fatalf("Wrong error message for %s. Got: %s. Should be: %s", command.name, err.Error(), expectedError) + } + } +} + func TestCommandsTooManyArguments(t *testing.T) { commands := []commandWithFunction{ {"ENV", func(args []string) error { return env(nil, args, nil, "") }}, diff --git a/components/engine/builder/dockerfile/evaluator_test.go b/components/engine/builder/dockerfile/evaluator_test.go index 75248f0d10..6a004170e1 100644 --- a/components/engine/builder/dockerfile/evaluator_test.go +++ b/components/engine/builder/dockerfile/evaluator_test.go @@ -28,7 +28,7 @@ func initDispatchTestCases() []dispatchTestCase { dockerfile: `COPY quux \ bar`, - expectedError: "COPY requires at least one argument", + expectedError: "COPY requires at least two arguments", }, { name: "ONBUILD forbidden FROM",