Method: projects.test

Source בדיקה לנכונות תחבירית וסמנטית. בעיות קיימות, אם ישנן, יוחזרו למתקשר עם תיאור, חומרה ומיקום המקור.

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

שים לב שבדיקות המופעלות באמצעות REST API משתמשות במסדי נתונים של ייצור, דלי אחסון ומקורות rsesources קשורים. בדיקה כזו יכולה לגרור דמי שימוש. אנו ממליצים בחום להשתמש ב-Firebase Local Emulator Suite כדי לבצע בדיקות כללים, מכיוון שתוכל להריץ בדיקות על משאבים לא מקוונים שאינם בייצור ללא דמי שימוש.

להלן דוגמה Source המאפשר למשתמשים להעלות תמונות לדלי הנושא את מזהה המשתמש שלהם ותואם את המטא נתונים הנכונים:

דוגמא

// Users are allowed to subscribe and unsubscribe to the blog.
service firebase.storage {
  match /users/{userId}/images/{imageName} {
      allow write: if userId == request.auth.uid
          && (imageName.matches('*.png$')
          || imageName.matches('*.jpg$'))
          && resource.mimeType.matches('^image/')
  }
}

בקשת HTTP

POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test

כתובת האתר משתמשת בתחביר GRPC Transcoding .

פרמטרים של נתיב

פרמטרים
name

string

נדרש. עבור בדיקות מול source , שם המשאב חייב להתייחס לפרויקט: פורמט: projects/{project_id}

גוף הבקשה

גוף הבקשה מכיל נתונים עם המבנה הבא:

ייצוג JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
שדות
source

object ( Source )

יש לבדוק את נכונות Source .

testSuite

object ( TestSuite )

ה- TestSuite המוטבע לביצוע נגד Source .

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

גוף תגובה

אם זה מצליח, גוף התגובה מכיל נתונים עם המבנה הבא:

התגובה עבור FirebaseRulesService.TestRuleset .

ייצוג JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
שדות
issues[]

object ( Issue )

בעיות Source תחביריות וסמנטיות בדרגות חומרה שונות. בעיות של חומרת ERROR ימנעו את ביצוע הבדיקות.

testResults[]

object ( TestResult )

סט תוצאות הבדיקה בהתחשב במקרי הבדיקה ב- TestSuite . התוצאות יופיעו באותו סדר שבו מופיעים מקרי הבדיקה ב- TestSuite .

היקף ההרשאה

דורש אחד מהיקפי OAuth הבאים:

  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/firebase
  • https://www.googleapis.com/auth/firebase.readonly

למידע נוסף, עיין בסקירת האימות .

חבילת בדיקות

TestSuite הוא אוסף של מופעי TestCase המאמתים את הנכונות הלוגית של כללים. ניתן להפנות ל- TestSuite בשורה בתוך הזמנה projects.test או כחלק מאובייקט Release כבדיקת טרום שחרור.

ייצוג JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
שדות
testCases[]

object ( TestCase )

אוסף מקרי בדיקה הקשורים ל- TestSuite .

TestCase

הודעות TestCase מספקות את הקשר הבקשה וציפייה אם ההקשר הנתון יאושר או יידחה. מקרי בדיקה עשויים לציין את request , resosurce ו- functionMocks כדי ללעוג לקריאת פונקציה לפונקציה הניתנת בשירות.

אובייקט request מייצג את ההקשר הנוכח בזמן הבקשה.

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

ראה גם את התיעוד הקשור ל-Cloud Firestore ( בקשה , משאב ) ו-Cloud Storage for Firebase ( בקשה , משאב ).

ייצוג JSON
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
שדות
expectation

enum ( Expectation )

מבחן ציפייה.

request

value ( Value format)

בקש הקשר.

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

שדה בקשה סוּג
auth.uid string
auth.token map<string, string>
כותרות map<string, string>
שיטה string
params map<string, string>
נָתִיב string
זְמַן google.protobuf.Timestamp

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

resource

value ( Value format)

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

סוג המשאב תלוי בערך request.path .

functionMocks[]

object ( FunctionMock )

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

pathEncoding

enum ( PathEncoding )

מציין אם נתיבים (כגון request.path) מקודדים וכיצד.

expressionReportLevel

enum ( ExpressionReportLevel )

מפרט מה צריך לכלול בתגובה.

תוֹחֶלֶת

מערך הציפיות הנתמכות למקרה מבחן.

תקצירים
EXPECTATION_UNSPECIFIED ציפייה לא מוגדרת.
ALLOW צפו לתוצאה מותרת.
DENY צפו לתוצאה מוכחשת.

FunctionMock

הגדרת פונקציית חוקים מדומים.

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

ניתן לספק יותר מ- FunctionMock אחד עבור שם פונקציה נתון כל עוד מתאמי Arg נבדלים. ייתכן שיש רק פונקציה אחת לעומס יתר נתון כאשר כל ערכי Arg הם Arg.any_value .

ראה גם פונקציות בשפת כללי האבטחה .

ייצוג JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
שדות
function

string

שם הפונקציה.

שם הפונקציה חייב להתאים לשם המסופק בהצהרת שירות.

args[]

object ( Arg )

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

result

object ( Result )

התוצאה המדומה של קריאת הפונקציה.

ארג

מתאמים ארגו עבור פונקציית המדומה.

ייצוג JSON
{

  // Union field type can be only one of the following:
  "exactValue": value,
  "anyValue": {
    object
  }
  // End of list of possible types for union field type.
}
שדות
type שדה איחוד. ערכי ארגומנט נתמכים. type יכול להיות רק אחד מהאפשרויות הבאות:
exactValue

