Method: projects.test

Kiểm tra Source để đảm bảo tính chính xác về cú pháp và ngữ nghĩa. Các vấn đề hiện diện, nếu có, sẽ được trả về cho phương thức gọi kèm theo nội dung mô tả, mức độ nghiêm trọng và vị trí nguồn.

Bạn có thể thực thi phương thức kiểm thử bằng Source. Việc truyền Source rất hữu ích cho việc kiểm thử đơn vị các quy tắc mới.

Xin lưu ý rằng các chương trình kiểm thử chạy bằng API REST sẽ sử dụng cơ sở dữ liệu sản xuất, bộ chứa lưu trữ và mã nguồn có liên quan. Việc kiểm thử như vậy có thể làm phát sinh phí sử dụng. Bạn nên sử dụng Bộ mô phỏng cục bộ của Firebase để thực hiện việc kiểm thử Quy tắc vì bạn có thể chạy kiểm thử trên các tài nguyên ngoại tuyến, không phải tài nguyên phát hành công khai mà không phải trả phí sử dụng.

Sau đây là ví dụ về Source cho phép người dùng tải hình ảnh lên một bộ chứa chứa mã nhận dạng người dùng và so khớp đúng siêu dữ liệu:

Ví dụ

// 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/')
  }
}

yêu cầu HTTP

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

URL sử dụng cú pháp Chuyển mã gRPC.

Tham số đường dẫn

Thông số
name

string

Bắt buộc. Đối với các chương trình kiểm thử cho source, tên tài nguyên phải tham chiếu đến dự án: Định dạng: projects/{project_id}

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Trường
source

object (Source)

Source để kiểm tra tính chính xác.

testSuite

object (TestSuite)

TestSuite cùng dòng để thực thi dựa trên Source.

Khi Source được cung cấp cùng dòng, các trường hợp kiểm thử sẽ chỉ được chạy nếu Source có cú pháp và ngữ nghĩa hợp lệ.

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Phản hồi cho FirebaseRulesService.TestRuleset.

Biểu diễn dưới dạng JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Trường
issues[]

object (Issue)

Các vấn đề về Source về cú pháp và ngữ nghĩa ở nhiều mức độ nghiêm trọng. Các vấn đề có mức độ nghiêm trọng là ERROR sẽ khiến các chương trình kiểm thử không thực thi được.

testResults[]

object (TestResult)

Tập hợp kết quả kiểm thử dựa trên các trường hợp kiểm thử trong TestSuite. Kết quả sẽ xuất hiện theo cùng thứ tự như các trường hợp kiểm thử xuất hiện trong TestSuite.

Phạm vi uỷ quyền

Yêu cầu một trong các phạm vi OAuth sau:

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

Để biết thêm thông tin, hãy xem bài viết Tổng quan về việc xác thực.

Bộ thử nghiệm

TestSuite là một tập hợp các thực thể TestCase giúp xác thực tính đúng về logic của các quy tắc. TestSuite có thể được tham chiếu nội tuyến trong lệnh gọi projects.test hoặc như một phần của đối tượng Release dưới dạng một bước kiểm tra trước khi phát hành.

Biểu diễn dưới dạng JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Trường
testCases[]

object (TestCase)

Tập hợp các trường hợp kiểm thử liên kết với TestSuite.

Trường hợp kiểm thử

Thông báo TestCase cung cấp ngữ cảnh yêu cầu và kỳ vọng về việc ngữ cảnh nhất định sẽ được cho phép hay bị từ chối. Các trường hợp kiểm thử có thể chỉ định request, resosurcefunctionMocks để mô phỏng lệnh gọi hàm đến một hàm do dịch vụ cung cấp.

Đối tượng request đại diện cho ngữ cảnh xuất hiện tại thời điểm yêu cầu.

