store: migration 0009 — admin-creds kind + host_repo_stats
This commit is contained in:
@@ -84,6 +84,55 @@ func TestMigrateIsIdempotent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigration0009Schema(t *testing.T) {
|
||||
t.Parallel()
|
||||
s := openTestStore(t)
|
||||
ctx := context.Background()
|
||||
|
||||
// host_credentials must have a composite PK (host_id, kind).
|
||||
// We verify this by inserting two rows for the same host_id (different kinds)
|
||||
// and confirming a duplicate (host_id, kind) fails.
|
||||
_, err := s.DB().ExecContext(ctx,
|
||||
`INSERT INTO hosts (id, name, os, arch, enrolled_at) VALUES (?,?,?,?,?)`,
|
||||
"h-0009", "test-host", "linux", "amd64", "2026-01-01T00:00:00Z")
|
||||
if err != nil {
|
||||
t.Fatalf("insert host: %v", err)
|
||||
}
|
||||
now := "2026-01-01T00:00:00Z"
|
||||
if _, err := s.DB().ExecContext(ctx,
|
||||
`INSERT INTO host_credentials (host_id, kind, enc_repo_creds, updated_at) VALUES (?,?,?,?)`,
|
||||
"h-0009", "repo", "enc-repo", now); err != nil {
|
||||
t.Fatalf("insert repo creds: %v", err)
|
||||
}
|
||||
if _, err := s.DB().ExecContext(ctx,
|
||||
`INSERT INTO host_credentials (host_id, kind, enc_repo_creds, updated_at) VALUES (?,?,?,?)`,
|
||||
"h-0009", "admin", "enc-admin", now); err != nil {
|
||||
t.Fatalf("insert admin creds: %v", err)
|
||||
}
|
||||
// Duplicate (host_id, kind) must fail.
|
||||
if _, err := s.DB().ExecContext(ctx,
|
||||
`INSERT INTO host_credentials (host_id, kind, enc_repo_creds, updated_at) VALUES (?,?,?,?)`,
|
||||
"h-0009", "repo", "enc-repo-2", now); err == nil {
|
||||
t.Fatal("expected unique constraint violation on (host_id, kind), got nil")
|
||||
}
|
||||
|
||||
// host_repo_stats table must exist with expected columns.
|
||||
if _, err := s.DB().ExecContext(ctx,
|
||||
`INSERT INTO host_repo_stats (host_id, lock_present, updated_at) VALUES (?,?,?)`,
|
||||
"h-0009", 0, now); err != nil {
|
||||
t.Fatalf("insert host_repo_stats: %v", err)
|
||||
}
|
||||
var lockPresent int
|
||||
if err := s.DB().QueryRowContext(ctx,
|
||||
`SELECT lock_present FROM host_repo_stats WHERE host_id = ?`, "h-0009",
|
||||
).Scan(&lockPresent); err != nil {
|
||||
t.Fatalf("select host_repo_stats: %v", err)
|
||||
}
|
||||
if lockPresent != 0 {
|
||||
t.Errorf("expected lock_present=0, got %d", lockPresent)
|
||||
}
|
||||
}
|
||||
|
||||
func TestForeignKeysEnforced(t *testing.T) {
|
||||
t.Parallel()
|
||||
s := openTestStore(t)
|
||||
|
||||
Reference in New Issue
Block a user