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

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