mirror of
https://github.com/int128/kubelogin.git
synced 2026-04-28 04:06:32 +00:00
Add test of adaptors.Cmd (#45)
This commit is contained in:
@@ -4,32 +4,81 @@ import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/int128/kubelogin/usecases/interfaces"
|
||||
"github.com/int128/kubelogin/usecases/mock_usecases"
|
||||
"github.com/mitchellh/go-homedir"
|
||||
)
|
||||
|
||||
//TODO: Use gomock
|
||||
type mockLogin struct{}
|
||||
|
||||
func (*mockLogin) Do(ctx context.Context, in usecases.LoginIn) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestCmd_Run(t *testing.T) {
|
||||
cmd := Cmd{
|
||||
Login: &mockLogin{},
|
||||
}
|
||||
const executable = "kubelogin"
|
||||
const version = "HEAD"
|
||||
|
||||
t.Run("NoArg", func(t *testing.T) {
|
||||
exitCode := cmd.Run(context.TODO(), []string{"kubelogin"}, "version")
|
||||
t.Run("Defaults", func(t *testing.T) {
|
||||
ctrl := gomock.NewController(t)
|
||||
defer ctrl.Finish()
|
||||
ctx := context.TODO()
|
||||
|
||||
login := mock_usecases.NewMockLogin(ctrl)
|
||||
login.EXPECT().
|
||||
Do(ctx, usecases.LoginIn{
|
||||
KubeConfig: expand(t, "~/.kube/config"),
|
||||
ListenPort: 8000,
|
||||
})
|
||||
|
||||
cmd := Cmd{
|
||||
Login: login,
|
||||
}
|
||||
exitCode := cmd.Run(ctx, []string{executable}, version)
|
||||
if exitCode != 0 {
|
||||
t.Errorf("exitCode wants 0 but %d", exitCode)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("FullOptions", func(t *testing.T) {
|
||||
ctrl := gomock.NewController(t)
|
||||
defer ctrl.Finish()
|
||||
ctx := context.TODO()
|
||||
|
||||
login := mock_usecases.NewMockLogin(ctrl)
|
||||
login.EXPECT().
|
||||
Do(ctx, usecases.LoginIn{
|
||||
KubeConfig: expand(t, "~/.kube/config"),
|
||||
ListenPort: 10080,
|
||||
SkipTLSVerify: true,
|
||||
SkipOpenBrowser: true,
|
||||
})
|
||||
|
||||
cmd := Cmd{
|
||||
Login: login,
|
||||
}
|
||||
exitCode := cmd.Run(ctx, []string{executable,
|
||||
"--listen-port", "10080",
|
||||
"--insecure-skip-tls-verify",
|
||||
"--skip-open-browser",
|
||||
}, version)
|
||||
if exitCode != 0 {
|
||||
t.Errorf("exitCode wants 0 but %d", exitCode)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("TooManyArgs", func(t *testing.T) {
|
||||
exitCode := cmd.Run(context.TODO(), []string{"kubelogin", "some"}, "version")
|
||||
ctrl := gomock.NewController(t)
|
||||
defer ctrl.Finish()
|
||||
cmd := Cmd{
|
||||
Login: mock_usecases.NewMockLogin(ctrl),
|
||||
}
|
||||
exitCode := cmd.Run(context.TODO(), []string{executable, "some"}, version)
|
||||
if exitCode != 1 {
|
||||
t.Errorf("exitCode wants 1 but %d", exitCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func expand(t *testing.T, path string) string {
|
||||
d, err := homedir.Expand(path)
|
||||
if err != nil {
|
||||
t.Fatalf("could not expand: %s", err)
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
7
adaptors/interfaces/adaptors.go
Normal file
7
adaptors/interfaces/adaptors.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package adaptors
|
||||
|
||||
import "context"
|
||||
|
||||
type Cmd interface {
|
||||
Run(ctx context.Context, args []string, version string) int
|
||||
}
|
||||
1
go.mod
1
go.mod
@@ -5,6 +5,7 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
github.com/gogo/protobuf v1.2.1 // indirect
|
||||
github.com/golang/mock v1.2.0
|
||||
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect
|
||||
github.com/imdario/mergo v0.3.7 // indirect
|
||||
github.com/int128/oauth2cli v1.1.0
|
||||
|
||||
2
go.sum
2
go.sum
@@ -8,6 +8,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
|
||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck=
|
||||
|
||||
@@ -2,6 +2,8 @@ package usecases
|
||||
|
||||
import "context"
|
||||
|
||||
//go:generate mockgen -package mock_usecases -destination ../mock_usecases/mock_usecases.go github.com/int128/kubelogin/usecases/interfaces Login
|
||||
|
||||
type Login interface {
|
||||
Do(ctx context.Context, in LoginIn) error
|
||||
}
|
||||
|
||||
47
usecases/mock_usecases/mock_usecases.go
Normal file
47
usecases/mock_usecases/mock_usecases.go
Normal file
@@ -0,0 +1,47 @@
|
||||
// Code generated by MockGen. DO NOT EDIT.
|
||||
// Source: github.com/int128/kubelogin/usecases/interfaces (interfaces: Login)
|
||||
|
||||
// Package mock_usecases is a generated GoMock package.
|
||||
package mock_usecases
|
||||
|
||||
import (
|
||||
context "context"
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
interfaces "github.com/int128/kubelogin/usecases/interfaces"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
// MockLogin is a mock of Login interface
|
||||
type MockLogin struct {
|
||||
ctrl *gomock.Controller
|
||||
recorder *MockLoginMockRecorder
|
||||
}
|
||||
|
||||
// MockLoginMockRecorder is the mock recorder for MockLogin
|
||||
type MockLoginMockRecorder struct {
|
||||
mock *MockLogin
|
||||
}
|
||||
|
||||
// NewMockLogin creates a new mock instance
|
||||
func NewMockLogin(ctrl *gomock.Controller) *MockLogin {
|
||||
mock := &MockLogin{ctrl: ctrl}
|
||||
mock.recorder = &MockLoginMockRecorder{mock}
|
||||
return mock
|
||||
}
|
||||
|
||||
// EXPECT returns an object that allows the caller to indicate expected use
|
||||
func (m *MockLogin) EXPECT() *MockLoginMockRecorder {
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// Do mocks base method
|
||||
func (m *MockLogin) Do(arg0 context.Context, arg1 interfaces.LoginIn) error {
|
||||
ret := m.ctrl.Call(m, "Do", arg0, arg1)
|
||||
ret0, _ := ret[0].(error)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// Do indicates an expected call of Do
|
||||
func (mr *MockLoginMockRecorder) Do(arg0, arg1 interface{}) *gomock.Call {
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Do", reflect.TypeOf((*MockLogin)(nil).Do), arg0, arg1)
|
||||
}
|
||||
Reference in New Issue
Block a user