123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package cache
- import (
- "strconv"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- )
- func TestCache(t *testing.T) {
- expiration := 5 * time.Second
- globalCache := GetGlobalCache()
- assert.NotNil(t, globalCache, "NewGlobalCache should return a non-nil instance")
- assert.Equal(t, globalCache, GetGlobalCache(), "GetGlobalCache should return the created instance")
- cacheName := "testCache"
- globalCache.CreateCache(cacheName, expiration)
- createdCache := globalCache.GetCache(cacheName)
- assert.NotNil(t, createdCache, "GetCache should return a non-nil cache")
- key := "testKey"
- value := []byte("testValue")
- createdCache.Set(key, value)
- // Wait for cache to expire
- time.Sleep(expiration + 1*time.Second)
- // Verify that the cache has expired
- ci := globalCache.GetCache(cacheName)
- cachedValue := ci.GetValueForKey(key)
- assert.Nil(t, cachedValue, "Cache should not contain the value after expiration")
- }
- func TestConcurrentAccess(t *testing.T) {
- // Test concurrent access to the cache
- globalCache := NewGlobalCache()
- cacheName := "concurrentCache"
- expiration := 5 * time.Second
- globalCache.CreateCache(cacheName, expiration)
- // Start multiple goroutines to access the cache concurrently
- numGoroutines := 10
- keyPrefix := "key"
- valuePrefix := "value"
- done := make(chan struct{})
- for i := 0; i < numGoroutines; i++ {
- go func(index int) {
- defer func() { done <- struct{}{} }()
- cache := globalCache.GetCache(cacheName)
- key := keyPrefix + strconv.Itoa(index)
- value := valuePrefix + strconv.Itoa(index)
- cache.Set(key, []byte(value))
- // Simulate some work
- time.Sleep(100 * time.Millisecond)
- ci := globalCache.GetCache(cacheName)
- cachedValue := string(ci.GetValueForKey(key))
- assert.Equal(t, value, cachedValue, "Cached value should match the set value")
- }(i)
- }
- // Wait for all goroutines to finish
- for i := 0; i < numGoroutines; i++ {
- <-done
- }
- }
|