Method: projects.test

Source تست برای صحت نحوی و معنایی. مشکلات موجود، در صورت وجود، با توضیحات، شدت و محل منبع به تماس‌گیرنده بازگردانده می‌شود.

روش تست ممکن است با Source اجرا شود. Passing Source برای تست واحد قوانین جدید مفید است.

توجه داشته باشید که آزمایش‌هایی که با استفاده از REST API اجرا می‌شوند از پایگاه‌های داده تولید، سطل‌های ذخیره‌سازی و منابع rsesource مرتبط استفاده می‌کنند. چنین آزمایشی می تواند هزینه های استفاده را به همراه داشته باشد. ما قویاً توصیه می‌کنیم که از مجموعه شبیه‌ساز محلی Firebase برای انجام تست قوانین استفاده کنید، زیرا می‌توانید آزمایش‌ها را بر روی منابع آفلاین و غیر تولیدی بدون هزینه استفاده اجرا کنید.

در زیر نمونه ای از 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

URL از دستور 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

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 برای 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
پارامترها map<string, string>
مسیر string
زمان google.protobuf.Timestamp

اگر مقدار درخواست برای سرویس به خوبی شکل نگیرد، درخواست به عنوان یک آرگومان نامعتبر رد خواهد شد.

resource

value ( Value format)

مقدار منبع اختیاری همانطور که در ذخیره سازی دائمی قبل از انجام درخواست ظاهر می شود.

نوع منبع به مقدار request.path بستگی دارد.

functionMocks[]

object ( FunctionMock )

تابع قواعد اختیاری برای توابع تعریف شده توسط سرویس تمسخر می کند. در صورت تنظیم نشدن، انتظار می‌رود که هر تابع قوانین تعریف‌شده توسط سرویس، خطایی را برگرداند، که ممکن است بر نتیجه آزمایش تأثیر بگذارد یا نداشته باشد.

pathEncoding

enum ( PathEncoding )

مشخص می کند که آیا مسیرها (مانند request.path) کدگذاری می شوند یا خیر.

expressionReportLevel

enum ( ExpressionReportLevel )

مشخص می کند که چه چیزی باید در پاسخ گنجانده شود.

انتظار

مجموعه ای از انتظارات مورد آزمایش پشتیبانی شده.

Enums
EXPECTATION_UNSPECIFIED انتظار نامشخص
ALLOW انتظار یک نتیجه مجاز را داشته باشید.
DENY انتظار یک نتیجه انکار شده را داشته باشید.

FunctionMock

تعریف تابع قوانین ساختگی

Mocks باید به یک تابع اعلام شده توسط سرویس هدف اشاره داشته باشد. نوع تابع 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

نتیجه تعریف نشده است، به این معنی که نتیجه قابل محاسبه نیست.

رمزگذاری مسیر

نوع رمزگذاری مسیر مورد استفاده

Enums
ENCODING_UNSPECIFIED هیچ کدگذاری مشخص نشده است. رفتار "URL_ENCODED" پیش‌فرض است.
URL_ENCODED بخش های مسیر را به عنوان URL رمزگذاری شده اما با جداکننده های غیر رمزگذاری شده ("/") تلقی می کند. این رفتار به طور پیش فرض است.
PLAIN کل مسیر را به‌عنوان غیرنشانی اینترنتی رمزگذاری‌شده به‌عنوان مثال خام تلقی می‌کند.

ExpressionReportLevel

مقدار داده ای که باید در پاسخ گزارش عبارت گنجانده شود.

Enums
LEVEL_UNSPECIFIED هیچ سطحی مشخص نشده است. رفتار پیش‌فرض "NONE".
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

موقعیت پایان نسبت به ابتدای فایل.

شدت

مجموعه ای از شدت موضوع.

Enums
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" در بالا. عبارات تحت اللفظی حذف شده اند.

حالت

حالت های معتبر برای نتیجه آزمایش

Enums
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)

مقدار ارزیابی شده برای عبارت بازدید شده، به عنوان مثال true/false

ExpressionReport

توضیح می دهد که یک عبارت در کجای یک فایل یافت می شود و در طول استفاده از آن به چه چیزی ارزیابی شده است.

نمایندگی JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
زمینه های
sourcePosition

object ( SourcePosition )

موقعیت بیان در منبع قوانین اصلی.

values[]

object ( ValueCount )

مقادیری که این عبارت هنگام مواجه شدن با آنها ارزیابی می شود.

children[]

object ( ExpressionReport )

عبارات فرعی

ValueCount

چند بار یک Expression به یک ExpressionValue خاص ارزیابی شده است.

نمایندگی JSON
{
  "value": value,
  "count": integer
}
زمینه های
value

value ( Value format)

مقدار بازگشتی عبارت

count

integer

تعداد دفعاتی که آن عبارت برگشته است.