diff --git a/etcdctl/ctlv2/ctl.go b/etcdctl/ctlv2/ctl.go index 41018fb63..800ac85e4 100644 --- a/etcdctl/ctlv2/ctl.go +++ b/etcdctl/ctlv2/ctl.go @@ -71,7 +71,7 @@ func Start() { command.NewAuthCommands(), } - err := app.Run(os.Args) + err := runCtlV2(app) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) diff --git a/etcdctl/ctlv2/ctl_cov.go b/etcdctl/ctlv2/ctl_cov.go new file mode 100644 index 000000000..f76125dce --- /dev/null +++ b/etcdctl/ctlv2/ctl_cov.go @@ -0,0 +1,28 @@ +// Copyright 2017 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build cov + +package ctlv2 + +import ( + "os" + "strings" + + "github.com/urfave/cli" +) + +func runCtlV2(app *cli.App) error { + return app.Run(strings.Split(os.Getenv("ETCDCTL_ARGS"), "\xff")) +} diff --git a/etcdctl/ctlv2/ctl_nocov.go b/etcdctl/ctlv2/ctl_nocov.go new file mode 100644 index 000000000..1591360e5 --- /dev/null +++ b/etcdctl/ctlv2/ctl_nocov.go @@ -0,0 +1,27 @@ +// Copyright 2017 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !cov + +package ctlv2 + +import ( + "os" + + "github.com/urfave/cli" +) + +func runCtlV2(app *cli.App) error { + return app.Run(os.Args) +} diff --git a/etcdctl/ctlv3/ctl.go b/etcdctl/ctlv3/ctl.go index 780e9f7ff..4875b5278 100644 --- a/etcdctl/ctlv3/ctl.go +++ b/etcdctl/ctlv3/ctl.go @@ -86,14 +86,3 @@ func init() { func init() { cobra.EnablePrefixMatching = true } - -func Start() { - rootCmd.SetUsageFunc(usageFunc) - - // Make help just show the usage - rootCmd.SetHelpTemplate(`{{.UsageString}}`) - - if err := rootCmd.Execute(); err != nil { - command.ExitWithError(command.ExitError, err) - } -} diff --git a/etcdctl/ctlv3/ctl_cov.go b/etcdctl/ctlv3/ctl_cov.go new file mode 100644 index 000000000..79cf93cdc --- /dev/null +++ b/etcdctl/ctlv3/ctl_cov.go @@ -0,0 +1,33 @@ +// Copyright 2017 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build cov + +package ctlv3 + +import ( + "os" + "strings" + + "github.com/coreos/etcd/etcdctl/ctlv3/command" +) + +func Start() { + // ETCDCTL_ARGS=etcdctl_test arg1 arg2... + // SetArgs() takes arg1 arg2... + rootCmd.SetArgs(strings.Split(os.Getenv("ETCDCTL_ARGS"), "\xff")[1:]) + if err := rootCmd.Execute(); err != nil { + command.ExitWithError(command.ExitError, err) + } +} diff --git a/etcdctl/ctlv3/ctl_nocov.go b/etcdctl/ctlv3/ctl_nocov.go new file mode 100644 index 000000000..52751feec --- /dev/null +++ b/etcdctl/ctlv3/ctl_nocov.go @@ -0,0 +1,28 @@ +// Copyright 2017 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !cov + +package ctlv3 + +import "github.com/coreos/etcd/etcdctl/ctlv3/command" + +func Start() { + rootCmd.SetUsageFunc(usageFunc) + // Make help just show the usage + rootCmd.SetHelpTemplate(`{{.UsageString}}`) + if err := rootCmd.Execute(); err != nil { + command.ExitWithError(command.ExitError, err) + } +} diff --git a/etcdctl/main_test.go b/etcdctl/main_test.go new file mode 100644 index 000000000..ccd3ba0ac --- /dev/null +++ b/etcdctl/main_test.go @@ -0,0 +1,29 @@ +// Copyright 2017 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "os" + "strings" + "testing" +) + +func TestMain(t *testing.T) { + // don't launch etcdctl when invoked via go test + if strings.HasSuffix(os.Args[0], "etcdctl.test") { + return + } + main() +}