mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 15:04:00 +01: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
 | 
						|
}
 |