PRIVOXY-REGRESSION-TEST(1) User Contributed Perl Documentation PRIVOXY-REGRESSION-TEST(1)

privoxy-regression-test - چارچوب آزمون رگرسیون برای Privoxy

privoxy-regression-test [--check-bad-ssl] [--curl curl] [--debug bitmask] [--forks forks] [--fuzzer-feeding] [--fuzzer-feeding] [--help] [--level level] [--local-test-file testfile] [--loops count] [--max-level max-level] [--max-time max-time] [--min-level min-level] --privoxy-address proxy-address --privoxy-cgi-prefix cgi-prefix [--retries retries] [--test-number test-number] [--show-skipped-tests] [--sleep-time seconds] [--verbose] [--version]

ابزار Privoxy-Regression-Test قرار است روزی به یک مجموعه کامل آزمون رگرسیون برای Privoxy تبدیل شود. با این حال هنوز کاملاً به آن مرحله نرسیده است و در حال حاضر فقط می‌تواند عملیات روی سرایندها را بیازماید، کد وضعیت بازگشتی برای درخواست به نشانی‌های اینترنتی دلخواه را بررسی کند و اعمال شدن اقدامات بر آن‌ها را بسنجد.

عملیات مربوط به سرایند کلاینت با درخواست به http://p.p/show-request و بررسی این‌که آیا Privoxy درخواست اولیه را مطابق انتظار تغییر داده است یا خیر آزموده می‌شوند.

درخواست اصلی هم شامل سرایندی است که باید عملیات مورد آزمایش روی آن انجام گیرد و هم شامل یک سرایند اضافی فعال‌کننده برچسب‌گذار است که عملکرد آزمایشی را فعال می‌سازد.

اقدامات اعمال‌شده از طریق http://p.p/show-url-info بررسی می‌شوند.

پیکربندی Privoxy-Regression-Test درون فایل‌های اقدام (action files) نرم‌افزار Privoxy تعبیه شده و از طریق رابط وب Privoxy بارگذاری می‌شود.

این قابلیت آزمایش نسخه‌ای از Privoxy را که روی یک سیستم راه دور اجرا می‌شود آسان‌تر کرده و مانع از به‌روزرسانی آزمون‌ها بدون به‌روزرسانی متناظر در پیکربندی Privoxy می‌شود.

یک بخش آزمون اقدام سرایند کلاینت به شکل زیر است:

# Set Header    = Referer: http://www.example.org.zwiebelsuppe.exit/
# Expect Header = Referer: http://www.example.org/
{+client-header-filter{hide-tor-exit-notation} -hide-referer}
TAG:^client-header-filter\{hide-tor-exit-notation\}$

مثال بالا باعث می‌شود Privoxy-Regression-Test سرایند Referer: http://www.example.org.zwiebelsuppe.exit را تنظیم کند و انتظار داشته باشد که به Referer: http://www.example.org تغییر یابد.

هنگام آزمودن این بخش، Privoxy-Regression-Test سرایند X-Privoxy-Control: client-header-filter{hide-tor-exit-notation} را تنظیم می‌کند که موجب می‌شود برچسب‌گذار privoxy-control برچسب client-header-filter{hide-tor-exit-notation} را ایجاد کند؛ این برچسب در نهایت باعث فعال‌سازی بخش اقدام در Privoxy می‌شود.

توجه داشته باشید که خود اقدامات فقط توسط Privoxy استفاده می‌شوند؛ Privoxy-Regression-Test آن‌ها را نادیده می‌گیرد و تا زمانی که انتظارات برآورده شوند موفقیت‌آمیز عمل خواهد کرد.

یک آزمون واکشی (fetch test) به صورت زیر است:

# Fetch Test = http://p.p/user-manual
# Expect Status Code = 302

این نمونه به Privoxy-Regression-Test می‌گوید که نشانی http://p.p/user-manual را درخواست کرده و انتظار پاسخی با کد وضعیت HTTP 302 داشته باشد. مسلماً این یک آزمون بسیار دقیق نیست و عمدتاً برای ایجاد پوشش کد جهت Valgrind یا اطمینان از نصب صحیح قالب‌ها کاربرد دارد.

اگر مایلید صفحات CGI که به ارجاع‌دهنده معتبر (trusted referer) نیاز دارند را بیازمایید، می‌توانید از ساختار زیر استفاده کنید:

# Trusted CGI Request = http://p.p/edit-actions

این آزمون مانند آزمون‌های معمولی واکشی عمل می‌کند، اما سرایند referer را روی یک مقدار معتبر تنظیم می‌نماید.

اگر هیچ کد وضعیت مورد انتظاری به طور صریح تعیین نشود، کد 200 به کار می‌رود.

برای اطمینان از مسدود بودن یک نشانی:

# Blocked URL = http://www.example.com/blocked

برای اطمینان از اعمال مجموعه مشخصی از اقدامات روی یک نشانی:

# Sticky Actions = +block{foo} +handle-as-empty-document -handle-as-image
# URL = http://www.example.org/my-first-url

اقدامات پایدار (sticky actions) برای تمامی نشانی‌های زیر آن تا رسیدن به دستورالعمل sticky actions بعدی بررسی می‌شوند.

برای اطمینان از این‌که درخواست‌ها برای یک نشانی تغییرمسیر داده می‌شوند:

# Redirected URL = http://www.example.com/redirect-me
# Redirect Destination = http://www.example.org/redirected

برای نادیده گرفتن یک آزمون، خط زیر را اضافه کنید:

# Ignore = Yes

تفاوت بین یک آزمون ردشده و یک آزمون حذف‌شده در این است که حذف آزمون شماره آزمون‌های بعدی را تحت تأثیر قرار می‌دهد، در حالی که آزمون ردشده همچنان بارگذاری می‌شود و شماره آزمون‌ها بدون تغییر باقی می‌ماند.

گاهی تغییرات عمدی کاربر با آزمون‌های پیکربندی پیش‌فرض ناسازگار است و موجب شکست آزمون می‌شود. افزودن دستورالعمل Ignore به آزمون‌های ناموفق راهگشاست، اما نامناسب است زیرا این دستورالعمل احتمالاً در به‌روزرسانی بعدی از بین می‌رود.

شرایط بازنویسی (Overwrite conditions) یک راهکار جایگزین است و می‌تواند در هر فایل اقدامی قرار گیرد، مشروط بر این‌که بعد از آزمونی بیاید که انتظار شکست آن می‌رود. این شرایط باعث می‌شوند تمام آزمون‌های قبلی منطبق با آن شرط رد شوند.

توصیه می‌شود شرط بازنویسی پایین‌تر از بخش سفارشی Privoxy که سبب شکست مورد انتظار آزمون شده، و پیش از آزمون سفارشی که رفتار مورد انتظار کنونی را می‌آزماید قرار گیرد. مثال:

# The following section is expected to overwrite a section in
# default.action, whose effect is being tested. Thus also disable
# the test that is now expected to fail and add a new one.
#
{+block{Facebook makes Firefox even more unstable. Do not want.}}
# Overwrite condition = http://apps.facebook.com/onthefarm/track.php?creative=&cat=friendvisit&subcat=weeds&key=a789a971dc687bee4c20c044834fabdd&next=index.php%3Fref%3Dnotif%26visitId%3D898835505
# Blocked URL = http://apps.facebook.com/
.facebook./

تمام آزمون‌ها دارای سطوح آزمون هستند تا کاربر بتواند اجرای آن‌ها را کنترل کند (به گزینه‌ها (OPTIONS) در ادامه مراجعه کنید). سطوح آزمون یا با دستورالعمل Level یا به صورت ضمنی بر اساس نوع آزمون تعیین می‌شوند.

آزمون‌های تغییرمسیر به صورت پیش‌فرض در سطح 108، آزمون‌های مسدودسازی در سطح 7، آزمون‌های واکشی در سطح 6، آزمون‌های «اقدامات پایدار» در سطح 5، آزمون‌های درخواست‌های معتبر CGI در سطح 3 و آزمون‌های اقدام سرایند کلاینت در سطح 1 قرار دارند.

سطح فعلی آزمون‌های تغییرمسیر بالاتر از مقدار پیش‌فرض max-level است، زیرا آزمون‌های ناموفق منجر به برقراری ارتباطات خروجی می‌شوند. از گزینه --max-level برای اجرای آن‌ها نیز استفاده کنید.

دستورالعمل «Default level offset» می‌تواند برای تغییر سطح پیش‌فرض با یک مقدار مشخص استفاده شود. این دستورالعمل تمام آزمون‌های بعد از خود را تا انتهای فایل یا تا رسیدن به دستورالعمل «Default level offset» بعدی تحت تأثیر قرار می‌دهد. هدف از این دستورالعمل، آسان‌تر کردن رد کردن آزمون‌های مشابه در یک فایل معین بدون نیاز به حذف یا غیرفعال کردن کامل آزمون‌هاست.

--check-bad-ssl به جای اجرای آزمون‌های رگرسیون شرح‌داده‌شده در بالا، صفحاتی را از badssl.com با گواهی‌های نامعتبر درخواست می‌کند تا اطمینان حاصل شود که Privoxy مشکلات گواهی را تشخیص می‌دهد. این گزینه تنها زمانی کار می‌کند که Privoxy با FEATURE_HTTPS_INSPECTION کامپایل شده باشد، به درستی پیکربندی شده باشد و بتواند به اینترنت متصل شود.

--curl curl استفاده از باینری غیرپیش‌فرض curl.

--debug bitmask افزودن ماسک بیتی ارائه‌شده به صورت عدد صحیح به تنظیمات اشکال‌زدایی.

--forks forks تعداد انشعاب‌هایی (forks) که باید پیش از اجرای آزمون‌های رگرسیون آغاز شوند. این گزینه عمدتاً برای آزمون فشار کاربرد دارد.

--fuzzer-address آدرس شنود مورداستفاده هنگام اجرای آزمون‌های رگرسیون. مفید برای اطمینان از این‌که درخواست‌ها برای بارگذاری آزمون‌های رگرسیون به دلیل فازینگ شکست نخورند.

--fuzzer-feeding نادیده گرفتن برخی خطاها که در غیر این صورت باعث می‌شدند Privoxy-Regression-Test آزمون را متوقف کند، زیرا در عملکرد عادی نباید رخ دهند. این گزینه زمانی کاربرد دارد که Privoxy-Regression-Test تنها برای تغذیه یک فازر استفاده می‌شود؛ در این حالت احتمال بالایی وجود دارد که Privoxy یک درخواست نامعتبر دریافت کند و پیام خطا بازگرداند.

--help نمایش گزینه‌های موجود خط فرمان.

--header-fuzzing فضاهای خالی خطی (linear white space) را در سرایندها به گونه‌ای تغییر می‌دهد که نباید بر نتیجه آزمون تأثیر بگذارد.

--level level تنها اجرای آزمون‌هایی با level تعیین‌شده.

--local-test-file test-file آزمون‌ها را از طریق رابط وب Privoxy دریافت نکند، بلکه از یک فایل محلی منفرد استفاده کند. برای آزمودن Privoxy توصیه نمی‌شود، اما می‌تواند برای به کار بردن Privoxy-Regression-Test در آزمودن موارد دیگر، مانند پیکربندی‌های وب‌سرور مفید باشد.

--loop count تکرار چرخه آزمون‌های رگرسیون به تعداد count. مفید برای تغذیه یک فازر، یا هنگام انجام آزمون‌های فشار با چندین نمونه در حال اجرای همزمان از Privoxy-Regression-Test.

--max-level max-level تنها اجرای آزمون‌هایی با level پایین‌تر یا مساوی با مقدار عددی max-level.

--max-time max-time اختصاص max-time ثانیه به Privoxy برای بازگرداندن داده‌ها. افزایش مقدار پیش‌فرض زمانی که Privoxy از طریق Valgrind اجرا می‌شود منطقی است؛ کاهش آن نیز در زمان استفاده از Privoxy-Regression-Test برای تغذیه فازر ممکن است مناسب باشد.

--min-level min-level تنها اجرای آزمون‌هایی با level بالاتر یا مساوی با مقدار عددی min-level. اگر min-level بزرگتر از max-level باشد، مقدار max-level برابر با min-level قرار داده می‌شود.

--privoxy-address proxy-address آدرس شنود Privoxy. اگر تنظیم نشده باشد، مقدار متغیر محیطی http_proxy استفاده خواهد شد، مگر اینکه این متغیر تنظیم نشده باشد که در این صورت از http://127.0.0.1:8118 استفاده می‌شود. proxy-address باید با نحو http_proxy مشخص شود.

--privoxy-cgi-prefix privoxy-cgi-prefix پیشوند مورداستفاده هنگام ساخت نشانی‌هایی که قرار است به رابط CGI نرم‌افزار Privoxy برسند. اگر تنظیم نشده باشد، از http://p.p استفاده می‌شود که انتظار می‌رود با پیکربندی پیش‌فرض Privoxy کار کند. اگر Privoxy با قابلیت FEATURE_HTTPS_INSPECTION ساخته شده باشد، و اگر بازرسی https با اقدام +https-inspection فعال شده باشد، می‌توان از این گزینه با https://p.p استفاده کرد، مشروط بر اینکه سیستم در حال اجرای Privoxy-Regression-Test برای اعتماد به گواهی مورداستفاده Privoxy پیکربندی شده باشد. توجه داشته باشید که در حال حاضر دو آزمون در فایل رسمی regression-tests.action وجود دارند که هنگام استفاده از privoxy-cgi-prefix با https:// انتظار می‌رود با شکست مواجه شوند و به طور خودکار رد نمی‌شوند.

