- คำขอ HTTP
- พารามิเตอร์เส้นทาง
- เนื้อหาคำขอ
- เนื้อหาการตอบกลับ
- ขอบเขตการให้สิทธิ์
- TestSuite
- กรอบการทดสอบ
- ความคาดหวัง
- FunctionMock
- Arg
- ผลลัพธ์
- PathEncoding
- ระดับรายงานนิพจน์
- ปัญหา
- ตำแหน่งแหล่งที่มา
- ระดับความรุนแรง
- ผลการทดสอบ
- สถานะ
- FunctionCall
- นิพจน์ที่เข้าชม
- รายงานนิพจน์
- ValueCount
- ลองเลย
ทดสอบ Source
เพื่อดูความถูกต้องของไวยากรณ์และความหมาย ปัญหาที่พบ (หากมี) จะส่งกลับไปยังผู้โทรพร้อมคำอธิบาย ความรุนแรง และตำแหน่งต้นทาง
วิธีทดสอบอาจดำเนินการด้วย Source
การส่ง 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
ข้อความ TestCase
ให้บริบทคำขอและความคาดหวังว่าบริบทดังกล่าวจะได้รับอนุญาตหรือปฏิเสธ กรอบการทดสอบอาจระบุ request
, resosurce
และ functionMocks
เพื่อจำลองการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ให้บริการ
ออบเจ็กต์ request
แสดงบริบทที่มีอยู่ ณ เวลาที่ส่งคำขอ
resource
คือค่าของทรัพยากรเป้าหมาย (เช่น ข้อมูลเมตาของออบเจ็กต์ GCS หรือเอกสาร Firestore) ตามที่ปรากฏในพื้นที่เก็บข้อมูลถาวรก่อนดำเนินการตามคำขอ
โปรดดูเอกสารอ้างอิงที่เกี่ยวข้องสำหรับ Cloud Firestore ( คำขอ, ทรัพยากร) และ Cloud Storage for Firebase (คำขอ, ทรัพยากร)
การแสดง JSON | |
---|---|
{ "expectation": enum ( |
ช่อง | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
ความคาดหวังในการทดสอบ |
||||||||||||||||
request |
ขอบริบท รูปแบบเฉพาะของบริบทคำขอจะขึ้นอยู่กับบริการ ดูข้อมูลเกี่ยวกับช่องและประเภทที่รองรับในคำขอได้จากเอกสารประกอบของบริการที่เหมาะสม บริการทั้งหมดรองรับฟิลด์และประเภทต่อไปนี้เป็นอย่างน้อย
หากค่าคำขอมีรูปแบบที่ไม่ถูกต้องสำหรับบริการ คำขอจะถูกปฏิเสธเนื่องจากเป็นอาร์กิวเมนต์ที่ไม่ถูกต้อง |
||||||||||||||||
resource |
ค่าทรัพยากรที่ไม่บังคับตามที่ปรากฏในพื้นที่เก็บข้อมูลถาวรก่อนจะมีการดำเนินการตามคำขอ ประเภททรัพยากรขึ้นอยู่กับค่า |
||||||||||||||||
functionMocks[] |
การจำลองฟังก์ชันกฎที่ไม่บังคับสำหรับฟังก์ชันที่บริการกำหนด หากไม่ได้ตั้งค่า ฟังก์ชันกฎที่บริการกำหนดควรแสดงข้อผิดพลาด ซึ่งอาจมีผลกับผลการทดสอบหรือไม่ก็ได้ |
||||||||||||||||
pathEncoding |
ระบุว่าเส้นทาง (เช่น request.path) มีการเข้ารหัสหรือไม่และอย่างไร |
||||||||||||||||
expressionReportLevel |
ระบุสิ่งที่ควรรวมไว้ในการตอบกลับ |
ความคาดหวัง
ชุดความคาดหวังของกรอบการทดสอบที่รองรับ
Enum | |
---|---|
EXPECTATION_UNSPECIFIED |
ความคาดหวังที่ไม่ได้ระบุ |
ALLOW |
คาดหวังผลลัพธ์ที่อนุญาต |
DENY |
คาดว่าจะได้รับผลลัพธ์ที่ถูกปฏิเสธ |
การจำลองฟังก์ชัน
คำจำกัดความของฟังก์ชันกฎจำลอง
การจำลองต้องอ้างอิงฟังก์ชันที่บริการเป้าหมายประกาศ ระบบจะอนุมานประเภทของฟังก์ชันอาร์กิวเมนต์และผลลัพธ์ ณ เวลาทดสอบ หากค่าอาร์กิวเมนต์หรือค่าผลลัพธ์เข้ากันไม่ได้กับการประกาศประเภทฟังก์ชัน คำขอจะถือว่าไม่ถูกต้อง
ชื่อฟังก์ชันอาจระบุ FunctionMock
มากกว่า 1 รายการได้ตราบใดที่ตัวจับคู่ 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 |
ผลลัพธ์ไม่ได้ระบุ ทำให้ไม่สามารถคำนวณผลลัพธ์ได้ |
PathEncoding
ประเภทของการเข้ารหัสเส้นทางที่ใช้
Enum | |
---|---|
ENCODING_UNSPECIFIED |
ไม่ได้ระบุการเข้ารหัส ค่าเริ่มต้นคือ "URL_ENCODED" พฤติกรรมของคุณ |
URL_ENCODED |
ถือว่ากลุ่มเส้นทางเป็น URL ที่เข้ารหัสแต่มีตัวคั่นที่ไม่เข้ารหัส ("/") นี่คือลักษณะการทำงานเริ่มต้น |
PLAIN |
ถือว่าเส้นทางทั้งหมดเป็นเส้นทางที่ไม่ได้เข้ารหัส URL เช่น ไฟล์ข้อมูล RAW |
ระดับรายงานนิพจน์
ปริมาณข้อมูลที่จะรวมไว้ในคำตอบของรายงานนิพจน์
Enum | |
---|---|
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 ฐาน |
column |
คอลัมน์แรกในบรรทัดแหล่งที่มาที่เชื่อมโยงกับส่วนย่อยของแหล่งที่มา |
currentOffset |
ตำแหน่งเริ่มต้นโดยสัมพันธ์กับส่วนต้นของไฟล์ |
endOffset |
ตำแหน่งสิ้นสุดที่สัมพันธ์กับจุดเริ่มต้นของไฟล์ |
ความรุนแรง
ชุดความรุนแรงของปัญหา
Enum | |
---|---|
SEVERITY_UNSPECIFIED |
ความรุนแรงที่ไม่ได้ระบุ |
DEPRECATION |
ปัญหาการเลิกใช้งานข้อความและวิธีการที่อาจไม่ได้รับการสนับสนุนหรือรักษาไว้อีกต่อไป |
WARNING |
คำเตือน เช่น ตัวแปรที่ไม่ได้ใช้ |
ERROR |
ข้อผิดพลาดต่างๆ เช่น วงเล็บปีกกาไม่ตรงกันหรือการกำหนดตัวแปรใหม่ |
TestResult
ข้อความผลการทดสอบที่มีสถานะการทดสอบ รวมถึงคำอธิบายและตำแหน่งต้นทางสำหรับความล้มเหลวในการทดสอบ
การแสดง JSON | |
---|---|
{ "state": enum ( |
ช่อง | |
---|---|
state |
สถานะของการทดสอบ |
debugMessages[] |
แก้ไขข้อบกพร่องของข้อความที่เกี่ยวข้องกับปัญหาการดำเนินการทดสอบที่พบระหว่างการประเมิน ข้อความการแก้ไขข้อบกพร่องอาจเกี่ยวข้องกับการเรียกใช้การจำลองฟังก์ชันมากเกินไปหรือน้อยเกินไป หรือข้อผิดพลาดขณะรันไทม์ที่เกิดขึ้นระหว่างการประเมิน เช่น |
errorPosition |
ตำแหน่งใน การประเมินนิพจน์อาจทำให้เกิดข้อผิดพลาด ระบบจะปฏิเสธกฎโดยค่าเริ่มต้น ดังนั้นการคาดการณ์ของ เช่น |
functionCalls[] |
ชุดของการเรียกฟังก์ชันสำหรับเมธอดที่กำหนดโดยบริการ การเรียกฟังก์ชันจะรวมอยู่ในลำดับที่พบระหว่างการประเมิน มีไว้สำหรับทั้งฟังก์ชันที่จำลองและไม่มีการเลียนแบบ และรวมอยู่ในการตอบกลับโดยไม่คำนึงถึง |
visitedExpressions[] |
ชุดของนิพจน์สิทธิ์ที่เข้าชมสำหรับการทดสอบที่กำหนด การดำเนินการนี้จะแสดงตำแหน่งและผลการประเมินของนิพจน์สิทธิ์ที่เข้าชมทั้งหมดที่เกี่ยวข้องกับกรอบการทดสอบ เช่น
สำหรับรายงานโดยละเอียดเกี่ยวกับสถานะการประเมินระดับกลาง โปรดดูที่ช่อง |
expressionReports[] |
การจับคู่จากนิพจน์ในชุด AST ของชุดกฎกับค่าที่ได้รับการประเมิน ซ้อนบางส่วนตามโครงสร้าง AST แบบมิเรอร์ โปรดทราบว่าฟิลด์นี้จะติดตามนิพจน์ ไม่ใช่คำสั่งสิทธิ์ซึ่งตรงข้ามกับ "visitedExpressions" ด้านบน ไม่แสดงนิพจน์ตรงตัว |
รัฐ
สถานะที่ถูกต้องสำหรับผลการทดสอบ
Enum | |
---|---|
STATE_UNSPECIFIED |
ยังไม่ได้ตั้งสถานะทดสอบ |
SUCCESS |
การทดสอบประสบความสำเร็จ |
FAILURE |
การทดสอบล้มเหลว |
การเรียกใช้ฟังก์ชัน
แสดงการเรียกใช้ฟังก์ชันที่บริการกำหนดที่เรียกใช้ระหว่างการดำเนินการทดสอบ
การแสดง JSON | |
---|---|
{ "function": string, "args": [ value ] } |
ช่อง | |
---|---|
function |
ชื่อของฟังก์ชันที่เรียกใช้ |
args[] |
อาร์กิวเมนต์ที่ระบุให้กับฟังก์ชัน |
นิพจน์ที่เยี่ยมชมแล้ว
จัดเก็บตำแหน่งและผลลัพธ์การเข้าถึงสำหรับนิพจน์ที่เข้าชมในกฎ
การแสดง JSON | |
---|---|
{
"sourcePosition": {
object ( |
ช่อง | |
---|---|
sourcePosition |
ตำแหน่งใน |
value |
ค่าที่ประเมินสำหรับนิพจน์ที่เข้าชม เช่น จริง/เท็จ |
รายงานนิพจน์
อธิบายว่าพบนิพจน์ในตำแหน่งใดในไฟล์ และสิ่งที่ประเมินในระหว่างการใช้งาน
การแสดง JSON | |
---|---|
{ "sourcePosition": { object ( |
ช่อง | |
---|---|
sourcePosition |
ตำแหน่งของนิพจน์ในแหล่งที่มาของกฎเดิม |
values[] |
ค่าที่นิพจน์นี้ประเมินเมื่อพบ |
children[] |
นิพจน์ย่อย |
จำนวนค่า
Tuple สำหรับจำนวนครั้งที่มีการประเมินนิพจน์เป็น ExpressionValue หนึ่งๆ
การแสดง JSON | |
---|---|
{ "value": value, "count": integer } |
ช่อง | |
---|---|
value |
ค่าที่ส่งกลับมาจากนิพจน์ |
count |
จำนวนครั้งที่นิพจน์ดังกล่าวแสดงผล |