لفهم هذا القسم، عليك أولاً دراسة @Option في Tradefed.
تتيح الخيارات النموذجية في Tradefed لفئات الاختبار تلقّي معلومات إضافية من إعداد XML أو سطر الأوامر. تتيح لك هذه الميزة اتّخاذ خطوة إضافية وحلّ بعض هذه المعلومات الإضافية إذا لزم الأمر.
مثال على خيار الملف
مثال على الملف @option:
@Option(name = 'config-file')
private File mConfigFile;
يمكن ضبط ما سبق من خلال إعدادات XML:
<option name="config-file" value="/tmp/file" />
أو من خلال الأمر:
--config-file /tmp/file
الوصف
تتيح لك هذه الميزة حلّ @خيارات من النوع "ملف" عن بُعد في ملف محلي ليكون متاحًا بسلاسة من وجهة نظر المستخدم.
لكي يعمل ذلك، يجب تحديد الملف باستخدام مسار نمط عن بُعد. على سبيل المثال:
--config-file gs://bucket/tmp/file
يشير هذا المسار إلى ملف ضمن حزمة Google Cloud Storage (GCS) حيث يتم تخزينه. عندما يرى Tradefed هذا المسار البعيد، سيحاول تنزيل الملف
محليًا وتعيينه إلى @Option. يؤدي ذلك إلى أن يشير المتغيّر mConfigFile
الآن إلى النسخة المحلية من الملف، والتي يمكن استخدامها في الاختبار.
إذا تعذّر تنزيل الملف البعيد لأي سبب، ستعرض Tradefed
ConfigurationException
ما سيمنع تشغيل الاختبار. ونعتبر عدم توفّر هذه الملفات خطأً فادحًا لأنّ بعض عناصر الاختبار ستكون غير متوفّرة أيضًا.
استخدام مَعلمات طلب البحث
يمكن إضافة مَعلمات طلب البحث إلى عنوان URL باستخدام ?
. على سبيل المثال:
gs://bucket/path?unzip=true
. سيكون المفتاح/القيمة unzip=true
متاحًا في تنفيذ واجهة IRemoteFileResolver.
يتوفّر سلوكان مضمّنان:
- unzip: إذا تم ضبطها على
true
وكان الملف الذي تم تنزيله بتنسيق zip، سيتم فك ضغطه تلقائيًا في موقع مؤقت. مثال:?unzip=true
- اختياري: القيمة التلقائية هي
false
. إذا تم ضبط القيمة علىtrue
وتعذّر تحديد درجة الدقة، لن يتم عرض استثناء ولن يتم استبدال الملف. مثال:?optional=true
يمكنك أيضًا تمرير وسيطات طلب البحث العامة من خلال --dynamic-download-args key=value
التي ستمرّر المفتاح/القيمة إلى جميع عمليات التنزيل الديناميكية التي تمّت محاولتها في
عملية الاستدعاء.
البروتوكولات المتوافقة
البروتوكولات المتوافقة رسميًا والتنسيقات المقابلة لها هي:
- Google Cloud Storage، البروتوكول:
gs
، التنسيق:gs://<bucket name>/path
- الملفات المحلية، البروتوكول:
file
، التنسيق:file:/local/path
- روابط http، البروتوكول:
http
، التنسيق:http://url
- روابط https، البروتوكول:
https
، التنسيق:https://url
القيود
لا يتيح الحل الديناميكي لـ @Option حاليًا سوى عدد محدود من البروتوكولات والمواقع الإلكترونية التي يمكن التنزيل منها. لا يمكن حاليًا تحديد قيمة @Option إلا في ملف الإعداد الرئيسي بتنسيق XML في Tradefed.
في حال التشغيل كمجموعة، لن تحلّ الوحدات الحالية (AndroidTest.xml
) الملفات تلقائيًا.
يهدف ذلك إلى منع الوحدات من إنشاء بعض التبعيات غير المعروفة. يمكن إلغاء هذا الإعداد باستخدام --enable-module-dynamic-download
على مستوى المجموعة، ولكن لن يتم تفعيله في المجموعات الرئيسية، مثل مجموعة أدوات اختبار التوافق
(CTS) ومجموعة أدوات اختبار المورّد (VTS).
تنفيذ بروتوكول جديد
تتضمّن البروتوكولات المتوافقة عملية تنفيذ في Tradefed لواجهة IRemoteFileResolver، التي تحدّد العلامة المختصرة للبروتوكول الذي ستتم مطابقته في مسار الملف من خلال getSupportedProtocol
. على سبيل المثال، يتم استخدام gs
لبروتوكول Google Cloud Storage. الواجهة المقترَحة التي يجب تنفيذها هي
#resolveRemoteFiles(RemoteFileResolverArgs)
، وهي الواجهة التي سيتم الحفاظ عليها على المدى الطويل.
يمكن إضافة البروتوكولات التي تم تنفيذها إلى ملف الخدمات META-INF في الحزمة لتفعيل التوافق رسميًا.