mirror of
https://github.com/openfaas/faas.git
synced 2025-06-09 08:46:48 +00:00
Existing code has been used for scaling up and querying replicas. This meant the new code was deleted and there is less duplication now. The cache store a whole query response rather than just the available replica count and the tests were updated. This has been tested with Docker swarm and the image: openfaas/gateway:scale-17-07-2018 This feature now needs the env-var of scale_from_zero to be enabled in order to turn on the scaling behaviour. Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com>
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func Test_LastRefreshSet(t *testing.T) {
|
|
before := time.Now()
|
|
|
|
fnName := "echo"
|
|
|
|
cache := FunctionCache{
|
|
Cache: make(map[string]*FunctionMeta),
|
|
Expiry: time.Millisecond * 1,
|
|
}
|
|
|
|
if cache.Cache == nil {
|
|
t.Errorf("Expected cache map to be initialized")
|
|
t.Fail()
|
|
}
|
|
|
|
cache.Set(fnName, ServiceQueryResponse{AvailableReplicas: 1})
|
|
|
|
if _, exists := cache.Cache[fnName]; !exists {
|
|
t.Errorf("Expected entry to exist after setting %s", fnName)
|
|
t.Fail()
|
|
}
|
|
|
|
if cache.Cache[fnName].LastRefresh.Before(before) {
|
|
t.Errorf("Expected LastRefresh for function to have been after start of test")
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func Test_CacheExpiresIn1MS(t *testing.T) {
|
|
fnName := "echo"
|
|
|
|
cache := FunctionCache{
|
|
Cache: make(map[string]*FunctionMeta),
|
|
Expiry: time.Millisecond * 1,
|
|
}
|
|
|
|
cache.Set(fnName, ServiceQueryResponse{AvailableReplicas: 1})
|
|
time.Sleep(time.Millisecond * 2)
|
|
|
|
_, hit := cache.Get(fnName)
|
|
|
|
wantHit := false
|
|
|
|
if hit != wantHit {
|
|
t.Errorf("hit, want: %v, got %v", wantHit, hit)
|
|
}
|
|
}
|
|
|
|
func Test_CacheGivesHitWithLongExpiry(t *testing.T) {
|
|
fnName := "echo"
|
|
|
|
cache := FunctionCache{
|
|
Cache: make(map[string]*FunctionMeta),
|
|
Expiry: time.Millisecond * 500,
|
|
}
|
|
|
|
cache.Set(fnName, ServiceQueryResponse{AvailableReplicas: 1})
|
|
|
|
_, hit := cache.Get(fnName)
|
|
wantHit := true
|
|
|
|
if hit != wantHit {
|
|
t.Errorf("hit, want: %v, got %v", wantHit, hit)
|
|
}
|
|
}
|