diff --git a/pkg/log/zap/buffered_write_syncer_test.go b/pkg/log/zap/buffered_write_syncer_test.go index f03da85e4a8256ed93717d9ec53c4afbb4514ac7..2608596e55dc74aa5bfad4983a046618cb7fc76c 100644 --- a/pkg/log/zap/buffered_write_syncer_test.go +++ b/pkg/log/zap/buffered_write_syncer_test.go @@ -15,7 +15,12 @@ import ( func TestBufferedWriteSyncer_Write(t *testing.T) { service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Once() + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.Equal(t, 2, len(entries)) + }). + Once() ws := NewBufferedWriteSyncer(service) @@ -28,15 +33,18 @@ func TestBufferedWriteSyncer_Write(t *testing.T) { err = ws.Stop() require.NoError(t, err) - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 2 - })) + service.AssertExpectations(t) } func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) { service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Once() + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.Equal(t, 100, len(entries)) + }). + Once() ws := NewBufferedWriteSyncer(service) @@ -56,15 +64,18 @@ func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) { err := ws.Stop() require.NoError(t, err) - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 100 - })) + service.AssertExpectations(t) } func TestBufferedWriteSyncer_Flush(t *testing.T) { service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Times(10) + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.Equal(t, 10, len(entries)) + }). + Times(10) ws := NewBufferedWriteSyncer(service) @@ -80,15 +91,18 @@ func TestBufferedWriteSyncer_Flush(t *testing.T) { err := ws.Stop() require.NoError(t, err) - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 10 - })) + service.AssertExpectations(t) } func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) { service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Times(10) + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.Equal(t, 10, len(entries)) + }). + Times(10) ws := NewBufferedWriteSyncer(service, WithMaxBufferSize(10)) @@ -100,15 +114,18 @@ func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) { err := ws.Stop() require.NoError(t, err) - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 10 - })) + service.AssertExpectations(t) } func TestBufferedWriteSyncer_FlushInterval(t *testing.T) { service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Once() + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.Equal(t, 10, len(entries)) + }). + Once() ws := NewBufferedWriteSyncer(service, WithFlushInterval(time.Second)) @@ -119,7 +136,5 @@ func TestBufferedWriteSyncer_FlushInterval(t *testing.T) { time.Sleep(3 * time.Second) // ждем, пока сработает интервал - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 10 - })) + service.AssertExpectations(t) } diff --git a/pkg/log/zap/zap_test.go b/pkg/log/zap/zap_test.go index 6cdbcd68742f79d7c225cd7fdf959414ee3647ab..3b9422fcf724db740b769f0acdd2ce9f7cc0c8bd 100644 --- a/pkg/log/zap/zap_test.go +++ b/pkg/log/zap/zap_test.go @@ -15,9 +15,43 @@ import ( ) func TestExample(t *testing.T) { + wantEntries := []*log.Entry{ + { + LogLevel: log.Level(zapcore.InfoLevel), + Message: "создан элемент коллекции", + Category: "create", + Component: "Items.Service", + Event: "Items.Create", + Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl", + Caller: "/users/PHVz", + Attr: "any", + Tags: []string{"tag1", "tag2", "tag3"}, + }, + { + LogLevel: log.Level(zapcore.WarnLevel), + Message: "изменен элемент коллекции", + Category: "update", + Component: "Items.Service", + Event: "Items.Update", + Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl/revs/cmV2cw", + Caller: "/users/PHVz", + }, + } + service := &logmocks.Service{} service.On("Log", mock.Anything, mock.Anything). - Return(nil).Once() + Return(nil). + Run(func(args mock.Arguments) { + entries := args.Get(1).([]*log.Entry) + assert.True(t, slices.EqualFunc(wantEntries, entries, func(wantEntry, gotEntry *log.Entry) bool { + assert.NotEmpty(t, gotEntry.ID) + assert.NotEmpty(t, gotEntry.Timestamp) + gotEntry.ID = wantEntry.ID // игнорируем ID + gotEntry.Timestamp = wantEntry.Timestamp // игнорируем Timestamp + return reflect.DeepEqual(wantEntry, gotEntry) + })) + }). + Once() ws := NewBufferedWriteSyncer(service) logger := WithLogService(zap.NewNop(), ws) @@ -42,34 +76,5 @@ func TestExample(t *testing.T) { err := ws.Stop() assert.NoError(t, err) - wantEntries := []*log.Entry{ - { - LogLevel: log.Level(zapcore.InfoLevel), - Message: "создан элемент коллекции", - Category: "create", - Component: "Items.Service", - Event: "Items.Create", - Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl", - Caller: "/users/PHVz", - Attr: "any", - Tags: []string{"tag1", "tag2", "tag3"}, - }, - { - LogLevel: log.Level(zapcore.WarnLevel), - Message: "изменен элемент коллекции", - Category: "update", - Component: "Items.Service", - Event: "Items.Update", - Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl/revs/cmV2cw", - Caller: "/users/PHVz", - }, - } - - service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { - return len(entries) == 2 && slices.EqualFunc(entries, wantEntries, func(entryA, entryB *log.Entry) bool { - entryA.ID = entryB.ID // игнорируем ID - entryA.Timestamp = entryB.Timestamp // игнорируем Timestamp - return reflect.DeepEqual(entryA, entryB) - }) - })) + service.AssertExpectations(t) }