Method: projects.test

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

Phương pháp thử nghiệm có thể được thực thi với Source . Chuyển Source rất hữu ích cho việc kiểm tra đơn vị các quy tắc mới.

Lưu ý rằng các thử nghiệm chạy bằng API REST sẽ sử dụng cơ sở dữ liệu sản xuất, nhóm lưu trữ và các nguồn tài nguyên liên quan. Việc kiểm tra như vậy có thể phải chịu phí sử dụng. Chúng tôi thực sự khuyên bạn nên sử dụng Bộ mô phỏng cục bộ Firebase để thực hiện kiểm tra Quy tắc vì bạn có thể chạy thử nghiệm trên các tài nguyên ngoại tuyến, phi sản xuất 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 nhóm chứa id người dùng của họ và khớp với siêu dữ liệu chính xác:

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

Yêu cầu. Để kiểm tra 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

Phần thân yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Lĩnh vực
source

object ( Source )

Source cần được kiểm tra tính chính xác.

testSuite

object ( TestSuite )

TestSuite nội tuyến để thực thi đối với Source .

Khi Source được cung cấp nội tuyến, các trường hợp thử nghiệm sẽ chỉ được chạy nếu Source hợp lệ về mặt cú pháp và ngữ nghĩa.

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 JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Lĩnh vực
issues[]

object ( Issue )

Các vấn đề Source cú pháp và ngữ nghĩa có mức độ nghiêm trọng khác nhau. Các vấn đề về mức độ nghiêm trọng ERROR sẽ ngăn việc thực thi các bài kiểm tra.

testResults[]

object ( TestResult )

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

Phạm vi ủy 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 Tổng quan về xác thực .

TestSuite

TestSuite là tập hợp các phiên bản TestCase xác thực tính đúng đắn về mặt 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 là một phần của đối tượng Release dưới dạng kiểm tra trước khi phát hành.

Biểu diễn JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Lĩnh vực
testCases[]

object ( TestCase )

Bộ sưu tập các trường hợp thử nghiệm được liên kết với TestSuite .

trường hợp thử nghiệm

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

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

resource là giá trị của tài nguyên đích (ví dụ: siêu dữ liệu của đối tượng GCS hoặc tài liệu Firestore) khi nó xuất hiện trong bộ lưu trữ 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 liên quan cho Cloud Firestore ( request , tài nguyên ) và Cloud Storage cho Firebase ( request , tài nguyên ).

Biểu diễn JSON
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Lĩnh vực
expectation

enum ( Expectation )

Kiểm tra kỳ vọng.

request

value ( Value format)

Yêu cầu ngữ cảnh.

Định dạng chính xác của ngữ cảnh yêu cầu phụ thuộc vào dịch vụ. 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. 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 Kiểu
auth.uid string
xác thực.token map<string, string>
tiêu đề map<string, string>
phương pháp string
thông số map<string, string>
con đường 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ụ thì yêu cầu sẽ bị từ chối vì đối số không hợp lệ.

resource

value ( Value format)

Giá trị tài nguyên tùy chọn xuất hiện trong bộ lưu trữ 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 )

Mô phỏng chức năng Quy tắc tùy chọn cho các chức năng do dịch vụ xác định. Nếu không được đặt, mọi chức năng Quy tắc do dịch vụ xác định sẽ trả về lỗi. Lỗi này có thể ảnh hưởng hoặc không ảnh hưởng đến kết quả kiểm tra.

pathEncoding

enum ( PathEncoding )

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

expressionReportLevel

enum ( ExpressionReportLevel )

Chỉ định những gì nên được bao gồm trong phản hồi.

Kỳ vọng

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

Enum
EXPECTATION_UNSPECIFIED Kỳ vọng không xác định.
ALLOW Mong đợi một kết quả cho phép.
DENY Mong đợi một kết quả bị từ chối.

Chức năngMock

Định nghĩa hàm Mock Rules.

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

Có thể cung cấp nhiều hơn một FunctionMock cho một tên hàm nhất định 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 tình trạng quá tải nhất định trong đó tất cả các giá trị Arg đều là Arg.any_value .

Xem thêm Chức năng trong ngôn ngữ Quy tắc bảo mật .

Biểu diễn JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Lĩnh vực
function

string

Tên của chức năng.

Tên hàm phải khớp với tên được khai báo dịch vụ cung cấp.

