mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-08-17 04:36:50 +00:00
* test(s3/lifecycle): bundle reader + scheduler helper coverage Bundles direct tests for previously-uncovered helpers in two packages. Bumps reader 73.2% → 79.2% and scheduler 71.6% → 73.6%. Reader Event predicates (4): - IsCreate: NewEntry-only event classifies as create - IsDelete: OldEntry-only event classifies as delete - both entries (update): neither IsCreate nor IsDelete (strict exclusivity so router routes updates through their own path) - no entries (degenerate): neither (so a metadata-only filer event with no payload doesn't trigger spurious dispatches) Reader LogStartup (4): exercises both shape branches (single-shard ShardID vs ShardPredicate), the explicit-StartTsNs override path, and the Cursor.MinTsNs fallback when StartTsNs=0. Side-effect-only function; tests pin compile-time shape and visit each code path. Scheduler pipelineFanout.InjectEvent (5): - nil event silently absorbed (no follow-up panic in receiving pipeline) - unknown shard returns nil (forward-compat for future shard-mapping gaps) - known shard succeeds - ctx cancellation propagates when underlying pipeline's buffer fills - routes to the correct pipeline among multiple, with cross-pipeline isolation proven via per-pipeline buffer state * test(s3/lifecycle): rename canceled to canceledCtx in fanout test Per gemini review on #9412: a bare 'canceled' identifier reads like a bool. Rename to canceledCtx so the type is obvious at the call site.
45 lines
1.5 KiB
Go
45 lines
1.5 KiB
Go
package reader
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// LogStartup writes a single glog line summarising the reader's
|
|
// resume position; the only behavioral output is a side effect on the
|
|
// log sink, but exercising both branches still pins compile-time
|
|
// shape (e.g. that ShardPredicate-set readers don't trip on a missing
|
|
// ShardID and vice versa) and lets coverage actually visit the code.
|
|
|
|
func TestLogStartup_ShardIDOnly(t *testing.T) {
|
|
// Single-shard configuration: ShardID is set, ShardPredicate is nil,
|
|
// no Cursor, no StartTsNs. The function must run without panic.
|
|
r := &Reader{ShardID: 7, EventBudget: 100}
|
|
r.LogStartup()
|
|
}
|
|
|
|
func TestLogStartup_ShardPredicate(t *testing.T) {
|
|
// ShardPredicate-set readers take a different log branch; pinning
|
|
// the call here catches a regression that returns or panics.
|
|
r := &Reader{
|
|
ShardPredicate: func(int) bool { return true },
|
|
EventBudget: 100,
|
|
}
|
|
r.LogStartup()
|
|
}
|
|
|
|
func TestLogStartup_StartTsNsOverridesCursor(t *testing.T) {
|
|
// Explicit StartTsNs takes precedence over Cursor.MinTsNs; this
|
|
// branch is otherwise only hit when a worker is replaying a
|
|
// specific position. Run it through to make sure the override is
|
|
// honored without consulting the Cursor.
|
|
r := &Reader{ShardID: 0, StartTsNs: 1700000000_000_000_000, Cursor: NewCursor()}
|
|
r.LogStartup()
|
|
}
|
|
|
|
func TestLogStartup_CursorMinFallback(t *testing.T) {
|
|
// StartTsNs=0 with a non-nil Cursor falls back to Cursor.MinTsNs.
|
|
c := NewCursor()
|
|
r := &Reader{ShardID: 0, Cursor: c}
|
|
r.LogStartup()
|
|
}
|