Skip to content

Commit

Permalink
add etcdutl version. make it cov-tests compatible.
Browse files Browse the repository at this point in the history
  • Loading branch information
ptabor committed May 17, 2021
1 parent c09aca1 commit b6a8ae8
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
1 change: 1 addition & 0 deletions etcdutl/ctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func init() {
etcdutl.NewBackupCommand(),
etcdutl.NewDefragCommand(),
etcdutl.NewSnapshotCommand(),
etcdutl.NewVersionCommand(),
)
}

Expand Down
2 changes: 2 additions & 0 deletions etcdutl/etcdutl/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ package etcdutl
import (
"go.etcd.io/etcd/pkg/v3/cobrautl"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)

func GetLogger() *zap.Logger {
config := zap.NewProductionConfig()
config.Encoding = "console"
config.EncoderConfig.EncodeTime=zapcore.RFC3339TimeEncoder
lg, err := config.Build()
if err != nil {
cobrautl.ExitWithError(cobrautl.ExitBadArgs, err)
Expand Down
37 changes: 37 additions & 0 deletions etcdutl/etcdutl/version_command.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright 2021 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 etcdutl

import (
"fmt"

"go.etcd.io/etcd/api/v3/version"

"github.com/spf13/cobra"
)

// NewVersionCommand prints out the version of etcd.
func NewVersionCommand() *cobra.Command {
return &cobra.Command{
Use: "version",
Short: "Prints the version of etcdutl",
Run: versionCommandFunc,
}
}

func versionCommandFunc(cmd *cobra.Command, args []string) {
fmt.Println("etcdutl version:", version.Version)
fmt.Println("API version:", version.APIVersion)
}
66 changes: 66 additions & 0 deletions etcdutl/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// 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 (
"log"
"os"
"strings"
"testing"
)

func SplitTestArgs(args []string) (testArgs, appArgs []string) {
for i, arg := range os.Args {
switch {
case strings.HasPrefix(arg, "-test."):
testArgs = append(testArgs, arg)
case i == 0:
appArgs = append(appArgs, arg)
testArgs = append(testArgs, arg)
default:
appArgs = append(appArgs, arg)
}
}
return
}

// Empty test to avoid no-tests warning.
func TestEmpty(t *testing.T) {}

/**
* The purpose of this "test" is to run etcdctl with code-coverage
* collection turned on. The technique is documented here:
*
* https://www.cyphar.com/blog/post/20170412-golang-integration-coverage
*/
func TestMain(m *testing.M) {
// don't launch etcdutl when invoked via go test
if strings.HasSuffix(os.Args[0], "etcdutl.test") {
return
}

testArgs, appArgs := SplitTestArgs(os.Args)

os.Args = appArgs

err := Start()
if err != nil {
log.Fatalf("etcdctl failed with: %v", err)
}

// This will generate coverage files:
os.Args = testArgs
m.Run()
}

0 comments on commit b6a8ae8

Please sign in to comment.