gpsfake - آزمون
شبیهسازی
کلاینتهای
gpsd با
دادههای
ثبتشده
gpsfake
[گزینهها]
infile
gpsfake -h
gpsfake -V
gpsfake یک
چارچوب
آزمایشی
برای gpsd و
کلاینتهای
آن است. این
ابزار یک pty
(شبهترمینال
یا pseudo-TTY) باز
میکند،
نمونهای
از gpsd را
اجرا
میکند که
سمت اسلیو (slave)
pty را دستگاه GNSS
خود فرض
میکند، و
بهطور
مکرر
محتویات یک
یا چند فایل
لاگ
آزمایشی را
از سمت مستر
(master) به گیرنده
GNSS تزریق
میکند. اگر
چند فایل
لاگ وجود
داشته
باشد،
جملات
آنها به
ترتیبی که
فایلها
مشخص
شدهاند در
یکدیگر
ادغام (interleave)
میشوند.
gpsfake نیازی
به دسترسی
ریشه (root)
ندارد، اما
با دسترسی
ریشه نیز
بهخوبی
اجرا
میشود. تا
زمانی که از
گزینه -P
استفاده
کنید،
میتواند
همزمان با
یک نمونه
عملیاتی gpsd
بدون ایجاد
مشکل اجرا
شود. اجرا با
sudo باعث از
دست رفتن
جزئی
عملکردها
خواهد شد.
فایلهای
لاگ
میتوانند
شامل
بستهها در
هر قالب
پشتیبانیشدهای،
بهویژه NMEA،
SiRF، TSIP یا Zodiac
باشند. خطوط
ابتدایی که
با # شروع
میشوند
بهعنوان
توضیح
(کامنت) تلقی
شده و
نادیده
گرفته
میشوند،
مگر در
موارد خاص
زیر.
این موارد
مستقیماً
توسط gpsfake
تفسیر
میشوند:
•یک
کامنت
بهصورت #Serial: [0-9]
[78][NOE][12]
میتواند
برای تنظیم
پارامترهای
سریال لاگ
بهکار رود -
نرخ باود،
طول کلمه،
بیتهای
توقف.
•یک
کامنت
بهصورت #Transport:
UDP میتواند
برای
شبیهسازی
یک منبع UDP
بهجای pty
عادی
استفاده
شود.
•یک
کامنت
بهصورت #Transport:
TCP میتواند
برای
شبیهسازی
یک منبع TCP
بهجای pty
عادی
استفاده
شود.
این موارد
مستقیماً
توسط gpsd
تفسیر
میشوند:
•یک
کامنت
بهصورت # Date:
yyyy-mm-dd (قالب
تاریخ ISO8601)
میتواند
برای تنظیم
تاریخ
اولیه لاگ
استفاده
شود.
نمونه gpsd
در
پیشزمینه
اجرا
میشود. نخی
(thread) که
دادههای
جعلی GNSS را به
دیمن ارسال
میکند، در
پسزمینه
اجرا
میشود.
-?, -h, --help
چاپ پیام
راهنمای
نحوه
استفاده و
خروج.
-1, --singleshot
فایل لاگ
فقط یک بار
تفسیر
میشود نه
بهصورت
مکرر. این
گزینه برای
تسهیل
آزمونهای
بازگشت (regression testing)
در نظر
گرفته شده
است.
-b, --baton
فعالسازی
نشانگر
پیشرفت
چرخشی (twirling-baton) در
خطای
استاندارد
(stderr). هنگام
پایان،
زمان
سپریشده
را گزارش
میدهد.
-c COUNT, --cycle COUNT
تنظیم
تاخیر بین
جملات بر
حسب ثانیه.
مقادیر
کسری ثانیه
نیز مجاز
هستند.
مقدار
پیشفرض
صفر است
(بدون
تاخیر).
-d LVL, --debug LVL
ارسال
گزینه -D به
دیمن:
بنابراین -D 4
کوتاهنوشت
-o="-D 4" است.
-g, -G, --gdb, --lldb
استفاده
از قابلیت
مانیتور
برای اجرای
نمونه gpsd
درون gpsfake تحت
کنترل gdb یا
lldb. این
گزینهها
همچنین
مهلت زمانی
(timeout) عدم
فعالیت
دیمن را
غیرفعال
میکنند تا
امکان
تعیین نقاط
توقف (breakpoint)
فراهم شود.
در صورت
نیاز، مهلت
زمانی را
میتوان با
گزینه بعدی
-W یا --wait
مجدداً
فعال کرد.
اگر xterm و
متغیر DISPLAY$ در
دسترس
باشند، این
گزینهها
دیباگر را
در یک پنجره
مجزای xterm
اجرا
میکنند تا
دیالوگ
دیباگر از
خروجی
برنامه
تفکیک شود،
در غیر این
صورت آن را
مستقیماً
اجرا
میکنند. در
مورد gdb،
گزینه -tui
همراه با xterm
استفاده
میشود اما
در
حالتهای
دیگر خیر،
زیرا curses و
خروجی
برنامه با
یکدیگر
بهخوبی
سازگار
نیستند.
اگرچه lldb
فاقد گزینه
معادل است،
برخی
نسخهها
دارای
دستور 'gui'
هستند.
-i, --promptme
گامبهگام
در طول
فایلهای
لاگ پیش
میرود.
شماره خط یا
بسته (و در
صورت متنی
بودن
پروتکل،
جمله) را
همراه با "? "
چاپ میکند.
خط فقط
زمانی به gpsd
ارسال
میشود که
کاربر کلید
Enter را فشار
دهد.
-l, --linedump
چاپ
شماره خط یا
بسته درست
پیش از
ارسال هر
جمله به
دیمن. اگر
جمله متنی
باشد (مانند
NMEA)، متن نیز
چاپ میشود.
در غیر این
صورت، بسته
بهصورت
هگزادسیمال
چاپ خواهد
شد (به جز
بستههای RTCM
که اصلاً
چاپ
نمیشوند).
این گزینه
برای بررسی
صحت تشخیص
مرز
بستهها
توسط gpsfake
مفید است.
-m PROG, --monitor PROG
مشخص
کردن یک
برنامه
پایشگر (PROG) که
دیمن باید
درون آن
اجرا شود.
این گزینه
برای
استفاده با
valgrind(1)،
gdb(1) و
برنامههای
مشابه در
نظر گرفته
شده است.
-n, --nowait
ارسال
گزینه -n به
دیمن تا
خواندن
گیرنده GNSS را
بدون منتظر
ماندن برای
کلاینت
آغاز کند
(معادل -o="-n").
-o="OPTS", --option="OPTS"
مشخص
کردن
گزینههای
ارسالی به
دیمن. علامت
مساوی (=) و
نقلقولها
الزامی
هستند تا
گزینههای
gpsd با
گزینههای
gpsfake اشتباه
گرفته
نشوند. برای
شروع
خواندن
گیرنده GNSS
توسط دیمن
بدون
انتظار
برای
کلاینت از
-o="-n"
استفاده
کنید (معادل
-n) که -n را به
دیمن gpsd
میفرستد.
گزینه -o="-D 4"
گزینه -D 4 را
به دیمن
میفرستد
که معادل
استفاده از
-D 4 است.
-p, --pipe
تنظیم
حالت ناظر (watcher
mode) و انتقال
اعلانهای NMEA
و GPSD تولیدشده
توسط لاگ به
خروجی
استاندارد.
این گزینه
برای
آزمونهای
بازگشت
مفید است.
-P PORT, --port PORT
تنظیم
پورت شنود
دیمن روی PORT.
-q, --quiet
دستور به
gpsfake برای
متوقف کردن
خروجی
معمول
پیشرفت و
کار در حالت
بیصدا.
-r STR, --clientinit STR
مشخص
کردن دستور
مقداردهی
اولیه برای
استفاده در
حالت pipe.
مقدار
پیشفرض
?WATCH={"enable":true,"json":true}
است.
-s SPEED, --speed SPEED
تنظیم
نرخ باود
برای tty اسلیو.
مقدار
پیشفرض
۴۸۰۰ است.
-S, --slow
دستور به
gpsfake برای
ایجاد
تاخیرهای
واقعگرایانه
در ورودی
آزمون
بهجای
تلاش برای
تزریق با
حداکثر
سرعت ممکن
به دیمن. این
کار اجرای
آزمون(ها) را
بسیار
کندتر
میکند،
اما از
خطاهای
تصادفی
ناشی از بار
سیستم و
شرایط
رقابتی
احتمالی در
لایه pty
جلوگیری
میکند.
-t, --tcp
اجبار
چارچوب
آزمون به
استفاده از TCP
بهجای
دستگاههای
pty. علاوه بر
آزمایش
مدیریت
منابع TCP، این
گزینه برای
آزمون درون
محیطهای
ایزوله chroot که
دسترسی به
دستگاههای
pty در آنها
مسدود است
کاربرد
دارد.
-T, --sysinfo
باعث
میشود gpsfake
برخی
اطلاعات
سیستمی را
چاپ کرده و
خارج شود.
-u, --udp
اجبار
چارچوب
آزمون به
استفاده از UDP
بهجای
دستگاههای
pty. علاوه بر
آزمایش
مدیریت
منابع UDP، این
گزینه برای
آزمون درون
محیطهای
ایزوله chroot که
دسترسی به
دستگاههای
pty در آنها
مسدود است
کاربرد
دارد.
-v, --verbose
فعالسازی
گزارشهای
پیشرفت با
جزئیات در stderr.
تکرار این
گزینه سطح
جزئیات را
افزایش
میدهد.
عمدتاً
برای
اشکالزدایی
خود gpsfake مفید
است.
-w SEC, --wait SEC
تنظیم
مهلت زمانی
(timeout) عدم
فعالیت
دیمن بر حسب
ثانیه.
مقدار
پیشفرض ۶۰
ثانیه است و
مقدار ۰
مهلت زمانی
را به طور
کامل
غیرفعال
میکند.
توجه داشته
باشید که
مهلت زمانی
واقعی به
دلیل
تاخیرهای
داخلی
طولانیتر
است و
معمولاً
حدود ۲۰
ثانیه
بیشتر طول
میکشد.
-x, --predump
چاپ
بستهها به
محض
جمعآوری
توسط gpsfake. این
گزینه
عمدتاً
برای
اشکالزدایی
خود gpsfake مفید
است.
آخرین
آرگومان(ها)
باید نام
فایل یا
فایلهای
حاوی
دادههایی
باشد که
قرار است به
دستگاه
تزریق شوند.
gpsfake هر بار که
دادهها
دور
میزنند (cycle)،
یک اعلان
چاپ
میکند.
در حالت
عادی، gpsfake
برای هر
فایل لاگ یک
pty ایجاد
میکند و
سمت اسلیو
دستگاه را
به دیمن
تحویل
میدهد. اگر
در کامنت
هدر فایل
لاگ رشته "UDP"
وجود داشته
باشد،
بستهها از
طریق پورت UDP
شماره ۵۰۰۰
به آدرس 192.168.0.1.255
ارسال
میشوند.
میتوانید
بستهها را
با tcpdump به این
صورت پایش
کنید:
tcpdump -s0 -n -A -i lo udp and port 5000
برخی
کامنتهای
جادویی در
هدرهای
ورودی
آزمون
میتوانند
شرایط
آزمون را
تغییر دهند.
این موارد
عبارتند
از:
Serial
میتواند
شامل
تنظیمات
پورت سریال
مانند 4800 7N2
باشد - نرخ
باود و به
دنبال آن ۷
یا ۸ برای
طول بایت، N
یا O یا E برای
توازن (parity) و ۱
یا ۲ برای
بیتهای
توقف. آزمون
با این
تنظیمات
روی پورت
اسلیو که
دیمن
مشاهده
میکند
اجرا
میشود.
Transport
مقادیر 'TCP'
و 'UDP' به ترتیب
استفاده از
جریانهای TCP
و UDP را اجباری
میکنند
(حالت
پیشفرض pty
است).
Delay-Cookie
باید دو
فیلد
جداشده با
فاصله به
همراه
داشته باشد:
یک نویسه
جداکننده و
یک تاخیر
عددی بر حسب
ثانیه.
بهجای
تقسیم شدن
بر اساس مرز
بستهها،
ورودی
آزمون بر
اساس
جداکنندهها
تقسیم
میشود.
تاخیر پس از
هر ارسال
اعمال
میگردد.
میتواند
برای اعمال
مرزهای
نوشتن در
میانه
بستهها
مفید باشد.
gpsfake یک
پوسته ساده
حول یک
ماژول
پایتون، با
همان نام gpsfake
است که
میتواند
برای
اسکریپتنویسی
کامل
نشستها
شامل یک
نمونه gpsd،
هر تعداد
نشست
کلاینت و هر
تعداد GPS
ساختگی که
دادههای
لاگ جملات
مشخصشده
را به نمونه
دیمن تزریق
میکنند،
استفاده
شود.
کد منبع و
مستندات
تعبیهشده
این ماژول
همراه با
ابزارهای
توسعه gpsd
عرضه
میشود.
میتوانید
از آن برای
آزمون فشار
(torture test) خود gpsd یا
هر برنامه
کلاینت
سازگار با
gpsd استفاده
کنید.
فایلهای
لاگ برای
استفاده با
gpsfake را
میتوان با
gpspipe، gpscat یا cgps
از توزیع gpsd
یا هر
برنامه
دیگری که
قادر به
ایجاد
خروجی
سازگار
است،
استخراج
کرد.
به دلایل
نامشخص
ممکن است gpsfake
گاهی دچار
مهلت زمانی
شده و با
شکست مواجه
شود. برای
جلوگیری از
این مشکل،
متغیر
محیطی WRITE_PAD را
روی مقدار
بزرگتری
تنظیم کنید.
مقدار
اولیه
میتواند
"WRITE_PAD = 0.005" باشد.
ممکن است
مقادیری تا
0.200 نیز مورد
نیاز باشد.
اگر gpsfake با
خطای "Cannot execute gpsd: executable not
found." خارج
شود، متغیر
محیطی GPSD_HOME را
میتوان
روی مسیری
که gpsd در آن
قرار دارد
تنظیم کرد
(بهجای
اضافه کردن
آن پوشه به
متغیر
محیطی PATH).
0
در صورت
موفقیت.
1
در صورت
شکست.
حق نشر این
پرونده
متعلق به
پروژه GPSD سال 2013
است.
شناسه مجوز
SPDX: BSD-2-clause
اریک اس.
ریموند (Eric S. Raymond)