resource là giá trị của tài nguyên mục tiêu (ví dụ: siêu dữ liệu của đối tượng GCS hoặc tài liệu Firestore) vì nó xuất hiện trong bộ nhớ liên tục trước khi yêu cầu được thực thi.

Xem thêm tài liệu tham khảo có liên quan cho Cloud Firestore ( yêu cầu, tài nguyên) và Cloud Storage cho Firebase (yêu cầu, tài nguyên).

Biểu diễn dưới dạng JSON
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Trường
expectation

enum (Expectation)

Kiểm thử kỳ vọng.

request

value (Value format)

Ngữ cảnh yêu cầu.

Định dạng chính xác của ngữ cảnh yêu cầu phụ thuộc vào dịch vụ. Hãy xem tài liệu dịch vụ thích hợp để biết thông tin về các trường và loại được hỗ trợ theo yêu cầu. Ở mức tối thiểu, tất cả các dịch vụ đều hỗ trợ các trường và loại sau:

Trường yêu cầu Loại
auth.uid string
auth.token map<string, string>
tiêu đề map<string, string>
method string
tham số map<string, string>
đường dẫn string
thời gian google.protobuf.Timestamp

Nếu giá trị yêu cầu không được định dạng đúng cho dịch vụ, yêu cầu sẽ bị từ chối vì là đối số không hợp lệ.

resource

value (Value format)

Giá trị tài nguyên không bắt buộc khi nó xuất hiện trong bộ nhớ liên tục trước khi yêu cầu được thực hiện.

Loại tài nguyên phụ thuộc vào giá trị request.path.

functionMocks[]

object (FunctionMock)

Bản mô phỏng hàm Quy tắc (không bắt buộc) cho các hàm do dịch vụ xác định. Nếu bạn không đặt chính sách này, mọi hàm Quy tắc do dịch vụ xác định đều sẽ trả về lỗi, có thể ảnh hưởng hoặc không ảnh hưởng đến kết quả kiểm thử.

pathEncoding

enum (PathEncoding)

Chỉ định xem các đường dẫn (chẳng hạn như request.path) có được mã hoá hay không và cách mã hoá.

expressionReportLevel

enum (ExpressionReportLevel)

Chỉ định nội dung cần đưa vào phản hồi.

Kỳ vọng

Tập hợp các kỳ vọng về trường hợp kiểm thử được hỗ trợ.

Enum
EXPECTATION_UNSPECIFIED Kỳ vọng không xác định.
ALLOW Dự kiến sẽ có kết quả được cho phép.
DENY Bạn sẽ nhận được kết quả bị từ chối.

Hàm FunctionMock

Định nghĩa hàm Quy tắc mô phỏng.

Mô phỏng phải tham chiếu đến một hàm do dịch vụ mục tiêu khai báo. Loại đối số và kết quả của hàm sẽ được suy luận tại thời điểm kiểm thử. Nếu giá trị đối số hoặc kết quả không tương thích với nội dung khai báo loại hàm, thì yêu cầu sẽ bị coi là không hợp lệ.

Bạn có thể cung cấp nhiều FunctionMock cho một tên hàm đã cho, miễn là các trình so khớp Arg khác biệt. Có thể chỉ có một hàm cho một hàm quá tải nhất định trong đó tất cả giá trị Arg đều là Arg.any_value.

Hãy xem thêm bài viết Các hàm trong ngôn ngữ Quy tắc bảo mật.

Biểu diễn dưới dạng JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Trường
function

string

Tên hàm.

Tên hàm phải khớp với tên trong phần khai báo dịch vụ.

args[]

object (Arg)

Danh sách Arg giá trị cần khớp. Thứ tự cung cấp các đối số là thứ tự mà các đối số phải xuất hiện trong lệnh gọi hàm.

result

object (Result)

Kết quả mô phỏng của lệnh gọi hàm.

Arg

Trình so khớp Arg cho hàm mô phỏng.

