כדי להבין את הקטע הזה, קודם צריך לקרוא את האפשרות@ של Tradefed.
האפשרויות הנפוצות ב-Tradefed מאפשרות לכיתות בדיקה לקבל מידע נוסף מההגדרות של ה-XML או משורת הפקודה. התכונה הזו מאפשרת לכם להמשיך עוד שלב ולפתור חלק מהמידע הנוסף הזה, אם צריך.
דוגמה לאפשרות קובץ
קובץ לדוגמה @option:
@Option(name = 'config-file')
private File mConfigFile;
אפשר להגדיר את הפרטים שלמעלה באמצעות קובץ XML:
<option name="config-file" value="/tmp/file" />
או באמצעות הפקודה:
--config-file /tmp/file
תיאור
התכונה מאפשרת לכם לפתור אפשרויות מסוג @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.
אם מריצים את ה-suite, המודולים הנוכחיים (AndroidTest.xml
) לא יפתרו את הקבצים כברירת מחדל.
המטרה היא למנוע ממודולים ליצור יחסי תלות לא ידועים. אפשר להשתמש ב---enable-module-dynamic-download
ברמת החבילה כדי להימנע מהבעיה הזו, אבל בחבילות גדולות כמו Compatibility Test Suite (CTS) ו-Vendor Test Suite (VTS) לא ניתן להפעיל את האפשרות הזו.
הטמעת פרוטוקול חדש
הפרוטוקולים הנתמכים כוללים הטמעה ב-Tradefed של ממשק IRemoteFileResolver, שמגדיר את התג הקצר של הפרוטוקול שיתאימה לנתיב הקובץ דרך getSupportedProtocol
. לדוגמה, השדה gs
משמש לפרוטוקול של Google Cloud Storage. הממשק המומלץ להטמעה הוא #resolveRemoteFiles(RemoteFileResolverArgs)
, והוא יהיה הממשק שאנחנו נמשיך לתחזק לאורך זמן.
כדי להפעיל באופן רשמי את התמיכה, אפשר להוסיף את הפרוטוקולים שהוחלו לקובץ harness META-INF services.