Files
knowledge-governance/cmd/worker/library_target_integration_test.go
T
姚章浩 7ab2eb1ccf
build / build (push) Successful in 1m47s
fix(library): 按目标身份隔离版本授权与执行历史
2026-10-31 02:15:15 +08:00

42 lines
1.7 KiB
Go

package main
import (
"context"
"encoding/json"
"strings"
"testing"
"time"
"knowledge-governance/internal/appconfig"
"knowledge-governance/internal/governance"
"knowledge-governance/internal/jobs"
)
func TestLibraryReleaseRejectsAnotherTargetBeforeMaintenance(t *testing.T) {
legacy, pool := openLedgerStore(t)
config := appconfig.Config{LibraryTargetInstance: "new-cloud-target"}
current := legacy.WithLibraryTarget(config.LibraryTargetIdentity())
ctx := context.Background()
now := time.Now()
job, _, err := legacy.CreateLibraryJob(ctx, governance.LibraryJob{ID: "old-target-job", Scope: "internal", Kind: governance.LibraryJobSync, IdempotencyKey: "old-target-job", RequestDigest: "digest", QueueJobID: "queue-old", TargetSnapshotID: "snapshot"}, governance.SyncStages(), now)
if err != nil {
t.Fatal(err)
}
payload, _ := json.Marshal(libraryReleasePayload{LibraryJobID: job.ID, Scope: "internal", TargetSnapshotID: "snapshot"})
err = runLibraryRelease(ctx, current, config, jobs.Job{ID: "queue-old", Payload: payload}, governance.LibraryJobSync)
if err == nil || !strings.Contains(err.Error(), "拒绝在任何维护动作前继续") {
t.Fatalf("must reject at admission, not after opening a target: %v", err)
}
var attempts, locks int
if err := pool.QueryRow(ctx, `SELECT (SELECT count(*) FROM library_attempts), (SELECT count(*) FROM library_instance_maintenance)`).Scan(&attempts, &locks); err != nil {
t.Fatal(err)
}
if attempts != 0 || locks != 0 {
t.Fatalf("foreign request caused side effects: attempts=%d locks=%d", attempts, locks)
}
got, err := legacy.LibraryJob(ctx, job.ID)
if err != nil || got.State != governance.LibraryJobPending {
t.Fatalf("old job was modified: %+v %v", got, err)
}
}