From 8a1da59a3c3d2bf58a854add8ccf999d201c7567 Mon Sep 17 00:00:00 2001 From: ShiningRush <277040271@qq.com> Date: Fri, 20 Nov 2020 21:00:14 +0800 Subject: [PATCH] feat: add a hanlder unit test for upstream and remove init --- api/conf/conf.go | 2 +- api/internal/core/store/store_mock.go | 35 +++++++++++++ .../handler/consumer/consumer_test.go | 51 +++++++++++++++++++ api/log/zap.go | 2 +- api/main.go | 3 +- 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 api/internal/core/store/store_mock.go diff --git a/api/conf/conf.go b/api/conf/conf.go index 91eb89bc21..b8ee85af8b 100644 --- a/api/conf/conf.go +++ b/api/conf/conf.go @@ -93,7 +93,7 @@ type Config struct { Authentication Authentication } -func init() { +func InitConf() { //go test if workDir := os.Getenv("APISIX_API_WORKDIR"); workDir != "" { WorkDir = workDir diff --git a/api/internal/core/store/store_mock.go b/api/internal/core/store/store_mock.go new file mode 100644 index 0000000000..d30884e63b --- /dev/null +++ b/api/internal/core/store/store_mock.go @@ -0,0 +1,35 @@ +package store + +import ( + "context" + "github.com/stretchr/testify/mock" +) + +type MockInterface struct { + mock.Mock +} + +func (m *MockInterface) Get(key string) (interface{}, error) { + ret := m.Mock.Called(key) + return ret.Get(0), ret.Error(1) +} + +func (m *MockInterface) List(input ListInput) (*ListOutput, error) { + ret := m.Mock.Called(input) + return ret.Get(0).(*ListOutput), ret.Error(1) +} + +func (m *MockInterface) Create(ctx context.Context, obj interface{}) error { + ret := m.Mock.Called(ctx, obj) + return ret.Error(0) +} + +func (m *MockInterface) Update(ctx context.Context, obj interface{}, createOnFail bool) error { + ret := m.Mock.Called(ctx, obj, createOnFail) + return ret.Error(0) +} + +func (m *MockInterface) BatchDelete(ctx context.Context, keys []string) error { + ret := m.Mock.Called(ctx, keys) + return ret.Error(0) +} diff --git a/api/internal/handler/consumer/consumer_test.go b/api/internal/handler/consumer/consumer_test.go index 1f88c52b07..592582e45d 100644 --- a/api/internal/handler/consumer/consumer_test.go +++ b/api/internal/handler/consumer/consumer_test.go @@ -19,6 +19,10 @@ package consumer import ( "encoding/json" + "fmt" + "github.com/shiningrush/droplet/data" + "github.com/stretchr/testify/mock" + "net/http" "testing" "time" @@ -30,6 +34,53 @@ import ( "github.com/apisix/manager-api/internal/core/store" ) +func TestHandler_Get(t *testing.T) { + tests := []struct { + caseDesc string + giveInput *GetInput + giveRet interface{} + giveErr error + wantErr error + wantGetKey string + wantRet interface{} + }{ + { + caseDesc: "normal", + giveInput: &GetInput{Username: "test"}, + wantGetKey: "test", + giveRet: "hello", + wantRet: "hello", + }, + { + caseDesc: "failed", + giveInput: &GetInput{Username: "failed key"}, + wantGetKey: "failed key", + giveErr: fmt.Errorf("get failed"), + wantErr: fmt.Errorf("get failed"), + wantRet: &data.SpecCodeResponse{ + StatusCode: http.StatusInternalServerError, + }, + }, + } + + for _, tc := range tests { + getCalled := true + mStore := &store.MockInterface{} + mStore.On("Get", mock.Anything).Run(func(args mock.Arguments) { + getCalled = true + assert.Equal(t, tc.wantGetKey, args.Get(0), tc.caseDesc) + }).Return(tc.giveRet, tc.giveErr) + + h := Handler{consumerStore: mStore} + ctx := droplet.NewContext() + ctx.SetInput(tc.giveInput) + ret, err := h.Get(ctx) + assert.True(t, getCalled, tc.caseDesc) + assert.Equal(t, tc.wantRet, ret, tc.caseDesc) + assert.Equal(t, tc.wantErr, err, tc.caseDesc) + } +} + func TestConsumer(t *testing.T) { // init err := storage.InitETCDClient([]string{"127.0.0.1:2379"}) diff --git a/api/log/zap.go b/api/log/zap.go index 223a71fb64..72244e3717 100644 --- a/api/log/zap.go +++ b/api/log/zap.go @@ -27,7 +27,7 @@ import ( var logger *zap.SugaredLogger -func init() { +func InitLog() { writeSyncer := fileWriter() encoder := getEncoder() logLevel := getLogLevel() diff --git a/api/main.go b/api/main.go index 336aac9230..0ef2ecb9a8 100644 --- a/api/main.go +++ b/api/main.go @@ -34,7 +34,8 @@ import ( ) func main() { - + conf.InitConf() + log.InitLog() if err := storage.InitETCDClient(conf.ETCDEndpoints); err != nil { log.Error("init etcd client fail: %w", err) panic(err)