Skip to content
Snippets Groups Projects
Commit 0a5955ba authored by ensiouel's avatar ensiouel
Browse files

refactor tests

parent 657f8c26
Branches
Tags
No related merge requests found
...@@ -15,7 +15,12 @@ import ( ...@@ -15,7 +15,12 @@ import (
func TestBufferedWriteSyncer_Write(t *testing.T) { func TestBufferedWriteSyncer_Write(t *testing.T) {
service := &logmocks.Service{} service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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) ws := NewBufferedWriteSyncer(service)
...@@ -28,15 +33,18 @@ func TestBufferedWriteSyncer_Write(t *testing.T) { ...@@ -28,15 +33,18 @@ func TestBufferedWriteSyncer_Write(t *testing.T) {
err = ws.Stop() err = ws.Stop()
require.NoError(t, err) require.NoError(t, err)
service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { service.AssertExpectations(t)
return len(entries) == 2
}))
} }
func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) { func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) {
service := &logmocks.Service{} service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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) ws := NewBufferedWriteSyncer(service)
...@@ -56,15 +64,18 @@ func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) { ...@@ -56,15 +64,18 @@ func TestBufferedWriteSyncer_Write_Concurrent(t *testing.T) {
err := ws.Stop() err := ws.Stop()
require.NoError(t, err) require.NoError(t, err)
service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { service.AssertExpectations(t)
return len(entries) == 100
}))
} }
func TestBufferedWriteSyncer_Flush(t *testing.T) { func TestBufferedWriteSyncer_Flush(t *testing.T) {
service := &logmocks.Service{} service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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) ws := NewBufferedWriteSyncer(service)
...@@ -80,15 +91,18 @@ func TestBufferedWriteSyncer_Flush(t *testing.T) { ...@@ -80,15 +91,18 @@ func TestBufferedWriteSyncer_Flush(t *testing.T) {
err := ws.Stop() err := ws.Stop()
require.NoError(t, err) require.NoError(t, err)
service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { service.AssertExpectations(t)
return len(entries) == 10
}))
} }
func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) { func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) {
service := &logmocks.Service{} service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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)) ws := NewBufferedWriteSyncer(service, WithMaxBufferSize(10))
...@@ -100,15 +114,18 @@ func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) { ...@@ -100,15 +114,18 @@ func TestBufferedWriteSyncer_MaxBufferSize(t *testing.T) {
err := ws.Stop() err := ws.Stop()
require.NoError(t, err) require.NoError(t, err)
service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { service.AssertExpectations(t)
return len(entries) == 10
}))
} }
func TestBufferedWriteSyncer_FlushInterval(t *testing.T) { func TestBufferedWriteSyncer_FlushInterval(t *testing.T) {
service := &logmocks.Service{} service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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)) ws := NewBufferedWriteSyncer(service, WithFlushInterval(time.Second))
...@@ -119,7 +136,5 @@ func TestBufferedWriteSyncer_FlushInterval(t *testing.T) { ...@@ -119,7 +136,5 @@ func TestBufferedWriteSyncer_FlushInterval(t *testing.T) {
time.Sleep(3 * time.Second) // ждем, пока сработает интервал time.Sleep(3 * time.Second) // ждем, пока сработает интервал
service.AssertCalled(t, "Log", mock.Anything, mock.MatchedBy(func(entries []*log.Entry) bool { service.AssertExpectations(t)
return len(entries) == 10
}))
} }
...@@ -15,9 +15,43 @@ import ( ...@@ -15,9 +15,43 @@ import (
) )
func TestExample(t *testing.T) { 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 := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything). 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) ws := NewBufferedWriteSyncer(service)
logger := WithLogService(zap.NewNop(), ws) logger := WithLogService(zap.NewNop(), ws)
...@@ -42,34 +76,5 @@ func TestExample(t *testing.T) { ...@@ -42,34 +76,5 @@ func TestExample(t *testing.T) {
err := ws.Stop() err := ws.Stop()
assert.NoError(t, err) assert.NoError(t, err)
wantEntries := []*log.Entry{ service.AssertExpectations(t)
{
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)
})
}))
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment