מכשירים וירטואליים ב-OmniLab ATS

OmniLab ATS תומך במכשירים וירטואליים של Cuttlefish שמאפשרים להריץ בדיקות בלי מכשירי Android פיזיים. הדיונון מתאים לבדיקת פונקציות שאינן תלויות בחומרה. לפני שמתחילים להשתמש במכשירים וירטואליים, צריך לפעול לפי המדריך למשתמש כדי להתקין את OmniLab ATS.

OmniLab ATS תומך במכשירים וירטואליים בשני מצבים: מקומי ומרוחק. בטבלה הבאה מופיעה השוואה בין שני המצבים.

מכשירים וירטואליים מקומיים מכשירים וירטואליים מרוחקים
פועל במארחי עובדים של ATS פועל במארחים מרוחקים שאפשר לגשת אליהם דרך SSH במארחי העובדים של ATS
מבוסס x86 יכול להיות x86 או ARM, בהתאם לארכיטקטורה של המארחים
קל יותר להגדיר תהליך ההגדרה מורכב יותר

אפשר להפעיל מכשירים וירטואליים מקומיים ומרוחקים בנפרד. פרטים על כל מצב זמינים במאמרים הבאים:

הגדרה של מכשירים וירטואליים מקומיים

בקטע הזה מתוארים השלבים להגדרת OmniLab ATS במכשירים וירטואליים מקומיים.

התקנת יחסי התלות של Cuttlefish

מריצים את הפקודה הבאה כדי לוודא שמודוללי הליבה הנחוצים נטענו:

sudo modprobe -a kvm tun vhost_net vhost_vsock

הפעלת OmniLab ATS במכשירים וירטואליים מקומיים

לפני שמפעילים את OmniLab ATS, צריך לוודא שכל המכונות של Cuttlefish מופסקות. OmniLab ATS מפעיל ומפסיק את המכשירים הווירטואליים באופן אוטומטי במהלך מחזור הבדיקה, ומכונות Cuttlefish קיימות נמצאות בקונפליקט עם מכונות שמנוהלות על ידי OmniLab ATS. למידע נוסף על השבתת מכונות של Cuttlefish, ראו השבתה של Cuttlefish.

כדי להפעיל מכשירי וירטואליים מקומיים, מריצים את:

mtt start --max_local_virtual_devices N

N הוא המספר המקסימלי של מכשירים וירטואליים ש-OmniLab ATS יכול להקצות בו-זמנית. ערך ברירת המחדל הוא 0.

אם הפקודה נכשלת בגלל צמתים חסרים במכשיר, צריך לבצע את השלבים שבהודעת השגיאה כדי לטעון את מודולי הליבה. אם הבעיה נמשכת, צריך להפעיל מחדש את המכונה.

הגדרת מכשירים וירטואליים מרחוק

בקטע הזה מתוארים השלבים להגדרת OmniLab ATS למכשירים וירטואליים מרוחקים.

התקנת יחסי התלות של Cuttlefish

כדי להתקין את יחסי התלות של Cuttlefish, מבצעים את השלבים הבאים.

  1. מתקינים את חבילות Debian במארח המרוחק לפי השלבים שמפורטים בקטע Cuttlefish > Get started.

  2. כדי להגדיר את המספר המקסימלי של מכשירים וירטואליים במארח המרוחק:

    1. עורכים את /etc/default/cuttlefish-host-resources עם הרשאת root.
    2. מגדירים את num_cvd_accounts למספר המכשירים הווירטואליים המקסימלי שמותר להפעיל במארח הזה.
    3. מריצים את sudo systemctl restart cuttlefish-host-resources.
    4. מריצים את ifconfig ומאמתים את מספר ממשקי cvd-wtap-*.

יצירת חשבון SSH

מכיוון שמארח OmniLab ATS מתחבר למארח המרוחק באמצעות SSH, עליכם להכין חשבון SSH במארח המרוחק. מכיוון ש-OmniLab ATS מטפל בקבצים שבספריית ה-Home, אנחנו ממליצים ליצור חשבון ייעודי.

כדי להתחבר למארח המרוחק ללא סיסמה, נדרש זוג מפתחות SSH במארח OmniLab ATS. בשלבים הבאים מוסבר איך מגדירים את מפתחות ה-SSH:

  1. כדי ליצור מפתח פרטי ומפתח ציבורי, מריצים את ssh-keygen במארח OmniLab ATS.
  2. מעלים את המפתח הציבורי ומצרפים אותו לקובץ ~/.ssh/authorized_keys במארח המרוחק.

אם חשבון ה-SSH שונה מזה ששימש להתקנת יחסי התלות של Cuttlefish, כדי לאפשר לחשבון ה-SSH להפעיל את Cuttlefish, מריצים את הפקודה הבאה במארח המרוחק:

sudo usermod -aG kvm,cvdnetwork,render $USER

הפעלת OmniLab ATS במכשירים וירטואליים מרוחקים

לפני שמפעילים את OmniLab ATS, צריך לוודא שכל המכונות של Cuttlefish מופסקות. OmniLab ATS מפעיל ומפסיק את המכשירים הווירטואליים באופן אוטומטי במהלך מחזור הבדיקה, ומכונות Cuttlefish קיימות נמצאות בקונפליקט עם מכונות שמנוהלות על ידי OmniLab ATS. למידע נוסף על הפסקת מופעים של דיונון, עיינו במאמר Stop Cuttlefish.

לביצועים טובים יותר, מומלץ להגדיר את המארח של OmniLab ATS ואת המארח המרוחק ברשת תקשורת מקומית.

כדי להפעיל מכשירי וירטואליים מרחוק, מריצים את הפקודה הבאה במארח OmniLab ATS:

mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY

USER הוא שם חשבון ה-SSH.

HOST היא כתובת ה-IPv4 של המארח המרוחק.

N הוא המספר המקסימלי של מכשירים וירטואליים ש-OmniLab ATS יכול להקצות בו-זמנית.

KEY הוא הנתיב למפתח ה-SSH הפרטי במארח OmniLab ATS.

הפקודה בודקת את החיבור למארח המרוחק לפני שמפעילים את OmniLab ATS. אם במסוף מוצגת הודעת אזהרה כמו The specified --remote_virtual_devices and --remote_ssh_key are invalid., צריך לבדוק את הגדרת ה-SSH.

כדי למנוע התנגשויות בין משאבים, מארח OmniLab ATS יכול להתחבר למארח מרוחק אחד לכל היותר. לא ניתן להתחבר למארח מרוחק אחד בו-זמנית מכמה מארחים של OmniLab ATS.

הרצת בדיקה באמצעות מכשירים וירטואליים

בקטע הזה מתוארים השלבים להרצת בדיקה במכשירים וירטואליים מקומיים או מרוחקים.

מכשירים נבחרים

ברשימת המכשירים, OmniLab ATS מציג מכשירים וירטואליים כ-placeholders במקום המספרים הסידוריים בפועל שלהם. ה-placeholders מוצגים בפורמט של HOSTNAME:local-virtual-device-ID למכשירים וירטואליים מקומיים; remote-virtual-ADDRESS-ID למכשירים וירטואליים מרחוק. המדינות יכולות להיות Available או Allocation. placeholder במצב Available מציין שהמכשיר הווירטואלי לא פועל וניתן להקצות אותו לבדיקה.

בחירת מכשירים וירטואליים

איור 1. בחירת מכשירים וירטואליים

הוספת פעולות במכשיר

אם בוחרים מכשיר וירטואלי אחד לפחות, פעולת המכשיר המשויכת אמורה להתווסף לרשימה באופן אוטומטי. הפעולה מורכבת מהפרמטרים הנדרשים של TradeFed וממשאבי הבדיקה ליצירת מכשירים וירטואליים.

פעולות מקומיות במכשיר וירטואלי

איור 2. פעולות במכשירים של מכונות וירטואליות מקומיות

פעולות במכשיר וירטואלי מרחוק

איור 3. פעולות במכשיר למכשירים וירטואליים מרוחקים

הגדרת משאבי בדיקה

כדי להשתמש במכשירים הווירטואליים של Cuttlefish נדרשים שלושה משאבי בדיקה: הכלים של המכונות הווירטואליות, התמונות ו-Acloud. ב-build טיפוסי של Cuttlefish (לדוגמה, aosp_cf_x86_64_phone ב-ci.android.com), הכלים של המכונות הווירטואליות נארזים ב-cvd-host_package.tar.gz והתמונות נמצאות ב-aosp_cf_x86_64_phone-img-*.zip. קובץ הבינארי של Acloud נוצר ב-OmniLab ATS והוא תואם לכל הגרסאות של Cuttlefish. צריך לשנות את כתובת ה-URL שמוגדרת כברירת מחדל להורדה של קובץ ה-Acloud הבינארי רק למטרות ניפוי באגים.

משאבים לבדיקת מכשירים וירטואליים

איור 4. משאבים לבדיקה של מכשירים וירטואליים

הצגת הרצות של בדיקות

יומני המכשיר, כולל kernel.log, ‏ host_log.txt ו-launcher.log, נאספים בתיקיית קובץ הפלט. לוחצים על הצגת קובצי פלט כדי לראות אותם.

תוצאות הבדיקה

איור 5. תוצאות ההרצה לניסיון