Biểu diễn dưới dạng 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.
}
Trường
Trường kết hợp type. Giá trị đối số được hỗ trợ. type chỉ có thể là một trong những trạng thái sau đây:
exactValue

value (Value format)

Đối số khớp chính xác với giá trị được cung cấp.

anyValue

object

Đối số khớp với mọi giá trị đã cung cấp.

Kết quả

Các giá trị kết quả có thể có từ lệnh gọi mô phỏng hàm.

Biểu diễn dưới dạng 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.
}
Trường
Trường kết hợp type. Giá trị kết quả được hỗ trợ. type chỉ có thể là một trong những trạng thái sau đây:
value

value (Value format)

Kết quả là một giá trị thực tế. Loại của giá trị phải khớp với loại của giá trị được dịch vụ khai báo.

undefined

object

Kết quả không xác định, nghĩa là không thể tính được kết quả.

Mã hoá đường dẫn

Loại mã hoá đường dẫn được sử dụng.

Enum
ENCODING_UNSPECIFIED Chưa chỉ định phương thức mã hoá nào. Mặc định là "URL_ENCODED" hành vi.
URL_ENCODED Coi các phân đoạn đường dẫn là URL được mã hoá nhưng có dấu phân tách không được mã hoá ("/"). Đây là chế độ mặc định.
PLAIN Xem toàn bộ đường dẫn là không phải URL được mã hoá, ví dụ: thô.

Biểu hiện báo cáoCấp độ

Lượng dữ liệu cần đưa vào phản hồi báo cáo biểu thức.

Enum
LEVEL_UNSPECIFIED Chưa chỉ định cấp độ. Giá trị mặc định là "NONE" hành vi.
NONE Không bao gồm bất kỳ thông tin bổ sung nào.
FULL Bao gồm báo cáo chi tiết về biểu thức được đánh giá.
VISITED Chỉ bao gồm các biểu thức đã được truy cập trong quá trình đánh giá.

Vấn đề

Các vấn đề bao gồm cảnh báo, lỗi và thông báo về việc ngừng sử dụng.

Biểu diễn dưới dạng JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Trường
sourcePosition

object (SourcePosition)

Vị trí của vấn đề trong Source.

description

string

Nội dung mô tả ngắn về lỗi.

severity

enum (Severity)

Mức độ nghiêm trọng của vấn đề.

Vị trí nguồn

Vị trí trong nội dung Source, bao gồm cả dòng, số cột và chỉ mục của File trong thông báo Source. Dùng cho mục đích gỡ lỗi.

Biểu diễn dưới dạng JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Trường
fileName

string

Tên của File.

line

integer

Số dòng của mảnh nguồn. Dựa trên 1.

column

integer

Cột đầu tiên trên dòng nguồn được liên kết với mảnh nguồn.

currentOffset

integer

Vị trí bắt đầu tương ứng với đầu tệp.

endOffset

integer

Vị trí kết thúc tương ứng với đầu tệp.

Tính nghiêm trọng

Tập hợp các mức độ nghiêm trọng của vấn đề.

Enum
SEVERITY_UNSPECIFIED Mức độ nghiêm trọng không xác định.
DEPRECATION Vấn đề ngừng sử dụng đối với bảng sao kê và phương thức có thể không còn được hỗ trợ hoặc duy trì.
WARNING Các cảnh báo như: biến không dùng đến.
ERROR Lỗi như: dấu ngoặc nhọn không khớp hoặc định nghĩa lại biến.

TestResult

Thông báo về kết quả kiểm thử có chứa trạng thái kiểm thử cũng như nội dung mô tả và vị trí nguồn của các lần kiểm thử không thành công.

Biểu diễn dưới dạng JSON
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Trường
state

enum (State)

Trạng thái kiểm thử.

debugMessages[]

string

Gỡ lỗi các thông báo liên quan đến các vấn đề thực thi kiểm thử gặp phải trong quá trình đánh giá.

