Method: projects.test

Source ทดสอบสำหรับความถูกต้องทางวากยสัมพันธ์และความหมาย ปัญหาที่มีอยู่ (ถ้ามี) จะถูกส่งกลับไปยังผู้โทรพร้อมคำอธิบาย ความร้ายแรง และตำแหน่งต้นทาง

วิธีทดสอบอาจดำเนินการด้วย Source Passing Source มีประโยชน์สำหรับหน่วยทดสอบกฎใหม่

โปรดทราบว่าการทดสอบดำเนินการโดยใช้ REST API จะใช้ฐานข้อมูลที่ใช้งานจริง บัคเก็ตพื้นที่จัดเก็บ และแหล่งข้อมูลที่เกี่ยวข้อง การทดสอบดังกล่าวอาจมีค่าบริการในการใช้งาน เราขอแนะนำอย่างยิ่งให้คุณใช้ 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

URL ใช้ไวยากรณ์ การแปลงรหัส gRPC

พารามิเตอร์เส้นทาง

พารามิเตอร์
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 ให้บริบทคำขอและความคาดหวังว่าบริบทที่กำหนดจะได้รับอนุญาตหรือปฏิเสธ กรณีทดสอบอาจระบุ request , resosurce และ functionMocks เพื่อจำลองการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ให้บริการ

วัตถุ request แสดงถึงบริบทปัจจุบัน ณ เวลาที่ร้องขอ

resource คือค่าของทรัพยากรเป้าหมาย (เช่น ข้อมูลเมตาของออบเจ็กต์ GCS หรือเอกสาร Firestore) ตามที่ปรากฏในที่เก็บข้อมูลถาวรก่อนที่จะดำเนินการคำขอ

โปรดดูเอกสารอ้างอิงที่เกี่ยวข้องสำหรับ Cloud Firestore ( request , resources ) และ Cloud Storage for Firebase ( request , resources )

การเป็นตัวแทน 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.โทเค็น 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 )

ระบุสิ่งที่ควรรวมไว้ในการตอบกลับ

ความคาดหวัง

ชุดความคาดหวังของกรณีทดสอบที่รองรับ

เอนัม
EXPECTATION_UNSPECIFIED ความคาดหวังที่ไม่ระบุรายละเอียด
ALLOW คาดหวังผลลัพธ์ที่ได้รับอนุญาต
DENY คาดหวังผลลัพธ์ที่ถูกปฏิเสธ

ฟังก์ชันMock

นิยามฟังก์ชันกฎจำลอง

การเยาะเย้ยต้องอ้างถึงฟังก์ชันที่ประกาศโดยบริการเป้าหมาย ประเภทของฟังก์ชัน 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 )

ผลลัพธ์จำลองของการเรียกใช้ฟังก์ชัน

เรื่อง

ตัวจับคู่ Arg สำหรับฟังก์ชันจำลอง

การเป็นตัวแทน 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 ถือว่าส่วนของเส้นทางเป็น URL ที่เข้ารหัส แต่มีตัวคั่นที่ไม่ได้เข้ารหัส ("/") นี่เป็นพฤติกรรมเริ่มต้น
PLAIN ถือว่าเส้นทางทั้งหมดเป็นการเข้ารหัสที่ไม่ใช่ URL เช่นดิบ

ExpressionReportLevel

จำนวนข้อมูลที่จะรวมไว้ในการตอบสนองรายงานนิพจน์

เอนัม
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-based

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)

อาร์กิวเมนต์ที่กำหนดให้กับฟังก์ชัน

เยี่ยมชม Expression

จัดเก็บตำแหน่งและผลลัพธ์การเข้าถึงสำหรับนิพจน์ที่เข้าชมในกฎ

การเป็นตัวแทน JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
เขตข้อมูล
sourcePosition

object ( SourcePosition )

ตำแหน่งใน Source ซึ่งมีการเยี่ยมชมนิพจน์

value

value ( Value format)

ค่าที่ประเมินสำหรับนิพจน์ที่เข้าชม เช่น จริง/เท็จ

รายงานนิพจน์

อธิบายว่านิพจน์สามารถพบได้ที่ใดในไฟล์ และสิ่งที่ได้รับการประเมินตลอดการใช้งาน

การเป็นตัวแทน JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
เขตข้อมูล
sourcePosition

object ( SourcePosition )

ตำแหน่งของนิพจน์ในแหล่งที่มาของกฎดั้งเดิม

values[]

object ( ValueCount )

ค่าที่นิพจน์นี้ประเมินเมื่อพบ

children[]

object ( ExpressionReport )

การแสดงออกย่อย

การนับมูลค่า

Tuple สำหรับจำนวนครั้งที่ Expression ได้รับการประเมินเป็น ExpressionValue เฉพาะ

การเป็นตัวแทน JSON
{
  "value": value,
  "count": integer
}
เขตข้อมูล
value

value ( Value format)

ค่าที่ส่งคืนของนิพจน์

count

integer

จำนวนครั้งที่นิพจน์นั้นส่งคืน