e2e: Add tests for #1801 (global args parsed multiple times)

These currently fail.

Signed-off-by: Ian Campbell <ijc@docker.com>
This commit is contained in:
Ian Campbell 2019-04-03 11:47:53 +01:00
parent ef40743669
commit d32f3647b1
1 changed files with 55 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package cliplugins package cliplugins
import ( import (
"os"
"testing" "testing"
"gotest.tools/icmd" "gotest.tools/icmd"
@ -66,6 +67,60 @@ func TestClashWithGlobalArgs(t *testing.T) {
} }
} }
// TestGlobalArgsOnlyParsedOnce checks that global args are only parsed
// once (cf https://github.com/docker/cli/issues/1801). These tests
// rely on `-H` being a list type (i.e. NewNamedListOptsRef) which
// reject multiple uses dynamically (see `getServerHost()` in
// github.com/docker/cli/cli/command/cli.go) in order to detect this
// scenario.
func TestGlobalArgsOnlyParsedOnce(t *testing.T) {
run, _, cleanup := prepare(t)
defer cleanup()
// We can rely on `$DOCKER_HOST` being set due to the call to
// `environment.Setup` in our `TestMain`.
dh := os.Getenv("DOCKER_HOST")
for _, tc := range []struct {
name string
args []string
expectedExitCode int
expectedOut, expectedErr string
}{
{
// This is checking the precondition wrt -H mentioned in the function comment
name: "fails-if-H-used-twice",
args: []string{"-H", dh, "-H", dh, "version", "-f", "{{.Client.Version}}"},
expectedExitCode: 1,
expectedOut: icmd.None,
expectedErr: "Please specify only one -H",
},
{
name: "builtin",
args: []string{"-H", dh, "version", "-f", "{{.Client.Version}}"},
expectedExitCode: 0,
expectedOut: "", // Will be the client version, but the specifics aren't important so long as stderr is empty.
expectedErr: icmd.None,
},
{
name: "plugin",
args: []string{"-H", dh, "helloworld", "apiversion"},
expectedExitCode: 0,
expectedOut: "", // Will be the client version, but the specifics aren't important so long as stderr is empty.
expectedErr: icmd.None,
},
} {
t.Run(tc.name, func(t *testing.T) {
res := icmd.RunCmd(run(tc.args...))
res.Assert(t, icmd.Expected{
ExitCode: tc.expectedExitCode,
Out: tc.expectedOut,
Err: tc.expectedErr,
})
})
}
}
// TestUnknownGlobal checks that unknown globals report errors // TestUnknownGlobal checks that unknown globals report errors
func TestUnknownGlobal(t *testing.T) { func TestUnknownGlobal(t *testing.T) {
run, _, cleanup := prepare(t) run, _, cleanup := prepare(t)