טעינת פרוטוקולים עם הגדרה גלובלית

כדי להבין את הקטע הזה, קודם צריך ללמוד על @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), שיהיה הממשק שיקבל תחזוקה לטווח ארוך.

כדי להפעיל את התמיכה באופן רשמי, אפשר להוסיף את הפרוטוקולים שהוטמעו לקובץ the harness META-INF services.