args[]

object ( Arg )

Danh sách các giá trị Arg phù hợp. Thứ tự cung cấp các đối số là thứ tự chúng 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 đối số cho hàm mô phỏng.

Biểu diễn 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.
}
Lĩnh vực
type trường liên minh. Các giá trị đối số được hỗ trợ. type chỉ có thể là một trong những loại sau:
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 bất kỳ giá trị nào được cung cấp.

Kết quả

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

Biểu diễn 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.
}
Lĩnh vực
type trường liên minh. Giá trị kết quả được hỗ trợ. type chỉ có thể là một trong những loại sau:
value

value ( Value format)

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

undefined

object

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

Mã hóa đường dẫn

Loại mã hóa đường dẫn được sử dụng.

Enum
ENCODING_UNSPECIFIED Không có mã hóa nào được chỉ định. Mặc định là hành vi "URL_ENCODED".
URL_ENCODED Xử lý các phân đoạn đường dẫn dưới dạng URL được mã hóa nhưng có dấu phân cách không được mã hóa ("/"). Đây là hành vi mặc định.
PLAIN Xử lý tổng số đường dẫn dưới dạng mã hóa không phải URL, ví dụ như thô.

Biểu thứcBáo cáoMức độ

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 Không có cấp độ nào được chỉ định. Mặc định là hành vi "KHÔNG".
NONE Không bao gồm bất kỳ thông tin bổ sung.
FULL Bao gồm báo cáo chi tiết về các 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 ngừng sử dụng.

Biểu diễn JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Lĩnh vực
sourcePosition

object ( SourcePosition )

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

description

string

Mô tả lỗi ngắn gọn.

severity

enum ( Severity )

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

NguồnVị trí

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

Biểu diễn JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Lĩnh vực
fileName

string

Tên của File .

line

integer

Số dòng của đoạn 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 đoạn nguồn.

currentOffset

integer

Vị trí bắt đầu so với phần đầu của tập tin.

endOffset

integer

Vị trí kết thúc so với phần đầu của tập tin.

Mức độ nghiêm trọng

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

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

Kết quả kiểm tra

Thông báo kết quả kiểm tra chứa trạng thái kiểm tra cũng như mô tả và vị trí nguồn của các lỗi kiểm tra.

Biểu diễn JSON
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Lĩnh vực
state

enum ( State )

Trạng thái của bài kiểm tra.

debugMessages[]

string

Thông báo gỡ lỗi liên quan đến các vấn đề thực hiện 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 quá nhiều hoặc quá ít lệnh gọi hàm mô phỏng 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ể gây ra lỗi. Các quy tắc bị từ chối theo mặc định, do đó, kỳ vọng DENY khi xảy ra lỗi là hợp lệ. Khi có DENY bị 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 cho các phương thức do dịch vụ xác định.

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

visitedExpressions[]

object ( VisitedExpression )

Tập hợp các biểu thức cấp phép đã truy cập cho một bài kiểm tra nhất định. Điều này trả về vị trí và kết quả đánh giá của tất cả các biểu thức cấp phép đã truy cập có liên quan đến trường hợp thử nghiệm, ví dụ:

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

Để biết 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 )

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

Tình trạng

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

Enum
STATE_UNSPECIFIED Trạng thái kiểm tra chưa được thiết lập.
SUCCESS Thử nghiệm là thành công.
FAILURE Thử nghiệm là một thất bại.

Chức năngGọi

Biểu thị lệnh gọi hàm do dịch vụ xác định đã được gọi trong quá trình thực hiện kiểm thử.

Biểu diễn JSON
{
  "function": string,
  "args": [
    value
  ]
}
Lĩnh vực
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.

Đã truy cậpBiểu hiện

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

Biểu diễn JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Lĩnh vực
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 đã truy cập, ví dụ: đúng/sai

Báo cáo biểu thức

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

Biểu diễn JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Lĩnh vực
sourcePosition

object ( SourcePosition )

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

values[]

object ( ValueCount )

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

children[]

object ( ExpressionReport )

Biểu thức con

Giá trịĐếm

Bộ dữ liệu về số lần một Biểu thức được đánh giá cho một Giá trị biểu thức cụ thể.

Biểu diễn JSON
{
  "value": value,
  "count": integer
}
Lĩnh vực
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ề.