--retries retries تلاش مجدد به تعداد retries.

--test-number test-number تنها اجرای آزمون با شماره مشخص‌شده.

--show-skipped-tests ثبت گزارش آزمون‌های ردشده حتی در صورت خاموش بودن حالت پرگویی (verbose).

--shuffle-tests بر زدن بخش‌های آزمون و آزمون‌های آن‌ها پیش از اجرا. در ترکیب با --forks، این کار می‌تواند شانس تشخیص شرایط مسابقه (race conditions) را افزایش دهد. البته تشخیص برخی مشکلات بدون این گزینه آسان‌تر است.

--sleep-time seconds درنگ به مدت seconds ثانیه میان آزمون‌ها. مفید هنگام اشکال‌زدایی مسائل در سیستم‌هایی که با دقت میلی‌ثانیه لاگ ثبت نمی‌کنند.

--verbose ثبت گزارش آزمون‌های موفقیت‌آمیز. به صورت پیش‌فرض تنها موارد ناموفق ثبت می‌شوند.

--version چاپ نسخه و خروج.

خط تیره دوم اختیاری است، و گزینه‌ها تا زمانی که ابهامی ایجاد نشود می‌توانند کوتاه شوند.

برنامه Privoxy-Regression-Test همراه با فایل regression-tests.action ارائه می‌شود که هدف آن آزمودن تمام اقدامات رسمی تغییردهنده سرایند کلاینت است و می‌تواند برای تأیید نصب صحیح قالب‌ها و فایل‌های راهنمای کاربر به کار رود.

برای استفاده، این فایل باید در دایرکتوری پیکربندی Privoxy کپی شده و پس از آن در فایل پیکربندی Privoxy با خط زیر فراخوانی شود:

actionsfile regression-tests.action

به طور کلی، انتظار می‌رود آزمون‌های آن بدون نیاز به تغییر فایل‌های دیگر action کار کنند، مگر اینکه از قبل برچسب‌گذارهای (taggers) زیادی توسط خودتان اضافه شده باشد. اگر از برچسب‌گذارهایی استفاده می‌کنید که باعث اختلال می‌شوند، ممکن است نیاز باشد آن‌ها را موقتاً برای صفحات CGI نرم‌افزار Privoxy غیرفعال کنید.

برخی از آزمون‌های رگرسیون به ویژگی‌هایی از Privoxy وابسته‌اند که ممکن است در پیکربندی شما غیرفعال باشند. آزمون‌های دارای سطح پایین‌تر از 7 انتظار می‌رود با تمام پیکربندی‌های Privoxy کار کنند (مشروط بر اینکه با FEATURE_GRACEFUL_TERMINATION کامپایل نکرده باشید).

آزمون‌های سطح 9 نیازمند این هستند که Privoxy فایل‌های راهنمای کاربر (User Manual) را ارائه دهد؛ آزمون‌های سطح 12 نیازمند فعال بودن ویرایشگر CGI هستند.

انتظار می‌رود نحو فایل پیکربندی در نسخه‌های آینده دستخوش تغییر شود.

از آنجا که صفحه show-request در Privoxy تنها سرایندهای کلاینت را نشان می‌دهد، Privoxy-Regression-Test نمی‌تواند از آن برای آزمودن اقداماتی از Privoxy که سرایندهای سرور را تغییر می‌دهند استفاده کند.

از آنجا که Privoxy-Regression-Test برای کنترل اقدامات آزمایشی به قابلیت برچسب‌گذاری (tag) نرم‌افزار Privoxy وابسته است، در حال حاضر تنها با نسخه 3.0.7 یا بالاتر Privoxy کار می‌کند.

در حال حاضر Privoxy-Regression-Test صفحه پیکربندی Privoxy را از طریق curl(1) واکشی می‌کند؛ بنابراین باید curl روی سیستم نصب باشد، در غیر این صورت اجرای معنادار Privoxy-Regression-Test امکان‌پذیر نخواهد بود.

privoxy(8) curl(1)

Fabian Keil <fk@fabiankeil.de>

2026-03-31 perl v5.42.2