feat: complete 2.0.7.12 platform overhaul

This commit is contained in:
2026-08-16 19:33:03 +08:00
parent 73555cd04c
commit c9fa6f7a88
159 changed files with 13243 additions and 2539 deletions
@@ -0,0 +1,42 @@
package web
import (
"sync"
"sync/atomic"
"testing"
"time"
)
func TestDashboardSnapshotCacheSharesConcurrentBuildAndInvalidates(t *testing.T) {
cache := newDashboardSnapshotCache(time.Minute)
var builds atomic.Int32
build := func() (map[string]any, error) {
builds.Add(1)
time.Sleep(15 * time.Millisecond)
return map[string]any{"ok": true}, nil
}
var wait sync.WaitGroup
for range 12 {
wait.Add(1)
go func() {
defer wait.Done()
value, _, err := cache.Get("24h", build)
if err != nil || value["ok"] != true {
t.Errorf("Get returned value=%#v err=%v", value, err)
}
}()
}
wait.Wait()
if got := builds.Load(); got != 1 {
t.Fatalf("concurrent cache builds = %d, want 1", got)
}
cache.Invalidate()
if _, hit, err := cache.Get("24h", build); err != nil || hit {
t.Fatalf("invalidated cache returned hit=%v err=%v", hit, err)
}
if got := builds.Load(); got != 2 {
t.Fatalf("builds after invalidation = %d, want 2", got)
}
}