Thông báo gỡ lỗi có thể liên quan đến việc quá nhiều hoặc quá ít lệnh gọi mô phỏng hàm hoặc lỗi thời gian chạy xảy ra trong quá trình đánh giá.

Ví dụ: Unable to read variable [name: "resource"]

errorPosition

object (SourcePosition)

Vị trí trong Source nơi xảy ra lỗi thời gian chạy nguyên tắc.

Việc đánh giá một biểu thức có thể dẫn đến lỗi. Theo mặc định, các quy tắc sẽ bị từ chối, vì vậy, kỳ vọng DENY khi tạo lỗi là hợp lệ. Khi có DENY có lỗi, SourcePosition sẽ được trả về.

Ví dụ: errorPosition { line: 19 column: 37 }

functionCalls[]

object (FunctionCall)

Tập hợp các lệnh gọi hàm được thực hiện đến phương thức do dịch vụ xác định.

Các lệnh gọi hàm được đưa vào theo thứ tự gặp trong quá trình đánh giá, được cung cấp cho cả hàm mô phỏng và hàm không mô phỏng, đồng thời được đưa vào phản hồi bất kể state kiểm thử là gì.

visitedExpressions[]

object (VisitedExpression)

Tập hợp các biểu thức quyền đã truy cập cho một chương trình kiểm thử nhất định. Hàm này trả về vị trí và kết quả đánh giá của tất cả biểu thức cấp quyền đã truy cập có liên quan đến trường hợp kiểm thử, ví dụ:

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

Để xem báo cáo chi tiết về các trạng thái đánh giá trung gian, hãy xem trường expressionReports

expressionReports[]

object (ExpressionReport)

Liên kết từ biểu thức trong AST của bộ quy tắc đến các giá trị mà chúng được đánh giá. Lồng một phần để phản ánh cấu trúc AST. Lưu ý rằng trường này thực sự là theo dõi các biểu thức và không phải là các câu lệnh quyền trái ngược với "visitedExpressions" trường ở trên. Biểu thức cố định đã bị bỏ qua.

Tiểu bang

Các trạng thái hợp lệ cho kết quả kiểm thử.

Enum
STATE_UNSPECIFIED Chưa đặt trạng thái thử nghiệm.
SUCCESS Thử nghiệm thành công.
FAILURE Quá trình kiểm thử không thành công.

Lệnh gọi hàm

Đại diện cho một lệnh gọi hàm do dịch vụ xác định đã được gọi trong quá trình thực thi kiểm thử.

Biểu diễn dưới dạng JSON
{
  "function": string,
  "args": [
    value
  ]
}
Trường
function

string

Tên của hàm được gọi.

args[]

value (Value format)

Các đối số đã được cung cấp cho hàm.

Biểu thức đã truy cập

Lưu trữ vị trí và kết quả truy cập cho một biểu thức được truy cập trong các quy tắc.

Biểu diễn dưới dạng JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Trường
sourcePosition

object (SourcePosition)

Vị trí trong Source nơi một biểu thức được truy cập.

value

value (Value format)

Giá trị được đánh giá cho biểu thức được truy cập, ví dụ: true/false

Báo cáo biểu hiện

Mô tả vị trí tìm thấy một biểu thức trong tệp và đối tượng đánh giá biểu thức đó trong quá trình sử dụng.

Biểu diễn dưới dạng JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Trường
sourcePosition

object (SourcePosition)

Vị trí của biểu thức trong nguồn quy tắc gốc.

values[]

object (ValueCount)

Các giá trị mà biểu thức này đánh giá khi gặp.

children[]

object (ExpressionReport)

Biểu thức phụ

Số lượng giá trị

Tua thông tin về số lần một Biểu thức được đánh giá cho một Biểu thức cụ thể.

Biểu diễn dưới dạng JSON
{
  "value": value,
  "count": integer
}
Trường
value

value (Value format)

Giá trị trả về của biểu thức

count

integer

Số lần biểu thức đó được trả về.