Documentation
¶
Overview ¶
Package cachetest 是 data 门面子包:CacheAside 实现契约测试套件(8 场景,含 -race)。
re-export 自 github.com/oekit/pkg/cache/cachetest:类型为泛型 type alias(与源包**完全同一类型**, 双向赋值互通);非泛型函数/变量经 var 引用同一函数值。源包新增导出符号时 本壳需同步(门面跟版税,data 门面化决策已接受)。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Run ¶
func Run[T any](t *testing.T, c Contract[T], factory func(t *testing.T, source pkgcache.SourceFunc[T]) pkgcache.CacheAside[T])
Run 跑完整契约场景(8 个子测试)。
func RunStaleIfError ¶ added in v0.8.2
func RunStaleIfError[T any](t *testing.T, c Contract[T], factory func(t *testing.T, source cache.SourceFuncWithTTL[T]) cache.TTLCacheAside[T])
RunStaleIfError 跑「fail-open stale-if-error」契约场景。
**factory 必须以 WithStaleIfError(true) 构造被测缓存**,否则场景必然失败 (stale-if-error 是构造期开关,套件不探测可选能力)。
每个子测试覆盖一条必须跨实现一致的语义:
- stale_serve_on_error 成功加载后 source 失败 → 返回陈旧值
- no_stale_propagates 无陈旧值时 source 失败 → 上抛错误
- null_marker_not_stale Source 成功 (nil,nil) 后 marker 短路 (nil,nil), 不回 stale 旧值(marker 不参与 stale)
- del_clears_stale Del 后 source 失败 → 上抛(写后失效不得复活)
- stale_no_refill stale 命中不回填缓存(下一跳仍回源)
func RunTTL ¶ added in v0.8.2
func RunTTL[T any](t *testing.T, c Contract[T], factory func(t *testing.T, source cache.SourceFuncWithTTL[T]) cache.TTLCacheAside[T])
RunTTL 跑「回源动态 TTL」契约场景。factory 每个场景调用一次,用套件给定 的 source 构造全新被测缓存(source 可能返回任意 ttl——包括 <=0,factory 原样注入即可);被测缓存的后台资源由 factory 经 t.Cleanup 清理。
每个子测试覆盖一条必须跨实现一致的语义:
- source_ttl_honored source 返回正 TTL → 到期后 miss(有界等待)
- source_ttl_fallback source 返回 ttl<=0 → 回退默认 TTL(回填后仍命中)
- get_or_load_with_ttl GetOrLoadWithTTL 与 GetOrLoad 同语义(回源计数恰 1)
Types ¶
Click to show internal directories.
Click to hide internal directories.