42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package predictive
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestAccessPredictor_Basic(t *testing.T) {
|
|
t.Parallel()
|
|
p := NewAccessPredictor()
|
|
p.RecordSequence("a/b/c1", "a/b/c2")
|
|
next := p.PredictNext("a/b/c1")
|
|
if len(next) == 0 {
|
|
t.Log("no predictions (cold start ok)")
|
|
}
|
|
_ = p.IsPredictedAccess("a/b/c2")
|
|
}
|
|
|
|
func TestCacheWarmer_Basic(t *testing.T) {
|
|
t.Parallel()
|
|
cw := NewCacheWarmer()
|
|
cw.RecordAccess("k1", 100)
|
|
cw.RecordAccess("k1", 100)
|
|
pop := cw.GetPopularContent(5)
|
|
_ = len(pop)
|
|
_ = NewWarmingStats()
|
|
_ = NewActiveWarmer("k", 1, "test")
|
|
}
|
|
|
|
// TestPredictiveCacheManager_ConstructAndStop exercises New + RecordAccess under load + worker + Stop (no leak/panic; issue11).
|
|
func TestPredictiveCacheManager_ConstructAndStop(t *testing.T) {
|
|
t.Parallel()
|
|
pm := NewPredictiveCacheManager()
|
|
for i := 0; i < 20; i++ {
|
|
k := "k" + string(rune('0'+i%5))
|
|
pm.RecordAccess(k, "", 100) // use actual API (RecordAccess); exercises warmer+predictor paths
|
|
}
|
|
// Stop exercises wg + cancel for workers
|
|
pm.Stop()
|
|
// double stop safe
|
|
pm.Stop()
|
|
}
|