Adding upstream version 3.0.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
4199417ac3
commit
8274b1bf1b
21 changed files with 2147 additions and 0 deletions
131
clientprovider_test.go
Normal file
131
clientprovider_test.go
Normal file
|
@ -0,0 +1,131 @@
|
|||
package g8
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/TwiN/gocache/v2"
|
||||
)
|
||||
|
||||
var (
|
||||
getClientByTokenFunc = func(token string) *Client {
|
||||
if token == "valid-token" {
|
||||
return NewClient("valid-token").WithData("client-data")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
)
|
||||
|
||||
func TestClientProvider_GetClientByToken(t *testing.T) {
|
||||
provider := NewClientProvider(getClientByTokenFunc)
|
||||
if client := provider.GetClientByToken("valid-token"); client == nil {
|
||||
t.Error("should've returned a client")
|
||||
} else if client.Data != "client-data" {
|
||||
t.Error("expected client data to be 'client-data', got", client.Data)
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("should've returned nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestClientProvider_WithCache(t *testing.T) {
|
||||
provider := NewClientProvider(getClientByTokenFunc).WithCache(gocache.NoExpiration, 10000)
|
||||
if provider.cache.(*gocache.Cache).Count() != 0 {
|
||||
t.Error("expected cache to be empty")
|
||||
}
|
||||
if client := provider.GetClientByToken("valid-token"); client == nil {
|
||||
t.Error("expected client, got nil")
|
||||
}
|
||||
if provider.cache.(*gocache.Cache).Count() != 1 {
|
||||
t.Error("expected cache size to be 1")
|
||||
}
|
||||
if client := provider.GetClientByToken("valid-token"); client == nil {
|
||||
t.Error("expected client, got nil")
|
||||
}
|
||||
if provider.cache.(*gocache.Cache).Count() != 1 {
|
||||
t.Error("expected cache size to be 1")
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("expected nil, got", client)
|
||||
}
|
||||
if provider.cache.(*gocache.Cache).Count() != 2 {
|
||||
t.Error("expected cache size to be 2")
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("expected nil, got", client)
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("should've returned nil (cached)")
|
||||
}
|
||||
}
|
||||
|
||||
func TestClientProvider_WithCacheAndExpiration(t *testing.T) {
|
||||
provider := NewClientProvider(getClientByTokenFunc).WithCache(10*time.Millisecond, 10)
|
||||
provider.GetClientByToken("token")
|
||||
if provider.cache.(*gocache.Cache).Count() != 1 {
|
||||
t.Error("expected cache size to be 1")
|
||||
}
|
||||
if provider.cache.(*gocache.Cache).Stats().ExpiredKeys != 0 {
|
||||
t.Error("expected cache statistics to report 0 expired key")
|
||||
}
|
||||
time.Sleep(15 * time.Millisecond)
|
||||
provider.GetClientByToken("token")
|
||||
if provider.cache.(*gocache.Cache).Stats().ExpiredKeys != 1 {
|
||||
t.Error("expected cache statistics to report 1 expired key")
|
||||
}
|
||||
}
|
||||
|
||||
type customCache struct {
|
||||
entries map[string]any
|
||||
sync.Mutex
|
||||
}
|
||||
|
||||
func (c *customCache) Get(key string) (value any, exists bool) {
|
||||
c.Lock()
|
||||
v, exists := c.entries[key]
|
||||
c.Unlock()
|
||||
return v, exists
|
||||
}
|
||||
|
||||
func (c *customCache) Set(key string, value any) {
|
||||
c.Lock()
|
||||
if c.entries == nil {
|
||||
c.entries = make(map[string]any)
|
||||
}
|
||||
c.entries[key] = value
|
||||
c.Unlock()
|
||||
}
|
||||
|
||||
var _ Cache = (*customCache)(nil)
|
||||
|
||||
func TestClientProvider_WithCustomCache(t *testing.T) {
|
||||
provider := NewClientProvider(getClientByTokenFunc).WithCustomCache(&customCache{})
|
||||
if len(provider.cache.(*customCache).entries) != 0 {
|
||||
t.Error("expected cache to be empty")
|
||||
}
|
||||
if client := provider.GetClientByToken("valid-token"); client == nil {
|
||||
t.Error("expected client, got nil")
|
||||
}
|
||||
if len(provider.cache.(*customCache).entries) != 1 {
|
||||
t.Error("expected cache size to be 1")
|
||||
}
|
||||
if client := provider.GetClientByToken("valid-token"); client == nil {
|
||||
t.Error("expected client, got nil")
|
||||
}
|
||||
if len(provider.cache.(*customCache).entries) != 1 {
|
||||
t.Error("expected cache size to be 1")
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("expected nil, got", client)
|
||||
}
|
||||
if len(provider.cache.(*customCache).entries) != 2 {
|
||||
t.Error("expected cache size to be 2")
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("expected nil, got", client)
|
||||
}
|
||||
if client := provider.GetClientByToken("invalid-token"); client != nil {
|
||||
t.Error("should've returned nil (cached)")
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue