code.gitea.io/gitea@v1.22.3/modules/cache/context_test.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package cache
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestWithCacheContext(t *testing.T) {
    15  	ctx := WithCacheContext(context.Background())
    16  
    17  	v := GetContextData(ctx, "empty_field", "my_config1")
    18  	assert.Nil(t, v)
    19  
    20  	const field = "system_setting"
    21  	v = GetContextData(ctx, field, "my_config1")
    22  	assert.Nil(t, v)
    23  	SetContextData(ctx, field, "my_config1", 1)
    24  	v = GetContextData(ctx, field, "my_config1")
    25  	assert.NotNil(t, v)
    26  	assert.EqualValues(t, 1, v.(int))
    27  
    28  	RemoveContextData(ctx, field, "my_config1")
    29  	RemoveContextData(ctx, field, "my_config2") // remove a non-exist key
    30  
    31  	v = GetContextData(ctx, field, "my_config1")
    32  	assert.Nil(t, v)
    33  
    34  	vInt, err := GetWithContextCache(ctx, field, "my_config1", func() (int, error) {
    35  		return 1, nil
    36  	})
    37  	assert.NoError(t, err)
    38  	assert.EqualValues(t, 1, vInt)
    39  
    40  	v = GetContextData(ctx, field, "my_config1")
    41  	assert.EqualValues(t, 1, v)
    42  
    43  	now := timeNow
    44  	defer func() {
    45  		timeNow = now
    46  	}()
    47  	timeNow = func() time.Time {
    48  		return now().Add(5 * time.Minute)
    49  	}
    50  	v = GetContextData(ctx, field, "my_config1")
    51  	assert.Nil(t, v)
    52  }
    53  
    54  func TestWithNoCacheContext(t *testing.T) {
    55  	ctx := context.Background()
    56  
    57  	const field = "system_setting"
    58  
    59  	v := GetContextData(ctx, field, "my_config1")
    60  	assert.Nil(t, v)
    61  	SetContextData(ctx, field, "my_config1", 1)
    62  	v = GetContextData(ctx, field, "my_config1")
    63  	assert.Nil(t, v) // still no cache
    64  
    65  	ctx = WithCacheContext(ctx)
    66  	v = GetContextData(ctx, field, "my_config1")
    67  	assert.Nil(t, v)
    68  	SetContextData(ctx, field, "my_config1", 1)
    69  	v = GetContextData(ctx, field, "my_config1")
    70  	assert.NotNil(t, v)
    71  
    72  	ctx = WithNoCacheContext(ctx)
    73  	v = GetContextData(ctx, field, "my_config1")
    74  	assert.Nil(t, v)
    75  	SetContextData(ctx, field, "my_config1", 1)
    76  	v = GetContextData(ctx, field, "my_config1")
    77  	assert.Nil(t, v) // still no cache
    78  }