From 1e7528b450dde027e7d7e50fa1ecf1d961f043a2 Mon Sep 17 00:00:00 2001 From: Mikhail Gryzykhin <12602502+Ardagan@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:26:34 -0800 Subject: [PATCH] Use gomock for logger (#1322) --- common/log/interface.go | 2 + common/log/interfaces_mock.go | 162 ++++++++++++++++++++++++ common/log/mockLogger.go | 75 ----------- service/worker/archiver/handler_test.go | 13 +- service/worker/archiver/pump_test.go | 6 +- 5 files changed, 172 insertions(+), 86 deletions(-) create mode 100644 common/log/interfaces_mock.go delete mode 100644 common/log/mockLogger.go diff --git a/common/log/interface.go b/common/log/interface.go index 1598bb845de..f2e6894c1b7 100644 --- a/common/log/interface.go +++ b/common/log/interface.go @@ -22,6 +22,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +//go:generate mockgen -copyright_file ../../LICENSE -package $GOPACKAGE -source $GOFILE -destination interfaces_mock.go + package log import ( diff --git a/common/log/interfaces_mock.go b/common/log/interfaces_mock.go new file mode 100644 index 00000000000..acff91d19e0 --- /dev/null +++ b/common/log/interfaces_mock.go @@ -0,0 +1,162 @@ +// The MIT License +// +// Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. +// +// Copyright (c) 2020 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +// Code generated by MockGen. DO NOT EDIT. +// Source: interface.go + +// Package log is a generated GoMock package. +package log + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + tag "go.temporal.io/server/common/log/tag" +) + +// MockLogger is a mock of Logger interface. +type MockLogger struct { + ctrl *gomock.Controller + recorder *MockLoggerMockRecorder +} + +// MockLoggerMockRecorder is the mock recorder for MockLogger. +type MockLoggerMockRecorder struct { + mock *MockLogger +} + +// NewMockLogger creates a new mock instance. +func NewMockLogger(ctrl *gomock.Controller) *MockLogger { + mock := &MockLogger{ctrl: ctrl} + mock.recorder = &MockLoggerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockLogger) EXPECT() *MockLoggerMockRecorder { + return m.recorder +} + +// Debug mocks base method. +func (m *MockLogger) Debug(msg string, tags ...tag.Tag) { + m.ctrl.T.Helper() + varargs := []interface{}{msg} + for _, a := range tags { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Debug", varargs...) +} + +// Debug indicates an expected call of Debug. +func (mr *MockLoggerMockRecorder) Debug(msg interface{}, tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{msg}, tags...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Debug", reflect.TypeOf((*MockLogger)(nil).Debug), varargs...) +} + +// Error mocks base method. +func (m *MockLogger) Error(msg string, tags ...tag.Tag) { + m.ctrl.T.Helper() + varargs := []interface{}{msg} + for _, a := range tags { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Error", varargs...) +} + +// Error indicates an expected call of Error. +func (mr *MockLoggerMockRecorder) Error(msg interface{}, tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{msg}, tags...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Error", reflect.TypeOf((*MockLogger)(nil).Error), varargs...) +} + +// Fatal mocks base method. +func (m *MockLogger) Fatal(msg string, tags ...tag.Tag) { + m.ctrl.T.Helper() + varargs := []interface{}{msg} + for _, a := range tags { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Fatal", varargs...) +} + +// Fatal indicates an expected call of Fatal. +func (mr *MockLoggerMockRecorder) Fatal(msg interface{}, tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{msg}, tags...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Fatal", reflect.TypeOf((*MockLogger)(nil).Fatal), varargs...) +} + +// Info mocks base method. +func (m *MockLogger) Info(msg string, tags ...tag.Tag) { + m.ctrl.T.Helper() + varargs := []interface{}{msg} + for _, a := range tags { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Info", varargs...) +} + +// Info indicates an expected call of Info. +func (mr *MockLoggerMockRecorder) Info(msg interface{}, tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{msg}, tags...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Info", reflect.TypeOf((*MockLogger)(nil).Info), varargs...) +} + +// Warn mocks base method. +func (m *MockLogger) Warn(msg string, tags ...tag.Tag) { + m.ctrl.T.Helper() + varargs := []interface{}{msg} + for _, a := range tags { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Warn", varargs...) +} + +// Warn indicates an expected call of Warn. +func (mr *MockLoggerMockRecorder) Warn(msg interface{}, tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{msg}, tags...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Warn", reflect.TypeOf((*MockLogger)(nil).Warn), varargs...) +} + +// WithTags mocks base method. +func (m *MockLogger) WithTags(tags ...tag.Tag) Logger { + m.ctrl.T.Helper() + varargs := []interface{}{} + for _, a := range tags { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "WithTags", varargs...) + ret0, _ := ret[0].(Logger) + return ret0 +} + +// WithTags indicates an expected call of WithTags. +func (mr *MockLoggerMockRecorder) WithTags(tags ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WithTags", reflect.TypeOf((*MockLogger)(nil).WithTags), tags...) +} diff --git a/common/log/mockLogger.go b/common/log/mockLogger.go deleted file mode 100644 index 36ea07dbef6..00000000000 --- a/common/log/mockLogger.go +++ /dev/null @@ -1,75 +0,0 @@ -// The MIT License -// -// Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. -// -// Copyright (c) 2020 Uber Technologies, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -package log - -import ( - "github.com/stretchr/testify/mock" - - "go.temporal.io/server/common/log/tag" -) - -// MockLogger returns a mock for Logger interface -type MockLogger struct { - mock.Mock -} - -// Debug provides a mock function with given fields: msg, tags -func (_m *MockLogger) Debug(msg string, tags ...tag.Tag) { - _m.Called(msg, tags) -} - -// Info provides a mock function with given fields: msg, tags -func (_m *MockLogger) Info(msg string, tags ...tag.Tag) { - _m.Called(msg, tags) -} - -// Warn provides a mock function with given fields: msg, tags -func (_m *MockLogger) Warn(msg string, tags ...tag.Tag) { - _m.Called(msg, tags) -} - -// Error provides a mock function with given fields: msg, tags -func (_m *MockLogger) Error(msg string, tags ...tag.Tag) { - _m.Called(msg, tags) -} - -// Fatal provides a mock function with given fields: msg, tags -func (_m *MockLogger) Fatal(msg string, tags ...tag.Tag) { - _m.Called(msg, tags) -} - -// WithTags provides a mock function with given fields: tags -func (_m *MockLogger) WithTags(tags ...tag.Tag) Logger { - ret := _m.Called(tags) - - var r0 Logger - if rf, ok := ret.Get(0).(func(...tag.Tag) Logger); ok { - r0 = rf(tags...) - } else { - r0 = ret.Get(0).(Logger) - } - - return r0 -} diff --git a/service/worker/archiver/handler_test.go b/service/worker/archiver/handler_test.go index b6fe2727815..7ca480027e9 100644 --- a/service/worker/archiver/handler_test.go +++ b/service/worker/archiver/handler_test.go @@ -73,18 +73,17 @@ func (s *handlerSuite) SetupTest() { s.controller = gomock.NewController(s.T()) handlerTestMetrics = metrics.NewMockClient(s.controller) handlerTestMetrics.EXPECT().StartTimer(gomock.Any(), gomock.Any()).Return(metrics.NopStopwatch()).AnyTimes() - handlerTestLogger = &log.MockLogger{} - handlerTestLogger.On("WithTags", mock.Anything).Return(handlerTestLogger) + handlerTestLogger = log.NewMockLogger(s.controller) + handlerTestLogger.EXPECT().WithTags(gomock.Any()).Return(handlerTestLogger).AnyTimes() } func (s *handlerSuite) TearDownTest() { - handlerTestLogger.AssertExpectations(s.T()) } func (s *handlerSuite) TestHandleHistoryRequest_UploadFails_NonRetryableError() { handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverUploadFailedAllRetriesCount) handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverDeleteSuccessCount) - handlerTestLogger.On("Error", mock.Anything, mock.Anything).Once() + handlerTestLogger.EXPECT().Error(gomock.Any(), gomock.Any()) env := s.NewTestWorkflowEnvironment() s.registerWorkflows(env) @@ -100,7 +99,7 @@ func (s *handlerSuite) TestHandleHistoryRequest_UploadFails_NonRetryableError() func (s *handlerSuite) TestHandleHistoryRequest_UploadFails_ExpireRetryTimeout() { handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverUploadFailedAllRetriesCount) handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverDeleteSuccessCount) - handlerTestLogger.On("Error", mock.Anything, mock.Anything).Once() + handlerTestLogger.EXPECT().Error(gomock.Any(), gomock.Any()) timeoutErr := temporal.NewTimeoutError(enumspb.TIMEOUT_TYPE_START_TO_CLOSE, nil) env := s.NewTestWorkflowEnvironment() @@ -132,7 +131,7 @@ func (s *handlerSuite) TestHandleHistoryRequest_UploadSuccess() { func (s *handlerSuite) TestHandleHistoryRequest_DeleteFails_NonRetryableError() { handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverUploadSuccessCount) handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverDeleteFailedAllRetriesCount) - handlerTestLogger.On("Error", mock.Anything, mock.Anything).Once() + handlerTestLogger.EXPECT().Error(gomock.Any(), gomock.Any()) env := s.NewTestWorkflowEnvironment() s.registerWorkflows(env) @@ -171,7 +170,7 @@ func (s *handlerSuite) TestHandleHistoryRequest_DeleteFailsThenSucceeds() { func (s *handlerSuite) TestHandleVisibilityRequest_Fail() { handlerTestMetrics.EXPECT().IncCounter(metrics.ArchiverScope, metrics.ArchiverHandleVisibilityFailedAllRetiresCount) - handlerTestLogger.On("Error", mock.Anything, mock.Anything).Once() + handlerTestLogger.EXPECT().Error(gomock.Any(), gomock.Any()) env := s.NewTestWorkflowEnvironment() s.registerWorkflows(env) diff --git a/service/worker/archiver/pump_test.go b/service/worker/archiver/pump_test.go index 40118d4bc9e..826a9789a26 100644 --- a/service/worker/archiver/pump_test.go +++ b/service/worker/archiver/pump_test.go @@ -30,7 +30,6 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" "go.temporal.io/sdk/testsuite" "go.temporal.io/sdk/workflow" @@ -65,11 +64,10 @@ func (s *pumpSuite) SetupTest() { s.controller = gomock.NewController(s.T()) pumpTestMetrics = metrics.NewMockClient(s.controller) pumpTestMetrics.EXPECT().StartTimer(gomock.Any(), gomock.Any()).Return(metrics.NopStopwatch()) - pumpTestLogger = &log.MockLogger{} + pumpTestLogger = log.NewMockLogger(s.controller) } func (s *pumpSuite) TearDownTest() { - pumpTestLogger.AssertExpectations(s.T()) } func (s *pumpSuite) TestPumpRun_CarryoverLargerThanLimit() { @@ -152,7 +150,7 @@ func (s *pumpSuite) TestPumpRun_SignalsAndCarryover() { func (s *pumpSuite) TestPumpRun_SignalChannelClosedUnexpectedly() { pumpTestMetrics.EXPECT().UpdateGauge(metrics.ArchiverPumpScope, metrics.ArchiverBacklogSizeGauge, float64(0)) pumpTestMetrics.EXPECT().IncCounter(metrics.ArchiverPumpScope, metrics.ArchiverPumpSignalChannelClosedCount) - pumpTestLogger.On("Error", mock.Anything, mock.Anything).Once() + pumpTestLogger.EXPECT().Error(gomock.Any(), gomock.Any()) env := s.NewTestWorkflowEnvironment() s.registerWorkflows(env)