v0.1.0
RustBox CI / rustbox (push) Canceled after 0s

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-30 17:22:17 +01:00
1 parent 0421994fe6
commit 425ea7449b
138 files changed
+5705 -1012

No files matched your search

+123
View File
@@ -0,0 +1,123 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def read(path):
return (ROOT / path).read_text()
def test_release_version():
assert 'version = "0.1.0"' in read('Cargo.toml')
assert '# RustBox 0.1.0' in read('README.md')
def test_default_session_storage_is_sqlite_in_data_dir():
cfg = read('src/config.rs')
db = read('src/session_store/database.rs')
assert '"sqlite".to_string()' in cfg
assert 'session_backend' in cfg
assert 'join("rustbox.sqlite")' in db
assert 'config.data_dir' in db
def test_supported_sql_backends_and_query_files():
cfg = read('src/config.rs')
assert '"sqlite" | "mysql" | "pgsql"' in cfg
for dialect in ['sqlite', 'mysql', 'pgsql']:
q = ROOT / f'src/queries/{dialect}/queries.rs'
m = ROOT / f'migrations/{dialect}/V047__sessions.sql'
assert q.is_file(), q
assert m.is_file(), m
assert 'pub mod sessions' in q.read_text()
assert 'CREATE TABLE IF NOT EXISTS sessions' in m.read_text()
def test_legacy_user_migrations_are_scoped_to_sqlite():
pool = read('src/db/pool.rs')
assert '../../migrations/sqlite/V001__initial_schema.sql' in pool
assert (ROOT / 'migrations/sqlite/V046__preset_scale_unlock.sql').is_file()
def test_migrations_are_flat_by_dialect():
for dialect in ["sqlite", "mysql", "pgsql"]:
root = ROOT / "migrations" / dialect
assert root.is_dir()
assert not any(path.is_dir() for path in root.iterdir())
assert (ROOT / "migrations/sqlite/V001__initial_schema.sql").is_file()
assert (ROOT / "migrations/sqlite/V047__sessions.sql").is_file()
def test_persisted_credentials_are_encrypted():
crypto = read('src/session_store/crypto.rs')
session = read('src/auth/session.rs')
assert 'Aes256Gcm' in crypto
assert 'password_ciphertext' in session
assert 'crypto.encrypt(&session.password)' in session
assert 'crypto.decrypt(&record.password_ciphertext)' in session
def test_cluster_shared_reads_are_used_in_request_paths():
middleware = read('src/auth/middleware.rs')
auth = read('src/routes/auth.rs')
ws = read('src/realtime/ws.rs')
assert 'get_account_session_shared' in middleware
assert 'get_browser_accounts_shared' in auth
assert 'get_browser_accounts_shared' in ws
def test_redis_direct_and_sentinel_are_supported():
redis = read('src/session_store/redis_store.rs')
cfg = read('src/config.rs')
assert 'get-master-addr-by-name' in redis
assert 'redis_url' in cfg
assert 'redis_sentinel_nodes' in cfg
assert 'redis_sentinel_master' in cfg
def test_restart_regression_test_exists():
session = read('src/auth/session.rs')
assert 'persistent_sqlite_session_survives_store_restart' in session
assert 'session should survive restart' in session
def test_sqlite_native_link_is_owned_only_by_rusqlite():
import tomllib
cargo = tomllib.loads(read('Cargo.toml'))
sqlx = cargo['dependencies']['sqlx']
assert sqlx['default-features'] is False
assert 'sqlite' not in sqlx['features']
assert {'mysql', 'postgres'} <= set(sqlx['features'])
db = read('src/session_store/database.rs')
assert 'SqlitePool' not in db
assert 'rusqlite::{Connection, params}' in db
def test_user_provisioning_uses_only_sqlite_user_migrator():
user_data = read('src/auth/user_data.rs')
assert 'db::pool::open_user_db(data_dir, user_hash)' in user_data
assert 'embed_migrations' not in user_data
assert 'refinery' not in user_data
def test_refinery_dependency_and_history_bridge_are_removed():
cargo = read('Cargo.toml')
pool = read('src/db/pool.rs')
assert 'refinery =' not in cargo
assert 'refinery_schema_history' not in pool
assert 'sync user_version from refinery' not in pool
def test_release_script_runs_full_locked_rust_gate():
script = read('scripts/build-release.sh')
assert 'cargo fmt --all -- --check' in script
assert 'cargo test --locked' in script
assert 'cargo clippy --locked --all-targets -- -D warnings' in script
assert 'cargo build --release --locked' in script
def test_session_store_selects_only_backend_specific_session_migration():
db = read('src/session_store/database.rs')
for dialect in ('sqlite', 'mysql', 'pgsql'):
assert f'../../migrations/{dialect}/V047__sessions.sql' in db
assert 'embed_migrations' not in db
def test_refinery_is_absent_from_lockfile_too():
lock = read('Cargo.lock')
assert 'name = "refinery"' not in lock
assert 'name = "refinery-core"' not in lock
assert 'name = "refinery-macros"' not in lock