- คำขอ HTTP
- พารามิเตอร์เส้นทาง
- ขอร่างกาย
- ร่างกายตอบสนอง
- ขอบเขตการอนุญาต
- ชุดทดสอบ
- กรณีทดสอบ
- ความคาดหวัง
- ฟังก์ชันMock
- เรื่อง
- ผลลัพธ์
- การเข้ารหัสเส้นทาง
- ExpressionReportLevel
- ปัญหา
- ตำแหน่งแหล่งที่มา
- ความรุนแรง
- ผลการทดสอบ
- สถานะ
- FunctionCall
- เยี่ยมชม Expression
- รายงานนิพจน์
- การนับมูลค่า
- ลองมัน!
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 | ที่จำเป็น. สำหรับการทดสอบกับ |
ขอร่างกาย
เนื้อหาคำขอประกอบด้วยข้อมูลที่มีโครงสร้างดังต่อไปนี้:
การเป็นตัวแทน JSON | |
---|---|
{ "source": { object ( |
เขตข้อมูล | |
---|---|
source | |
testSuite | เมื่อมีการระบุ |
ร่างกายตอบสนอง
หากสำเร็จ เนื้อหาการตอบสนองจะมีข้อมูลที่มีโครงสร้างดังต่อไปนี้:
การตอบสนองต่อ FirebaseRulesService.TestRuleset
การเป็นตัวแทน JSON | |
---|---|
{ "issues": [ { object ( |
เขตข้อมูล | |
---|---|
issues[] | ปัญหา |
testResults[] | ชุดผลการทดสอบที่กำหนดกรณีการทดสอบใน |
ขอบเขตการอนุญาต
ต้องมีขอบเขต 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 ( |
เขตข้อมูล | |
---|---|
testCases[] | การรวบรวมกรณีทดสอบที่เกี่ยวข้องกับ |
กรณีทดสอบ
ข้อความ TestCase
ให้บริบทคำขอและความคาดหวังว่าบริบทที่กำหนดจะได้รับอนุญาตหรือปฏิเสธ กรณีทดสอบอาจระบุ request
, resosurce
และ functionMocks
เพื่อจำลองการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ให้บริการ
วัตถุ request
แสดงถึงบริบทปัจจุบัน ณ เวลาที่ร้องขอ
resource
คือค่าของทรัพยากรเป้าหมาย (เช่น ข้อมูลเมตาของออบเจ็กต์ GCS หรือเอกสาร Firestore) ตามที่ปรากฏในที่เก็บข้อมูลถาวรก่อนที่จะดำเนินการคำขอ
โปรดดูเอกสารอ้างอิงที่เกี่ยวข้องสำหรับ Cloud Firestore ( request , resources ) และ Cloud Storage for Firebase ( request , resources )
การเป็นตัวแทน JSON | |
---|---|
{ "expectation": enum ( |
เขตข้อมูล | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | ทดสอบความคาดหวัง | ||||||||||||||||
request | ขอบริบท รูปแบบที่แน่นอนของบริบทคำขอขึ้นอยู่กับบริการ ดูเอกสารการบริการที่เหมาะสมสำหรับข้อมูลเกี่ยวกับฟิลด์และประเภทที่รองรับในคำขอ ขั้นต่ำสุดคือบริการทั้งหมดรองรับฟิลด์และประเภทต่อไปนี้:
หากค่าคำขอมีรูปแบบไม่ถูกต้องสำหรับบริการ คำขอจะถูกปฏิเสธเนื่องจากอาร์กิวเมนต์ที่ไม่ถูกต้อง | ||||||||||||||||
resource | มูลค่าทรัพยากรเพิ่มเติมตามที่ปรากฏในที่เก็บข้อมูลถาวรก่อนที่จะตอบสนองคำขอ ประเภททรัพยากรขึ้นอยู่กับค่า | ||||||||||||||||
functionMocks[] | ฟังก์ชันกฎเสริมจะจำลองสำหรับฟังก์ชันที่กำหนดโดยบริการ หากไม่ได้ตั้งค่า ฟังก์ชันกฎที่กำหนดโดยบริการใดๆ จะต้องส่งคืนข้อผิดพลาด ซึ่งอาจส่งผลต่อผลการทดสอบหรือไม่ก็ได้ | ||||||||||||||||
pathEncoding | ระบุว่าเส้นทาง (เช่น request.path) ได้รับการเข้ารหัสหรือไม่ และอย่างไร | ||||||||||||||||
expressionReportLevel | ระบุสิ่งที่ควรรวมไว้ในการตอบกลับ |
ความคาดหวัง
ชุดความคาดหวังของกรณีทดสอบที่รองรับ
เอนัม | |
---|---|
EXPECTATION_UNSPECIFIED | ความคาดหวังที่ไม่ระบุรายละเอียด |
ALLOW | คาดหวังผลลัพธ์ที่ได้รับอนุญาต |
DENY | คาดหวังผลลัพธ์ที่ถูกปฏิเสธ |
ฟังก์ชันMock
นิยามฟังก์ชันกฎจำลอง
การเยาะเย้ยต้องอ้างถึงฟังก์ชันที่ประกาศโดยบริการเป้าหมาย ประเภทของฟังก์ชัน args และผลลัพธ์จะถูกอนุมาน ณ เวลาทดสอบ หากค่า arg หรือค่าผลลัพธ์ไม่เข้ากันกับการประกาศประเภทฟังก์ชัน คำขอจะถือว่าไม่ถูกต้อง
อาจระบุ FunctionMock
ได้มากกว่าหนึ่งรายการสำหรับชื่อฟังก์ชันที่กำหนด ตราบใดที่ตัวจับคู่ Arg
นั้นแตกต่างกัน โอเวอร์โหลดที่กำหนดอาจมีได้เพียงฟังก์ชันเดียว โดยที่ค่า Arg
ทั้งหมดเป็น Arg.any_value
ดูเพิ่มเติมที่ ฟังก์ชันในภาษากฎความปลอดภัย
การเป็นตัวแทน JSON | |
---|---|
{ "function": string, "args": [ { object ( |
เขตข้อมูล | |
---|---|
function | ชื่อของฟังก์ชัน ชื่อฟังก์ชันจะต้องตรงกับชื่อที่ระบุในการประกาศบริการ |
args[] | รายการค่า |
result | ผลลัพธ์จำลองของการเรียกใช้ฟังก์ชัน |
เรื่อง
ตัวจับคู่ Arg สำหรับฟังก์ชันจำลอง
การเป็นตัวแทน JSON | |
---|---|
{ // Union field |
เขตข้อมูล | ||
---|---|---|
type ฟิลด์ยูเนี่ยน ค่าอาร์กิวเมนต์ที่รองรับ type สามารถมีได้เพียงอย่างใดอย่างหนึ่งต่อไปนี้: | ||
exactValue | อาร์กิวเมนต์ตรงกับค่าที่ระบุทุกประการ | |
anyValue | อาร์กิวเมนต์ตรงกับค่าใดๆ ที่ให้ไว้ |
ผลลัพธ์
ค่าผลลัพธ์ที่เป็นไปได้จากการเรียกใช้ฟังก์ชันจำลอง
การเป็นตัวแทน JSON | |
---|---|
{ // Union field |
เขตข้อมูล | ||
---|---|---|
type ฟิลด์ยูเนี่ยน ค่าผลลัพธ์ที่รองรับ type สามารถมีได้เพียงอย่างใดอย่างหนึ่งต่อไปนี้: | ||
value | ผลลัพธ์ที่ได้คือมูลค่าที่แท้จริง ประเภทของค่าจะต้องตรงกับประเภทที่บริการประกาศไว้ | |
undefined | ผลลัพธ์ไม่ได้กำหนดไว้ หมายความว่าไม่สามารถคำนวณผลลัพธ์ได้ |
การเข้ารหัสเส้นทาง
ประเภทของการเข้ารหัสเส้นทางที่ใช้
เอนัม | |
---|---|
ENCODING_UNSPECIFIED | ไม่มีการระบุการเข้ารหัส ค่าเริ่มต้นเป็นลักษณะการทำงาน "URL_ENCODED" |
URL_ENCODED | ถือว่าส่วนของเส้นทางเป็น URL ที่เข้ารหัส แต่มีตัวคั่นที่ไม่ได้เข้ารหัส ("/") นี่เป็นพฤติกรรมเริ่มต้น |
PLAIN | ถือว่าเส้นทางทั้งหมดเป็นการเข้ารหัสที่ไม่ใช่ URL เช่นดิบ |
ExpressionReportLevel
จำนวนข้อมูลที่จะรวมไว้ในการตอบสนองรายงานนิพจน์
เอนัม | |
---|---|
LEVEL_UNSPECIFIED | ไม่มีการระบุระดับ ค่าเริ่มต้นเป็นลักษณะการทำงาน "NONE" |
NONE | ไม่ต้องใส่ข้อมูลเพิ่มเติมใดๆ |
FULL | รวมการรายงานโดยละเอียดเกี่ยวกับนิพจน์ที่ประเมิน |
VISITED | รวมเฉพาะนิพจน์ที่เข้าชมระหว่างการประเมินเท่านั้น |
ปัญหา
ปัญหาต่างๆ ได้แก่ คำเตือน ข้อผิดพลาด และประกาศเลิกใช้งาน
การเป็นตัวแทน JSON | |
---|---|
{ "sourcePosition": { object ( |
เขตข้อมูล | |
---|---|
sourcePosition | ตำแหน่งของปัญหาใน |
description | คำอธิบายข้อผิดพลาดสั้น ๆ |
severity | ความรุนแรงของปัญหา |
ตำแหน่งแหล่งที่มา
ตำแหน่งในเนื้อหา Source
รวมถึงบรรทัด หมายเลขคอลัมน์ และดัชนีของ File
ในข้อความ Source
ใช้เพื่อวัตถุประสงค์ในการตรวจแก้จุดบกพร่อง
การเป็นตัวแทน JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
เขตข้อมูล | |
---|---|
fileName | ชื่อของ |
line | หมายเลขบรรทัดของส่วนแหล่งที่มา 1-based |
column | คอลัมน์แรกบนบรรทัดต้นทางที่เกี่ยวข้องกับส่วนของต้นทาง |
currentOffset | ตำแหน่งเริ่มต้นสัมพันธ์กับจุดเริ่มต้นของไฟล์ |
endOffset | ตำแหน่งสิ้นสุดสัมพันธ์กับจุดเริ่มต้นของไฟล์ |
ความรุนแรง
ชุดของความรุนแรงของปัญหา
เอนัม | |
---|---|
SEVERITY_UNSPECIFIED | ความรุนแรงที่ไม่ระบุรายละเอียด |
DEPRECATION | ปัญหาการเลิกใช้งานสำหรับคำสั่งและวิธีการที่อาจไม่ได้รับการสนับสนุนหรือดูแลรักษาอีกต่อไป |
WARNING | คำเตือน เช่น ตัวแปรที่ไม่ได้ใช้ |
ERROR | ข้อผิดพลาด เช่น เครื่องหมายปีกกาที่ไม่ตรงกันหรือการกำหนดตัวแปรใหม่ |
ผลการทดสอบ
ข้อความผลการทดสอบประกอบด้วยสถานะของการทดสอบ ตลอดจนคำอธิบายและตำแหน่งต้นทางสำหรับความล้มเหลวในการทดสอบ
การเป็นตัวแทน JSON | |
---|---|
{ "state": enum ( |
เขตข้อมูล | |
---|---|
state | สถานะของการทดสอบ |
debugMessages[] | แก้ไขข้อความที่เกี่ยวข้องกับปัญหาการดำเนินการทดสอบที่พบในระหว่างการประเมิน ข้อความแก้ไขข้อบกพร่องอาจเกี่ยวข้องกับการเรียกใช้ฟังก์ชันจำลองมากเกินไปหรือน้อยเกินไป หรือข้อผิดพลาดรันไทม์ที่เกิดขึ้นระหว่างการประเมิน ตัวอย่างเช่น: |
errorPosition | ตำแหน่งใน การประเมินนิพจน์อาจส่งผลให้เกิดข้อผิดพลาด กฎจะถูกปฏิเสธตามค่าเริ่มต้น ดังนั้นการคาดหวัง เช่น |
functionCalls[] | ชุดของการเรียกใช้ฟังก์ชันที่ทำกับวิธีการที่กำหนดโดยบริการ การเรียกใช้ฟังก์ชันจะรวมอยู่ในลำดับที่พบระหว่างการประเมิน มีไว้สำหรับฟังก์ชันที่จำลองและไม่ได้จำลอง และรวมไว้ในการตอบสนองโดยไม่คำนึงถึง |
visitedExpressions[] | ชุดของนิพจน์สิทธิ์ที่เยี่ยมชมสำหรับการทดสอบที่กำหนด ซึ่งจะส่งคืนตำแหน่งและผลการประเมินของนิพจน์สิทธิ์ที่เยี่ยมชมทั้งหมดซึ่งเกี่ยวข้องกับกรณีทดสอบ เช่น
สำหรับรายงานโดยละเอียดเกี่ยวกับสถานะการประเมินระดับกลาง โปรดดูที่ฟิลด์ |
expressionReports[] | การแมปจากนิพจน์ในชุดกฎ AST กับค่าที่ได้รับการประเมิน ซ้อนกันบางส่วนเพื่อสะท้อนโครงสร้าง AST โปรดทราบว่าจริง ๆ แล้วฟิลด์นี้ติดตามนิพจน์และไม่ใช่คำชี้แจงสิทธิ์ซึ่งตรงกันข้ามกับฟิลด์ "visitedExpressions" ด้านบน สำนวนตามตัวอักษรจะถูกละเว้น |
สถานะ
สถานะที่ถูกต้องสำหรับผลการทดสอบ
เอนัม | |
---|---|
STATE_UNSPECIFIED | ไม่ได้ตั้งค่าสถานะการทดสอบ |
SUCCESS | การทดสอบคือความสำเร็จ |
FAILURE | การทดสอบคือความล้มเหลว |
FunctionCall
แสดงถึงการเรียกใช้ฟังก์ชันที่กำหนดโดยบริการซึ่งถูกเรียกใช้ระหว่างการดำเนินการทดสอบ
การเป็นตัวแทน JSON | |
---|---|
{ "function": string, "args": [ value ] } |
เขตข้อมูล | |
---|---|
function | ชื่อของฟังก์ชันที่เรียกใช้ |
args[] | อาร์กิวเมนต์ที่กำหนดให้กับฟังก์ชัน |
เยี่ยมชม Expression
จัดเก็บตำแหน่งและผลลัพธ์การเข้าถึงสำหรับนิพจน์ที่เข้าชมในกฎ
การเป็นตัวแทน JSON | |
---|---|
{
"sourcePosition": {
object ( |
เขตข้อมูล | |
---|---|
sourcePosition | ตำแหน่งใน |
value | ค่าที่ประเมินสำหรับนิพจน์ที่เข้าชม เช่น จริง/เท็จ |
รายงานนิพจน์
อธิบายว่านิพจน์สามารถพบได้ที่ใดในไฟล์ และสิ่งที่ได้รับการประเมินตลอดการใช้งาน
การเป็นตัวแทน JSON | |
---|---|
{ "sourcePosition": { object ( |
เขตข้อมูล | |
---|---|
sourcePosition | ตำแหน่งของนิพจน์ในแหล่งที่มาของกฎดั้งเดิม |
values[] | ค่าที่นิพจน์นี้ประเมินเมื่อพบ |
children[] | การแสดงออกย่อย |
การนับมูลค่า
Tuple สำหรับจำนวนครั้งที่ Expression ได้รับการประเมินเป็น ExpressionValue เฉพาะ
การเป็นตัวแทน JSON | |
---|---|
{ "value": value, "count": integer } |
เขตข้อมูล | |
---|---|
value | ค่าที่ส่งคืนของนิพจน์ |
count | จำนวนครั้งที่นิพจน์นั้นส่งคืน |