postgresqlTestHook
این قلاب یک سرور PostgreSQL را در طول checkPhase راهاندازی میکند. مثال:
{
stdenv,
postgresql,
postgresqlTestHook,
}:
stdenv.mkDerivation {
# ...
nativeCheckInputs = [
postgresql
postgresqlTestHook
];
} اگر از checkPhase سفارشی استفاده میکنید، به یاد داشته باشید که فراخوانیهای runHook را اضافه کنید:
checkPhase ''
runHook preCheck
# ... your tests
runHook postCheck
'' متغیرها
منطق قلاب تعداد مشخصی متغیر را میخواند و در صورت تنظیمنشدن یا خالی بودن، آنها را به یک مقدار پیشفرض مقداردهی میکند.
متغیرهای صادرشده:
PGDATA: مکان فایلهای سرور.PGHOST: مکان پوشهٔ سوکت دامنهی یونیکس؛hostپیشفرض در یک رشتهی اتصال (connection string).PGUSER: کاربر برای ساخت / ورود با آن، پیشفرض:test_user.PGDATABASE: نام پایگاهداده، پیشفرض:test_db.
متغیرهای مخصوص Bash:
postgresqlTestUserOptions: گزینههای SQL مورد استفاده هنگام ساخت نقش$PGUSER، پیشفرض:"LOGIN". مثال:"LOGIN SUPERUSER"postgresqlTestSetupSQL: دستورات SQL برای اجرا به عنوان مدیر پایگاهداده پس از راهاندازی، پیشفرض: دستوراتی که$PGUSERو$PGDATABASEرا میسازند.postgresqlTestSetupCommands: دستورات bash برای اجرا پس از شروع پایگاهداده، پیشفرض آن اجرای$postgresqlTestSetupSQLبه عنوان مدیر پایگاهداده است.postgresqlEnableTCP: برای فعالسازی شنود TCP روی1تنظیم شود. غیرقابلاعتماد (Flaky)؛ توصیه نمیشود.postgresqlStartCommands: بهطور پیشفرضpg_ctl start.postgresqlExtraSettings: پیکربندی اضافی برای افزودن بهpostgresql.conf
قلابها
تعدادی قلاب اضافی در postgresqlTestHook اجرا میشوند:
postgresqlTestSetupPost: پس از آمادهسازی و پیکربندی postgresql اجرا میشود.
TCP و ایزولهسازی Nix
postgresqlEnableTCP به ایزولهسازی شبکه متکی است که در macOS و برخی نصبهای سفارشی Nix در دسترس نیست و منجر به تستهای غیرقابلاعتماد میشود.
به همین دلیل، این گزینه بهطور پیشفرض غیرفعال است.
راهکار ترجیحی این است که مجموعه تست را مجبور کنید از اتصال سوکت دامنهی یونیکس استفاده کند. این رفتار پیشفرض در زمانی است که هیچ پارامتر اتصال host ارائه نشده باشد.
با این حال، برخی مجموعههای تست مقداری را برای host به صورت هاردکد در خود دارند، بنابراین ممکن است به یک پچ نیاز باشد. اگر میتوانید پچ را به آپاستریم ارسال کنید، میتوانید کاری کنید که در صورت تنظیم بودن متغیر محیطی PGHOST، مقدار host بهطور پیشفرض به آن اشاره کند. در غیر این صورت، میتوانید آن را به صورت محلی پچ کنید تا پارامتر host در رشته اتصال به طور کامل حذف شود.
نکته
خطای
libpq: failed (could not receive data from server: Connection refusedعموماً نشاندهندهٔ این است که مجموعه تست در حال تلاش برای برقراری اتصال از طریق TCP است.