diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2021-11-16 19:02:13 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2021-11-16 19:02:13 +0300 |
commit | 099aba7980795feb759f60d0045ecaf663d51d08 (patch) | |
tree | 9758d9e3aebf733a6cd4d1d5b0cc10e058a371e3 | |
parent | bb7fa728e9206c7b2f9ede313f3db7b616af9350 (diff) | |
parent | 1fd88271f4af2d29ad60a6c56cc14f59a4922868 (diff) |
Merge branch 'pks-objectpool-fix-logging-data-race' into 'master'
objectpool: Fix data race with logger
Closes #3914
See merge request gitlab-org/gitaly!4080
-rw-r--r-- | internal/gitaly/service/objectpool/fetch_into_object_pool_test.go | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/internal/gitaly/service/objectpool/fetch_into_object_pool_test.go b/internal/gitaly/service/objectpool/fetch_into_object_pool_test.go index 185b1173d..42175a8fb 100644 --- a/internal/gitaly/service/objectpool/fetch_into_object_pool_test.go +++ b/internal/gitaly/service/objectpool/fetch_into_object_pool_test.go @@ -1,16 +1,13 @@ package objectpool import ( - "bytes" - "encoding/json" "os" "path/filepath" - "strings" "testing" "time" "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v14/internal/backchannel" @@ -117,8 +114,8 @@ func TestFetchIntoObjectPool_CollectLogStatistics(t *testing.T) { testcfg.BuildGitalyHooks(t, cfg) locator := config.NewLocator(cfg) - logBuffer := &bytes.Buffer{} - logger := &logrus.Logger{Out: logBuffer, Formatter: &logrus.JSONFormatter{}, Level: logrus.InfoLevel} + + logger, hook := test.NewNullLogger() serverSocketPath := runObjectPoolServer(t, cfg, locator, logger) conn, err := grpc.Dial(serverSocketPath, grpc.WithInsecure()) @@ -141,15 +138,26 @@ func TestFetchIntoObjectPool_CollectLogStatistics(t *testing.T) { _, err = client.FetchIntoObjectPool(ctx, req) require.NoError(t, err) - msgs := strings.Split(logBuffer.String(), "\n") const key = "count_objects" - for _, msg := range msgs { - if strings.Contains(msg, key) { - var out map[string]interface{} - require.NoError(t, json.NewDecoder(strings.NewReader(msg)).Decode(&out)) - require.Contains(t, out, key, "there is no any information about statistics") - countObjects := out[key].(map[string]interface{}) - assert.Contains(t, countObjects, "count") + for _, logEntry := range hook.AllEntries() { + if stats, ok := logEntry.Data[key]; ok { + require.IsType(t, map[string]interface{}{}, stats) + + var keys []string + for key := range stats.(map[string]interface{}) { + keys = append(keys, key) + } + + require.ElementsMatch(t, []string{ + "count", + "garbage", + "in-pack", + "packs", + "prune-packable", + "size", + "size-garbage", + "size-pack", + }, keys) return } } |