mirror of
https://github.com/go-gitea/gitea.git
synced 2025-04-22 09:28:45 +03:00

When list commits, some of the commits authors are the same at many situations. But current logic will always fetch the same GPG keys from database. This PR will cache the GPG keys, emails and users for the context so that reducing the database queries. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cache
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestWithCacheContext(t *testing.T) {
|
|
ctx := WithCacheContext(t.Context())
|
|
|
|
v := GetContextData(ctx, "empty_field", "my_config1")
|
|
assert.Nil(t, v)
|
|
|
|
const field = "system_setting"
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
SetContextData(ctx, field, "my_config1", 1)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.NotNil(t, v)
|
|
assert.Equal(t, 1, v.(int))
|
|
|
|
RemoveContextData(ctx, field, "my_config1")
|
|
RemoveContextData(ctx, field, "my_config2") // remove a non-exist key
|
|
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
|
|
vInt, err := GetWithContextCache(ctx, field, "my_config1", func(context.Context, string) (int, error) {
|
|
return 1, nil
|
|
})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1, vInt)
|
|
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.EqualValues(t, 1, v)
|
|
|
|
now := timeNow
|
|
defer func() {
|
|
timeNow = now
|
|
}()
|
|
timeNow = func() time.Time {
|
|
return now().Add(5 * time.Minute)
|
|
}
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
}
|
|
|
|
func TestWithNoCacheContext(t *testing.T) {
|
|
ctx := t.Context()
|
|
|
|
const field = "system_setting"
|
|
|
|
v := GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
SetContextData(ctx, field, "my_config1", 1)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v) // still no cache
|
|
|
|
ctx = WithCacheContext(ctx)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
SetContextData(ctx, field, "my_config1", 1)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.NotNil(t, v)
|
|
|
|
ctx = WithNoCacheContext(ctx)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v)
|
|
SetContextData(ctx, field, "my_config1", 1)
|
|
v = GetContextData(ctx, field, "my_config1")
|
|
assert.Nil(t, v) // still no cache
|
|
}
|