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