- Permintaan HTTP
- Parameter lokasi
- Isi permintaan
- Isi respons
- Cakupan Otorisasi
- TestSuite
- Kasus Pengujian
- Ekspektasi
- FunctionMock
- Arg
- Result
- PathEncoding
- EkspresiLaporanLevel
- Masalah
- SourcePosition
- Keparahan
- TestResult
- Status
- PanggilanFungsi
- VisitExpression
- EkspresiLaporan
- JumlahNilai
- Cobalah!
Uji Source
untuk mengetahui ketepatan sintaksis dan semantik. Masalah yang ada, jika ada, akan dikembalikan ke penelepon dengan deskripsi, tingkat keparahan, dan lokasi sumber.
Metode pengujian dapat dijalankan dengan Source
. Meneruskan Source
berguna untuk menguji unit aturan baru.
Perhatikan bahwa pengujian yang dijalankan menggunakan REST API menggunakan database produksi, bucket penyimpanan, dan resource terkait. Pengujian tersebut dapat dikenai biaya penggunaan. Sebaiknya gunakan Firebase Local Emulator Suite untuk melakukan pengujian Aturan, karena Anda dapat menjalankan pengujian pada resource non-produksi offline tanpa biaya penggunaan.
Berikut adalah contoh Source
yang mengizinkan pengguna mengupload gambar ke bucket yang berisi ID penggunanya dan mencocokkan metadata yang benar:
Contoh
// 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/')
}
}
Permintaan HTTP
POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test
URL menggunakan sintaks gRPC Transcoding.
Parameter jalur
Parameter | |
---|---|
name |
Wajib diisi. Untuk pengujian terhadap |
Isi permintaan
Isi permintaan memuat data dengan struktur berikut:
Representasi JSON | |
---|---|
{ "source": { object ( |
Kolom | |
---|---|
source |
|
testSuite |
Jika |
Isi respons
Jika berhasil, isi respons memuat data dengan struktur berikut:
Respons untuk FirebaseRulesService.TestRuleset
.
Representasi JSON | |
---|---|
{ "issues": [ { object ( |
Kolom | |
---|---|
issues[] |
Masalah |
testResults[] |
Kumpulan hasil pengujian berdasarkan kasus pengujian di |
Cakupan Otorisasi
Memerlukan salah satu cakupan OAuth berikut:
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/firebase
https://www.googleapis.com/auth/firebase.readonly
Untuk mengetahui informasi selengkapnya, lihat Ringkasan Autentikasi.
{i>TestSuite<i}
TestSuite
adalah kumpulan instance TestCase
yang memvalidasi kebenaran logika aturan. TestSuite
dapat direferensikan secara inline dalam pemanggilan projects.test
atau sebagai bagian dari objek Release
sebagai pemeriksaan pra-rilis.
Representasi JSON | |
---|---|
{
"testCases": [
{
object ( |
Kolom | |
---|---|
testCases[] |
Kumpulan kasus pengujian yang terkait dengan |
KasusPengujian
Pesan TestCase
memberikan konteks permintaan dan ekspektasi apakah konteks yang diberikan akan diizinkan atau ditolak. Kasus pengujian dapat menentukan request
, resosurce
, dan functionMocks
untuk meniru panggilan fungsi ke fungsi yang disediakan layanan.
Objek request
mewakili konteks yang ada pada waktu permintaan.
resource
adalah nilai resource target (misalnya, metadata objek GCS atau dokumen Firestore) seperti yang muncul dalam penyimpanan persisten sebelum permintaan dieksekusi.
Lihat juga dokumentasi referensi terkait untuk Cloud Firestore ( permintaan, resource) dan Cloud Storage for Firebase (permintaan, resource).
Representasi JSON | |
---|---|
{ "expectation": enum ( |
Kolom | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
Uji ekspektasi. |
||||||||||||||||
request |
Konteks permintaan. Format yang tepat dari konteks permintaan bergantung pada layanan. Lihat dokumentasi layanan yang sesuai untuk mendapatkan informasi tentang kolom dan jenis yang didukung pada permintaan. Setidaknya, semua layanan mendukung kolom dan jenis berikut:
Jika nilai permintaan tidak dibentuk dengan baik untuk layanan, permintaan akan ditolak sebagai argumen yang tidak valid. |
||||||||||||||||
resource |
Nilai resource opsional seperti yang muncul dalam penyimpanan persisten sebelum permintaan terpenuhi. Jenis resource bergantung pada nilai |
||||||||||||||||
functionMocks[] |
Fungsi Aturan Opsional meniru fungsi untuk fungsi yang ditentukan layanan. Jika tidak ditetapkan, fungsi Aturan yang ditetapkan layanan apa pun diharapkan akan menghasilkan error, yang mungkin akan memengaruhi hasil pengujian, mungkin juga tidak. |
||||||||||||||||
pathEncoding |
Menentukan apakah jalur (seperti request.path) dienkode dan bagaimana caranya. |
||||||||||||||||
expressionReportLevel |
Menentukan apa yang harus disertakan dalam respons. |
Ekspektasi
Kumpulan ekspektasi kasus pengujian yang didukung.
Enum | |
---|---|
EXPECTATION_UNSPECIFIED |
Ekspektasi tidak ditentukan. |
ALLOW |
Mengharapkan hasil yang diizinkan. |
DENY |
Mengharapkan hasil yang ditolak. |
Simulasi Fungsi
Definisi fungsi Aturan Tiruan.
Simulasi harus mengacu pada fungsi yang dideklarasikan oleh layanan target. Jenis argumen dan hasil fungsi akan disimpulkan pada waktu pengujian. Jika nilai arg atau hasil tidak kompatibel dengan deklarasi jenis fungsi, permintaan akan dianggap tidak valid.
Lebih dari satu FunctionMock
dapat disediakan untuk nama fungsi tertentu asalkan matcher Arg
berbeda. Mungkin hanya ada satu fungsi untuk overload tertentu yang semua nilai Arg
-nya adalah Arg.any_value
.
Lihat juga Fungsi dalam bahasa Aturan Keamanan.
Representasi JSON | |
---|---|
{ "function": string, "args": [ { object ( |
Kolom | |
---|---|
function |
Nama fungsi. Nama fungsi harus cocok dengan nama yang diberikan oleh deklarasi layanan. |
args[] |
Daftar nilai |
result |
Hasil tiruan panggilan fungsi. |
Arg
Pencocok Arg untuk fungsi tiruan.
Representasi JSON | |
---|---|
{ // Union field |
Kolom | ||
---|---|---|
Kolom union type . Nilai argumen yang didukung. type hanya ada berupa salah satu diantara berikut: |
||
exactValue |
Argumen sama persis dengan nilai yang diberikan. |
|
anyValue |
Argumen cocok dengan nilai apa pun yang diberikan. |
Hasil
Nilai hasil yang mungkin dari panggilan tiruan fungsi.
Representasi JSON | |
---|---|
{ // Union field |
Kolom | ||
---|---|---|
Kolom union type . Nilai hasil yang didukung. type hanya ada berupa salah satu diantara berikut: |
||
value |
Hasilnya adalah nilai sebenarnya. Jenis nilai harus sesuai dengan jenis nilai yang dideklarasikan oleh layanan. |
|
undefined |
Hasilnya tidak ditentukan, artinya hasil tidak dapat dihitung. |
PathEncoding
Jenis encoding jalur yang digunakan.
Enum | |
---|---|
ENCODING_UNSPECIFIED |
Tidak ada encoding yang ditentukan. Default-nya adalah "URL_ENCODED" perilaku model. |
URL_ENCODED |
Memperlakukan segmen jalur sebagai URL yang dienkode tetapi dengan pemisah yang tidak dienkode ("/"). Ini merupakan perilaku default. |
PLAIN |
Memperlakukan total jalur sebagai non-URL yang dienkode, mis. mentah. |
ExpressionReportLevel
Jumlah data yang akan disertakan dalam respons laporan ekspresi.
Enum | |
---|---|
LEVEL_UNSPECIFIED |
Tidak ada level yang ditentukan. Default-nya adalah "NONE" perilaku model. |
NONE |
Jangan sertakan informasi tambahan apa pun. |
FULL |
Menyertakan pelaporan mendetail tentang ekspresi yang dievaluasi. |
VISITED |
Hanya sertakan ekspresi yang dikunjungi selama evaluasi. |
Masalah
Masalah mencakup peringatan, error, dan pemberitahuan penghentian penggunaan.
Representasi JSON | |
---|---|
{ "sourcePosition": { object ( |
Kolom | |
---|---|
sourcePosition |
Posisi masalah di |
description |
Deskripsi singkat error. |
severity |
Tingkat keparahan masalah. |
PosisiSumber
Posisi dalam konten Source
termasuk baris, nomor kolom, dan indeks File
di pesan Source
. Digunakan untuk tujuan debug.
Representasi JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Kolom | |
---|---|
fileName |
Nama |
line |
Nomor baris fragmen sumber. berbasis 1. |
column |
Kolom pertama pada baris sumber yang terkait dengan fragmen sumber. |
currentOffset |
Posisi awal relatif terhadap awal file. |
endOffset |
Posisi akhir relatif terhadap awal file. |
Keparahan
Serangkaian tingkat keparahan masalah.
Enum | |
---|---|
SEVERITY_UNSPECIFIED |
Tingkat keparahan yang tidak ditentukan. |
DEPRECATION |
Masalah penghentian penggunaan untuk pernyataan dan metode yang mungkin tidak lagi didukung atau dikelola. |
WARNING |
Peringatan seperti: variabel yang tidak digunakan. |
ERROR |
Error seperti: tanda kurung kurawal yang tidak cocok atau definisi ulang variabel. |
HasilPengujian
Pesan hasil pengujian yang berisi status pengujian serta deskripsi dan posisi sumber untuk kegagalan pengujian.
Representasi JSON | |
---|---|
{ "state": enum ( |
Kolom | |
---|---|
state |
Status pengujian. |
debugMessages[] |
Pesan debug yang terkait dengan masalah eksekusi uji yang ditemukan selama evaluasi. Pesan debug mungkin terkait dengan terlalu banyak atau terlalu sedikit pemanggilan tiruan fungsi atau dengan error runtime yang terjadi selama evaluasi. Contoh: |
errorPosition |
Posisi dalam Evaluasi ekspresi dapat mengakibatkan error. Aturan ditolak secara default, sehingga ekspektasi Mis. |
functionCalls[] |
Serangkaian panggilan fungsi yang dilakukan ke metode yang ditentukan layanan. Panggilan fungsi disertakan dalam urutan kemunculannya selama evaluasi, disediakan untuk fungsi tiruan dan tidak tiruan, dan disertakan pada respons terlepas dari pengujian |
visitedExpressions[] |
Kumpulan ekspresi izin yang dikunjungi untuk pengujian tertentu. Tindakan ini akan menampilkan posisi dan hasil evaluasi dari semua ekspresi izin yang dikunjungi yang relevan dengan kasus pengujian, mis.
Untuk laporan mendetail tentang status evaluasi perantara, lihat kolom |
expressionReports[] |
Pemetaan dari ekspresi dalam AST kumpulan aturan ke nilai yang dievaluasi. Bertingkat sebagian untuk mencerminkan struktur AST. Perhatikan bahwa kolom ini sebenarnya melacak ekspresi dan bukan pernyataan izin yang berbeda dengan "visitedExpressions" yang sama di atas. Ekspresi literal dihilangkan. |
Negara Bagian
Status yang valid untuk hasil pengujian.
Enum | |
---|---|
STATE_UNSPECIFIED |
Status pengujian belum ditetapkan. |
SUCCESS |
Pengujian berhasil. |
FAILURE |
Pengujian gagal. |
PanggilanFungsi
Mewakili panggilan fungsi yang ditentukan layanan yang dipanggil selama eksekusi uji.
Representasi JSON | |
---|---|
{ "function": string, "args": [ value ] } |
Kolom | |
---|---|
function |
Nama fungsi yang dipanggil. |
args[] |
Argumen yang diberikan ke fungsi. |
Ekspresi yang Dikunjungi
Menyimpan hasil posisi dan akses untuk ekspresi yang dikunjungi dalam aturan.
Representasi JSON | |
---|---|
{
"sourcePosition": {
object ( |
Kolom | |
---|---|
sourcePosition |
Posisi dalam |
value |
Nilai yang dievaluasi untuk ekspresi yang dikunjungi, mis. benar/salah |
Laporan Ekspresi
Menjelaskan di mana ekspresi ditemukan dalam file dan pada apa ekspresi tersebut dievaluasi selama penggunaannya.
Representasi JSON | |
---|---|
{ "sourcePosition": { object ( |
Kolom | |
---|---|
sourcePosition |
Posisi ekspresi dalam sumber aturan asli. |
values[] |
Nilai yang dievaluasi oleh ekspresi ini saat ditemukan. |
children[] |
Subekspresi |
JumlahNilai
Tuple untuk frekuensi Ekspresi dievaluasi ke ExpressionValue tertentu.
Representasi JSON | |
---|---|
{ "value": value, "count": integer } |
Kolom | |
---|---|
value |
Nilai ekspresi yang ditampilkan |
count |
Berapa kali ekspresi tersebut ditampilkan. |