Move separate caches to one cache -- functionServiceCache. It can be looked up by function, can update atime by address, and can be deleted by podname. This removes the other caches. Some of the concurrency logic is still a bit hairy; it might be better not to use fission.Cache.
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package poolmgr
|
|
|
|
import (
|
|
"log"
|
|
"testing"
|
|
|
|
"github.com/platform9/fission"
|
|
"time"
|
|
)
|
|
|
|
func TestFunctionServiceCache(t *testing.T) {
|
|
fsc := MakeFunctionServiceCache()
|
|
if fsc == nil {
|
|
log.Panicf("error creating cache")
|
|
}
|
|
|
|
var fsvc *funcSvc
|
|
now := time.Now()
|
|
|
|
fsvc = &funcSvc{
|
|
function: &fission.Metadata{
|
|
Name: "foo",
|
|
Uid: "1212",
|
|
},
|
|
environment: &fission.Environment{
|
|
Metadata: fission.Metadata{
|
|
Name: "foo-env",
|
|
Uid: "2323",
|
|
},
|
|
RunContainerImageUrl: "fission/foo-env",
|
|
},
|
|
address: "xxx",
|
|
podName: "yyy",
|
|
ctime: now,
|
|
atime: now,
|
|
}
|
|
err, _ := fsc.Add(*fsvc)
|
|
if err != nil {
|
|
fsc.Log()
|
|
log.Panicf("Failed to add fsvc: %v", err)
|
|
}
|
|
|
|
f, err := fsc.GetByFunction(fsvc.function)
|
|
if err != nil {
|
|
fsc.Log()
|
|
log.Panicf("Failed to get fsvc: %v", err)
|
|
}
|
|
fsvc.atime = f.atime
|
|
fsvc.ctime = f.ctime
|
|
if *f != *fsvc {
|
|
fsc.Log()
|
|
log.Panicf("Incorrect fsvc \n(expected: %#v)\n (found: %#v)", fsvc, f)
|
|
}
|
|
|
|
err = fsc.TouchByAddress(fsvc.address)
|
|
if err != nil {
|
|
fsc.Log()
|
|
log.Panicf("Failed to touch fsvc: %v", err)
|
|
}
|
|
|
|
err = fsc.DeleteByPod(fsvc.podName)
|
|
if err != nil {
|
|
fsc.Log()
|
|
log.Panicf("Failed to delete fsvc: %v", err)
|
|
}
|
|
|
|
_, err = fsc.GetByFunction(fsvc.function)
|
|
if err == nil {
|
|
fsc.Log()
|
|
log.Panicf("found fsvc while expecting empty cache", err)
|
|
}
|
|
}
|