Files
zzet--gortex/cmd/gortex/daemon_boot_guard_test.go
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

82 lines
2.8 KiB
Go

package main
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"github.com/zzet/gortex/internal/graph"
)
// TestSnapshotRoundTrip_RepoNodeEdgeCounts proves the additive per-repo
// NodeCount / EdgeCount fields survive a save + load cycle — the baseline the
// boot shape-degradation guard compares a reloaded repo against.
func TestSnapshotRoundTrip_RepoNodeEdgeCounts(t *testing.T) {
dir := t.TempDir()
t.Setenv("GORTEX_DAEMON_SNAPSHOT", filepath.Join(dir, "snap.gob.gz"))
orig := graph.New()
orig.AddNode(&graph.Node{ID: "r/a.go::Foo", Name: "Foo", Kind: graph.KindFunction, FilePath: "r/a.go"})
repos := []snapshotRepo{{
RepoPrefix: "r",
RootPath: "/tmp/r",
FileMtimes: map[string]int64{"r/a.go": 123},
NodeCount: 8956,
EdgeCount: 58491,
}}
saveSnapshot(orig, repos, nil, snapshotVector{}, version, zap.NewNop())
restored := graph.New()
result, err := loadSnapshot(restored, zap.NewNop())
require.NoError(t, err)
require.True(t, result.Loaded)
rec, ok := result.Repos["r"]
require.True(t, ok, "repo record must round-trip keyed by prefix")
assert.Equal(t, 8956, rec.NodeCount, "per-repo node count must round-trip")
assert.Equal(t, 58491, rec.EdgeCount, "per-repo edge count must round-trip")
}
func TestBootShapeShortfall(t *testing.T) {
// Baseline: a repo that saved 8956 nodes / 58491 edges.
snap := map[string]*snapshotRepo{
"r": {RepoPrefix: "r", NodeCount: 8956, EdgeCount: 58491},
// A legacy / newly-tracked record with no recorded counts.
"legacy": {RepoPrefix: "legacy", NodeCount: 0, EdgeCount: 0},
}
t.Run("edge collapse trips", func(t *testing.T) {
// The measured degradation: 58491 -> 45026 edges is a 23% drop, which
// does NOT trip the 50% floor — a modest shrink is tolerated.
assert.False(t, bootShapeShortfall(snap, "r", 8512, 45026),
"a 23% edge shrink is below the collapse floor")
// A true collapse (edges more than halved) trips.
assert.True(t, bootShapeShortfall(snap, "r", 8956, 20000),
"edges more than halved must trip the guard")
})
t.Run("node collapse trips", func(t *testing.T) {
assert.True(t, bootShapeShortfall(snap, "r", 3000, 58491),
"nodes more than halved must trip the guard")
})
t.Run("healthy reload does not trip", func(t *testing.T) {
assert.False(t, bootShapeShortfall(snap, "r", 8956, 58491),
"an unchanged reload must not trip")
})
t.Run("zero baseline never trips", func(t *testing.T) {
assert.False(t, bootShapeShortfall(snap, "legacy", 0, 0),
"a record with no recorded counts has no baseline to compare")
})
t.Run("unknown prefix never trips", func(t *testing.T) {
assert.False(t, bootShapeShortfall(snap, "absent", 1, 1),
"a prefix absent from the snapshot has no baseline")
})
}