הפקת דוחות בדיקה

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

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

הפק דוח

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

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

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
 

מסד נתונים בזמן אמת

http://localhost:9000/.inspect/coverage?ns=<database_name>
 

זה מפרק את הכללים שלך לביטויים ותת-ביטויים שאתה יכול לעבור עליהם עם העכבר לקבלת מידע נוסף, כולל מספר הערכות וערכים שהוחזרו. עבור גרסת ה-JSON הגולמית של נתונים אלה, כלול את כתובת האתר הבאה בשאילתה שלך:

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
 

מסד נתונים בזמן אמת

http://localhost:9000/.inspect/coverage.json?ns=<database_name>
 

כללים לדוגמה של ניפוי באגים

כדי ליצור דוח בדיקה בקלות, השתמש בהתחלות המהירות של האמולטור הזמינות ב-GitHub עבור Cloud Firestore וב- Realtime Database . התחלות מהירות אלו מדריכות אותך דרך התקנה ואתחול כראוי של האמולטורים, ולאחר מכן יצירת בדיקות לדוגמה ממערכת כללים לדוגמה.

שקול אפליקציה לדוגמה המשתמשת ב-Cloud Firestore שסופרת כמה פעמים משתמשים לוחצים על כפתור. האפליקציה משתמשת בכללים הבאים:

Cloud Firestore

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

כדי לנפות באגים בכללים המוצגים למעלה, השתמש במבחן JavaScript לדוגמה הבא:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

האמולטור יוצר דוח זמין בכתובת ה-URL שצוינה לעיל:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

הדוח מציג את השגיאות הבאות הלא מוגדרות ובעלות הערך האפסי:

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

Cloud Firestore

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow create: if request.resource.data.value == 0;
       allow update: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

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