تحميل البروتوكولات باستخدام الإعدادات العامة

لفهم هذا القسم، عليك أولاً دراسة Tradefed @Option.

تتيح الخيارات النموذجية في Tradefed لفئات الاختبار تلقّي معلومات إضافية من إعدادات XML أو سطر الأوامر. تتيح لك هذه الميزة اتخاذ خطوة إضافية وحلّ بعض هذه المعلومات الإضافية إذا كان ذلك ضروريًا.

مثال على خيار الملف

مثال على ملف @option:

@Option(name = 'config-file')
private File mConfigFile;

يمكن ضبط ما سبق من خلال إعدادات XML:

<option name="config-file" value="/tmp/file" />

أو من خلال الأمر:

--config-file /tmp/file

الوصف

تتيح لك هذه الميزة تحويل ملفات @Options من النوع 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 التي ستُمرِّر المفتاح/القيمة إلى جميع عمليات التنزيل الديناميكية التي تمّت محاولة تنفيذها في invocation.

البروتوكولات المتوافقة

في ما يلي البروتوكولات المتوافقة رسميًا والتنسيقات المقابلة لها:

  • ‫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الخروج من هذا الرمز باستخدام --enable-module-dynamic-download على مستوى المجموعة، ولكن لن يتم تفعيله في المجموعات الرئيسية، مثل مجموعة أدوات اختبار التوافق (CTS) ومجموعة أدوات اختبار المورّدين (VTS).

تنفيذ بروتوكول جديد

إنّ البروتوكولات المتوافقة لها تنفيذ في Tradefed لسمة IRemoteFileResolver ، التي تحدّد العلامة المختصرة للبروتوكول الذي سيتم مطابقته في مسار الملف من خلال getSupportedProtocol. على سبيل المثال، يتم استخدام gs لملف تعريف بروتوكول Google Cloud Storage. الواجهة المقترَحة للتنفيذ هي #resolveRemoteFiles(RemoteFileResolverArgs)، وستكون الواجهة التي تتم صياغها على المدى الطويل.

يمكن إضافة البروتوكولات التي تم تنفيذها إلى ملف الحِزمة META-INF services لتفعيل الميزة رسميًا.