כדי להבין את הקטע הזה, צריך קודם ללמוד על האופן שבו נעשה שימוש ב-Trendified @Option.
האפשרויות הנפוצות ב-Tradefed מאפשרות לכיתות בדיקה לקבל מידע נוסף מההגדרות של ה-XML או משורת הפקודה. התכונה הזו מאפשרת לכם להמשיך עוד שלב ולפתור חלק מהמידע הנוסף הזה, אם צריך.
דוגמה לאפשרות קובץ
קובץ לדוגמה @option:
@Option(name = 'config-file')
private File mConfigFile;
אפשר להגדיר את הפרטים שלמעלה באמצעות קובץ XML:
<option name="config-file" value="/tmp/file" />
או באמצעות הפקודה:
--config-file /tmp/file
תיאור
התכונה מאפשרת התאמת @Options מסוג קובץ (קבצים) שמועברים מרחוק לקובץ מקומי כדי שיהיה זמין בצורה חלקה מנקודת המבט של המשתמש.
כדי שההגנה הזו תפעל, צריך לציין את הקובץ באמצעות נתיב סגנון מרוחק. לדוגמה:
--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 לאשר.
אם פועלים כחבילה, המודולים הנוכחיים (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.