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

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