Method: projects.test

ทดสอบ 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

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

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

ออบเจ็กต์ request แสดงบริบทที่มีอยู่ ณ เวลาที่ส่งคำขอ

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

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

การแสดง 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.token map<string, string>
ส่วนหัว map<string, string>
method 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)

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

ความคาดหวัง

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

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

การจำลองฟังก์ชัน

คำจำกัดความของฟังก์ชันกฎจำลอง

การจำลองต้องอ้างอิงฟังก์ชันที่บริการเป้าหมายประกาศ ระบบจะอนุมานประเภทของฟังก์ชันอาร์กิวเมนต์และผลลัพธ์ ณ เวลาทดสอบ หากค่าอาร์กิวเมนต์หรือค่าผลลัพธ์เข้ากันไม่ได้กับการประกาศประเภทฟังก์ชัน คำขอจะถือว่าไม่ถูกต้อง

ชื่อฟังก์ชันอาจระบุ FunctionMock มากกว่า 1 รายการได้ตราบใดที่ตัวจับคู่ 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

ผลลัพธ์ไม่ได้ระบุ ทำให้ไม่สามารถคำนวณผลลัพธ์ได้

PathEncoding

ประเภทของการเข้ารหัสเส้นทางที่ใช้

Enum
ENCODING_UNSPECIFIED ไม่ได้ระบุการเข้ารหัส ค่าเริ่มต้นคือ "URL_ENCODED" พฤติกรรมของคุณ
URL_ENCODED ถือว่ากลุ่มเส้นทางเป็น URL ที่เข้ารหัสแต่มีตัวคั่นที่ไม่เข้ารหัส ("/") นี่คือลักษณะการทำงานเริ่มต้น
PLAIN ถือว่าเส้นทางทั้งหมดเป็นเส้นทางที่ไม่ได้เข้ารหัส URL เช่น ไฟล์ข้อมูล RAW

ระดับรายงานนิพจน์

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

Enum
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 ฐาน

column

integer

คอลัมน์แรกในบรรทัดแหล่งที่มาที่เชื่อมโยงกับส่วนย่อยของแหล่งที่มา

currentOffset

integer

ตำแหน่งเริ่มต้นโดยสัมพันธ์กับส่วนต้นของไฟล์

endOffset

integer

ตำแหน่งสิ้นสุดที่สัมพันธ์กับจุดเริ่มต้นของไฟล์

ความรุนแรง

ชุดความรุนแรงของปัญหา

Enum
SEVERITY_UNSPECIFIED ความรุนแรงที่ไม่ได้ระบุ
DEPRECATION ปัญหาการเลิกใช้งานข้อความและวิธีการที่อาจไม่ได้รับการสนับสนุนหรือรักษาไว้อีกต่อไป
WARNING คำเตือน เช่น ตัวแปรที่ไม่ได้ใช้
ERROR ข้อผิดพลาดต่างๆ เช่น วงเล็บปีกกาไม่ตรงกันหรือการกำหนดตัวแปรใหม่

TestResult

ข้อความผลการทดสอบที่มีสถานะการทดสอบ รวมถึงคำอธิบายและตำแหน่งต้นทางสำหรับความล้มเหลวในการทดสอบ

การแสดง 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" ด้านบน ไม่แสดงนิพจน์ตรงตัว

รัฐ

สถานะที่ถูกต้องสำหรับผลการทดสอบ

Enum
STATE_UNSPECIFIED ยังไม่ได้ตั้งสถานะทดสอบ
SUCCESS การทดสอบประสบความสำเร็จ
FAILURE การทดสอบล้มเหลว

การเรียกใช้ฟังก์ชัน

แสดงการเรียกใช้ฟังก์ชันที่บริการกำหนดที่เรียกใช้ระหว่างการดำเนินการทดสอบ

การแสดง JSON
{
  "function": string,
  "args": [
    value
  ]
}
ช่อง
function

string

ชื่อของฟังก์ชันที่เรียกใช้

args[]

value (Value format)

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

นิพจน์ที่เยี่ยมชมแล้ว

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

การแสดง 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 สำหรับจำนวนครั้งที่มีการประเมินนิพจน์เป็น ExpressionValue หนึ่งๆ

การแสดง JSON
{
  "value": value,
  "count": integer
}
ช่อง
value

value (Value format)

ค่าที่ส่งกลับมาจากนิพจน์

count

integer

จำนวนครั้งที่นิพจน์ดังกล่าวแสดงผล