value ( Value format)

ארגומנט תואם בדיוק את הערך שסופק.

anyValue

object

ארגומנט תואם לכל ערך שסופק.

תוֹצָאָה

ערכי תוצאה אפשריים מהפונקציה מדומה להתקשרות.

ייצוג JSON
{

  // Union field type can be only one of the following:
  "value": value,
  "undefined": {
    object
  }
  // End of list of possible types for union field type.
}
שדות
type שדה איחוד. ערכי תוצאות נתמכים. type יכול להיות רק אחד מהאפשרויות הבאות:
value

value ( Value format)

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

undefined

object

התוצאה אינה מוגדרת, כלומר לא ניתן היה לחשב את התוצאה.

קידוד נתיב

סוג קידוד הנתיב בשימוש.

תקצירים
ENCODING_UNSPECIFIED לא צוין קידוד. ברירת המחדל להתנהגות "URL_ENCODED".
URL_ENCODED מתייחס לקטעי נתיב כמקודדים בכתובת אתר אך עם מפרידים לא מקודדים ("/"). זוהי התנהגות ברירת המחדל.
PLAIN מתייחס לנתיב הכולל כאל לא מקודד כתובת אתר, למשל גולמי.

ExpressionReportLevel

כמות הנתונים שיש לכלול בתגובת דוח הביטוי.

תקצירים
LEVEL_UNSPECIFIED לא צוינה רמה. ברירת המחדל היא התנהגות "אין".
NONE אל תכלול מידע נוסף.
FULL כלול דיווח מפורט על ביטויים שהוערכו.
VISITED כלול רק את הביטויים שבהם ביקרו במהלך ההערכה.

נושא

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

ייצוג JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
שדות
sourcePosition

object ( SourcePosition )

מיקום הבעיה Source .

description

string

תיאור שגיאה קצר.

severity

enum ( Severity )

חומרת הנושא.

מיקום מקור

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

ייצוג JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
שדות
fileName

string

שם File .

line

integer

מספר שורה של קטע המקור. מבוסס 1.

column

integer

העמודה הראשונה בשורת המקור המשויכת לפרגמנט המקור.

currentOffset

integer

מיקום התחלה ביחס לתחילת הקובץ.

endOffset

integer

מיקום סיום ביחס לתחילת הקובץ.

חוּמרָה

מכלול חומרות הנושא.

תקצירים
SEVERITY_UNSPECIFIED חומרה לא מוגדרת.
DEPRECATION בעיית הוצאה משימוש עבור הצהרות ושיטה שאולי כבר לא נתמכות או נשמרות.
WARNING אזהרות כגון: משתנים שאינם בשימוש.
ERROR שגיאות כגון: פלטה מתולתלת ללא תחרות או הגדרה מחדש משתנה.

תוצאות בדיקה

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

ייצוג JSON
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
שדות
state

enum ( State )

מצב המבחן.

debugMessages[]

string

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

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

לדוגמה: Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

מיקום Source שבו מתרחשת שגיאת זמן הריצה העיקרית.

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

למשל errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

קבוצת קריאות הפונקציות שבוצעו לשיטות מוגדרות שירות.

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

visitedExpressions[]

object ( VisitedExpression )

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

match /path {
  allow read if: <expr>
}

לדוח מפורט של מצבי הערכת הביניים, עיין בשדה expressionReports

expressionReports[]

object ( ExpressionReport )

המיפוי מביטוי בערכת הכללים AST לערכים שהם הוערכו לפיהם. מקונן חלקית לשיקוף מבנה AST. שים לב ששדה זה למעשה עוקב אחר ביטויים ולא הצהרות הרשאה בניגוד לשדה "visitedExpressions" למעלה. ביטויים מילוליים נשמטים.

מדינה

מצבים תקפים עבור תוצאת הבדיקה.

תקצירים
STATE_UNSPECIFIED מצב הבדיקה לא מוגדר.
SUCCESS המבחן הוא הצלחה.
FAILURE מבחן הוא כישלון.

FunctionCall

מייצג קריאת פונקציה המוגדרת בשירות שהופעלה במהלך ביצוע הבדיקה.

ייצוג JSON
{
  "function": string,
  "args": [
    value
  ]
}
שדות
function

string

שם הפונקציה שהופעלה.

args[]

value ( Value format)

הארגומנטים שסופקו לפונקציה.

VisitedExpression

אחסן את המיקום ואת תוצאת הגישה לביטוי שבו ביקר בכללים.

ייצוג JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
שדות
sourcePosition

object ( SourcePosition )

מיקום Source שבו ביקר ביטוי.

value

value ( Value format)

הערך המוערך עבור הביטוי שביקר, למשל נכון/לא נכון

ExpressionReport

מתאר היכן בקובץ נמצא ביטוי ולמה הוא הוערך במהלך השימוש בו.

ייצוג JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
שדות
sourcePosition

object ( SourcePosition )

מיקום הביטוי במקור הכללים המקורי.

values[]

object ( ValueCount )

ערכים שהביטוי הזה הוערך אליהם כאשר הוא נתקל.

children[]

object ( ExpressionReport )

ביטויי משנה

ספירת ערך

טפל כמה פעמים ביטוי הוערך ל-ExpressionValue מסוים.

ייצוג JSON
{
  "value": value,
  "count": integer
}
שדות
value

value ( Value format)

ערך ההחזרה של הביטוי

count

integer

מספר הפעמים שהביטוי הזה חזר.