Documentation
¶
Overview ¶
Package testutil provides shared test utilities for Melange integration tests.
Package testutil provides shared test utilities for Melange integration tests.
Package testutil provides shared test utilities for Melange integration tests.
Index ¶
- Variables
- func AnalyzeKitchenSink() ([]compiler.RelationAnalysis, error)
- func DB(tb testing.TB) *sql.DB
- func DBWithDatabaseSchema(tb testing.TB, databaseSchema string) *sql.DB
- func DSN(tb testing.TB) string
- func DSNWithDatabaseSchema(tb testing.TB, databaseSchema string) string
- func DomainTablesSQL() string
- func EmptyDB(tb testing.TB) *sql.DB
- func KitchenSinkListSubjectsSQL() ([]string, error)
- func LoadKitchenSinkTuples(tb testing.TB, db *sql.DB, tuples []KitchenSinkTuple)
- func PostgresSchema(schema string) string
- func SetupKitchenSinkDB(tb testing.TB) *sql.DB
- func TuplesViewSQL(databaseSchema string) string
- type BulkFixtures
- func (bf *BulkFixtures) AddOrganizationMembers(orgID int64, userIDs []int64, role string) error
- func (bf *BulkFixtures) CreateOrganizations(n int) ([]int64, error)
- func (bf *BulkFixtures) CreatePullRequests(repoID int64, authorIDs []int64, n int) ([]int64, error)
- func (bf *BulkFixtures) CreateRepositories(orgID int64, n int) ([]int64, error)
- func (bf *BulkFixtures) CreateUsers(n int) ([]int64, error)
- func (bf *BulkFixtures) TupleCount() (int, error)
- type DatabaseConfig
- type Fixtures
- func (f *Fixtures) AddOrganizationMembers(orgID int64, userIDs []int64, role string) error
- func (f *Fixtures) CreateOrganizations(n int) ([]int64, error)
- func (f *Fixtures) CreatePullRequests(repoID int64, authorIDs []int64, n int) ([]int64, error)
- func (f *Fixtures) CreateRepositories(orgID int64, n int) ([]int64, error)
- func (f *Fixtures) CreateUsers(n int) ([]int64, error)
- func (f *Fixtures) TupleCount() (int, error)
- type KitchenSinkScale
- type KitchenSinkTuple
Constants ¶
This section is empty.
Variables ¶
var KitchenSinkScaleSmall = KitchenSinkScale{
Name: "small", Users: 40, ServiceAccounts: 6, Groups: 12, GroupChainLen: 4,
Orgs: 4, MembersPerOrg: 12, TeamsPerOrg: 2, ProjectsPerOrg: 3,
FolderDepth: 4, FoldersPerLevel: 2, DocsPerFolder: 3, PlatformAdmins: 2,
}
KitchenSinkScaleSmall is sized for the differential correctness test: small enough to enumerate every (subject, object) pair against check_permission, large enough that every relation has both granted and denied results.
var KitchenSinkScales = []KitchenSinkScale{
{Name: "1K", Users: 200, ServiceAccounts: 20, Groups: 40, GroupChainLen: 4, Orgs: 5, MembersPerOrg: 20, TeamsPerOrg: 3, ProjectsPerOrg: 5, FolderDepth: 4, FoldersPerLevel: 3, DocsPerFolder: 4, PlatformAdmins: 3},
{Name: "10K", Users: 1000, ServiceAccounts: 80, Groups: 120, GroupChainLen: 5, Orgs: 15, MembersPerOrg: 40, TeamsPerOrg: 4, ProjectsPerOrg: 10, FolderDepth: 5, FoldersPerLevel: 4, DocsPerFolder: 6, PlatformAdmins: 5},
{Name: "100K", Users: 5000, ServiceAccounts: 300, Groups: 400, GroupChainLen: 6, Orgs: 40, MembersPerOrg: 80, TeamsPerOrg: 6, ProjectsPerOrg: 20, FolderDepth: 6, FoldersPerLevel: 5, DocsPerFolder: 10, PlatformAdmins: 10},
{Name: "1M", Users: 25000, ServiceAccounts: 1500, Groups: 2000, GroupChainLen: 6, Orgs: 100, MembersPerOrg: 200, TeamsPerOrg: 8, ProjectsPerOrg: 40, FolderDepth: 7, FoldersPerLevel: 6, DocsPerFolder: 16, PlatformAdmins: 25},
}
KitchenSinkScales are the benchmark sizes.
Functions ¶
func AnalyzeKitchenSink ¶ added in v0.8.6
func AnalyzeKitchenSink() ([]compiler.RelationAnalysis, error)
AnalyzeKitchenSink runs the analysis pipeline over the kitchen-sink schema and returns the per-relation analyses (with ListStrategy and Features populated). DB-free; used by the generator-coverage test to assert every strategy and feature combination is exercised.
func DB ¶
DB returns a fully migrated database connection for testing. Each call creates a new isolated database copied from the template. The database is automatically cleaned up when the test completes. Works with both *testing.T and *testing.B.
If DATABASE_URL environment variable is set, connects to remote database instead.
func DBWithDatabaseSchema ¶ added in v0.8.0
func DSN ¶ added in v0.7.0
DSN returns the connection string for an isolated test database. Unlike DB(), it returns the raw DSN so callers can open with any driver. The database is automatically cleaned up when the test completes.
func DSNWithDatabaseSchema ¶ added in v0.8.0
func DomainTablesSQL ¶
func DomainTablesSQL() string
DomainTablesSQL returns the embedded SQL for creating domain tables. Domain tables always live in the public schema.
func EmptyDB ¶
EmptyDB returns an empty database connection for testing. Each call creates a new isolated empty database. The database is automatically cleaned up when the test completes. Works with both *testing.T and *testing.B.
func KitchenSinkListSubjectsSQL ¶ added in v0.8.6
KitchenSinkListSubjectsSQL compiles the kitchen-sink schema and returns the generated list_subjects function bodies. DB-free; used for codegen-shape assertions over a realistic mix of wildcard and non-wildcard relations.
func LoadKitchenSinkTuples ¶ added in v0.8.6
func LoadKitchenSinkTuples(tb testing.TB, db *sql.DB, tuples []KitchenSinkTuple)
LoadKitchenSinkTuples bulk-loads tuples via COPY (batched INSERT fallback).
func PostgresSchema ¶ added in v0.8.0
PostgresSchema returns a literal with the schema name or "current_schema()" if empty.
func SetupKitchenSinkDB ¶ added in v0.8.6
SetupKitchenSinkDB returns a fresh database with the kitchen-sink schema migrated and a melange_tuples view over an (empty) kitchen_sink_tuples base table. Call LoadKitchenSinkTuples to populate it.
func TuplesViewSQL ¶
TuplesViewSQL returns the embedded SQL for creating the tuples view.
Types ¶
type BulkFixtures ¶ added in v0.6.0
type BulkFixtures struct {
// contains filtered or unexported fields
}
BulkFixtures provides factory functions for creating test data using PostgreSQL COPY FROM. This is 10-100x faster than batch INSERTs for large datasets.
func NewBulkFixtures ¶ added in v0.6.0
func NewBulkFixtures(ctx context.Context, db *sql.DB) *BulkFixtures
NewBulkFixtures creates a new BulkFixtures instance for bulk data loading via COPY FROM.
func (*BulkFixtures) AddOrganizationMembers ¶ added in v0.6.0
func (bf *BulkFixtures) AddOrganizationMembers(orgID int64, userIDs []int64, role string) error
AddOrganizationMembers adds users to an organization with the specified role using COPY FROM.
func (*BulkFixtures) CreateOrganizations ¶ added in v0.6.0
func (bf *BulkFixtures) CreateOrganizations(n int) ([]int64, error)
CreateOrganizations creates n organizations using COPY FROM. Falls back to batch INSERT if COPY fails.
func (*BulkFixtures) CreatePullRequests ¶ added in v0.6.0
CreatePullRequests creates pull requests in the given repository using COPY FROM. Cycles through authorIDs for each PR.
func (*BulkFixtures) CreateRepositories ¶ added in v0.6.0
func (bf *BulkFixtures) CreateRepositories(orgID int64, n int) ([]int64, error)
CreateRepositories creates n repositories under an organization using COPY FROM.
func (*BulkFixtures) CreateUsers ¶ added in v0.6.0
func (bf *BulkFixtures) CreateUsers(n int) ([]int64, error)
CreateUsers creates n users using COPY FROM for bulk loading. Falls back to batch INSERT if COPY fails.
func (*BulkFixtures) TupleCount ¶ added in v0.6.0
func (bf *BulkFixtures) TupleCount() (int, error)
TupleCount returns the current count of tuples in the melange_tuples view.
type DatabaseConfig ¶ added in v0.6.0
DatabaseConfig holds configuration for connecting to a database.
func GetDatabaseConfig ¶ added in v0.6.0
func GetDatabaseConfig() DatabaseConfig
GetDatabaseConfig reads database configuration from environment variables. If DATABASE_URL is set, it returns configuration for a remote database. Otherwise, returns an empty config which signals to use testcontainers.
type Fixtures ¶
type Fixtures struct {
// contains filtered or unexported fields
}
Fixtures provides factory functions for creating test data in bulk. All functions use batch inserts for efficiency at scale.
func NewFixtures ¶
NewFixtures creates a new Fixtures instance for bulk data insertion.
func (*Fixtures) AddOrganizationMembers ¶
AddOrganizationMembers adds users to an organization with the specified role. role must be one of: owner, admin, member, billing_manager
func (*Fixtures) CreateOrganizations ¶
CreateOrganizations creates n organizations and returns their IDs.
func (*Fixtures) CreatePullRequests ¶
CreatePullRequests creates pull requests in the given repository. Cycles through authorIDs for each PR.
func (*Fixtures) CreateRepositories ¶
CreateRepositories creates n repositories under an organization and returns their IDs.
func (*Fixtures) CreateUsers ¶
CreateUsers creates n users and returns their IDs.
func (*Fixtures) TupleCount ¶
TupleCount returns the current count of tuples in the melange_tuples view.
type KitchenSinkScale ¶ added in v0.8.6
type KitchenSinkScale struct {
Name string
Users int
ServiceAccounts int
Groups int // total groups, arranged into self-referential nesting chains
GroupChainLen int // nesting depth per chain (exercises self-ref userset CTE)
Orgs int
MembersPerOrg int
TeamsPerOrg int
ProjectsPerOrg int
FolderDepth int // folder tree depth (self-referential recursive TTU)
FoldersPerLevel int
DocsPerFolder int
PlatformAdmins int
}
KitchenSinkScale parameterises the deterministic kitchenSink-tuple generator. The same scale always produces the same tuples (no randomness), so results are reproducible across runs and machines.
type KitchenSinkTuple ¶ added in v0.8.6
type KitchenSinkTuple struct {
SubjectType string
SubjectID string
Relation string
ObjectType string
ObjectID string
}
KitchenSinkTuple is one authorization tuple in the kitchen-sink dataset.
func GenerateKitchenSinkTuples ¶ added in v0.8.6
func GenerateKitchenSinkTuples(s KitchenSinkScale) []KitchenSinkTuple
GenerateKitchenSinkTuples deterministically produces the tuple set for the kitchenSink schema at the given scale. It seeds every direct/linking relation so that list and check have non-trivial, overlapping results across the whole feature matrix. It does not attempt to be "semantically correct" — check_permission is the oracle in the differential test; the generator only needs varied grants.