- permintaan HTTP
- Parameter jalur
- Permintaan tubuh
- Badan respons
- Lingkup Otorisasi
- TestSuite
- Kasus cobaan
- Ekspektasi
- FungsiMock
- Arg
- Hasil
- Pengkodean Jalur
- Tingkat Laporan Ekspresi
- Masalah
- Posisi Sumber
- Kerasnya
- Hasil tes
- Negara
- Panggilan Fungsi
- Ekspresi yang Dikunjungi
- Laporan Ekspresi
- Jumlah Nilai
- Cobalah!
Source
Uji untuk kebenaran sintaksis dan semantik. Masalah yang ada, jika ada, akan dikembalikan ke pemanggil dengan deskripsi, tingkat keparahan, dan lokasi sumber.
Metode pengujian dapat dijalankan dengan Source
. Melewati Source
berguna untuk menguji unit aturan baru.
Perhatikan bahwa pengujian yang dijalankan menggunakan REST API menggunakan database produksi, bucket penyimpanan, dan sumber daya terkait. Pengujian tersebut dapat menimbulkan biaya penggunaan. Kami sangat menyarankan agar Anda menggunakan Firebase Local Emulator Suite untuk melakukan pengujian Aturan, karena Anda dapat menjalankan pengujian pada sumber daya non-produksi offline tanpa biaya penggunaan.
Berikut adalah contoh Source
yang mengizinkan pengguna mengunggah gambar ke keranjang yang memuat id pengguna mereka dan cocok dengan 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 Transcoding gRPC .
Parameter jalur
Parameter | |
---|---|
name | Diperlukan. Untuk pengujian terhadap |
Permintaan tubuh
Badan permintaan berisi data dengan struktur berikut:
Representasi JSON | |
---|---|
{ "source": { object ( |
Bidang | |
---|---|
source | |
testSuite | Ketika |
Badan respons
Jika berhasil, isi respons berisi data dengan struktur berikut:
Respons untuk FirebaseRulesService.TestRuleset
.
Representasi JSON | |
---|---|
{ "issues": [ { object ( |
Bidang | |
---|---|
issues[] | Masalah |
testResults[] | Kumpulan hasil pengujian yang diberikan pada kasus pengujian di |
Lingkup 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 informasi lebih lanjut, lihat Ikhtisar Otentikasi .
TestSuite
TestSuite
adalah kumpulan instance TestCase
yang memvalidasi kebenaran logika aturan. TestSuite
dapat direferensikan sebaris dalam pemanggilan projects.test
atau sebagai bagian dari objek Release
sebagai pemeriksaan pra-rilis.
Representasi JSON | |
---|---|
{
"testCases": [
{
object ( |
Bidang | |
---|---|
testCases[] | Kumpulan kasus uji yang terkait dengan |
Kasus cobaan
Pesan TestCase
memberikan konteks permintaan dan harapan apakah konteks tertentu 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 sumber daya target (misalnya, metadata objek GCS atau dokumen Firestore) yang muncul di penyimpanan persisten sebelum permintaan dijalankan.
Lihat juga dokumentasi referensi terkait untuk Cloud Firestore ( request , resource ) dan Cloud Storage untuk Firebase ( request , resource ).
Representasi JSON | |
---|---|
{ "expectation": enum ( |
Bidang | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | Uji ekspektasi. | ||||||||||||||||
request | Minta konteks. Format konteks permintaan yang sebenarnya bergantung pada layanan. Lihat dokumentasi layanan yang sesuai untuk informasi tentang bidang dan jenis yang didukung pada permintaan. Minimal, semua layanan mendukung bidang dan jenis berikut:
Jika nilai permintaan tidak dibuat dengan baik untuk layanan tersebut, permintaan akan ditolak karena argumen tidak valid. | ||||||||||||||||
resource | Nilai sumber daya opsional seperti yang muncul di penyimpanan persisten sebelum permintaan dipenuhi. Jenis sumber daya bergantung pada nilai | ||||||||||||||||
functionMocks[] | Fungsi Aturan Opsional mengolok-olok fungsi yang ditentukan layanan. Jika tidak disetel, fungsi Aturan apa pun yang ditentukan layanan diharapkan menghasilkan kesalahan, yang mungkin memengaruhi hasil pengujian atau tidak. | ||||||||||||||||
pathEncoding | Menentukan apakah jalur (seperti request.path) dikodekan dan bagaimana caranya. | ||||||||||||||||
expressionReportLevel | Menentukan apa yang harus disertakan dalam respons. |
Ekspektasi
Kumpulan ekspektasi kasus uji yang didukung.
Enum | |
---|---|
EXPECTATION_UNSPECIFIED | Harapan yang tidak ditentukan. |
ALLOW | Harapkan hasil yang diizinkan. |
DENY | Harapkan hasil yang ditolak. |
FungsiMock
Definisi fungsi Aturan Mock.
Mock harus mengacu pada fungsi yang dideklarasikan oleh layanan target. Jenis argumen fungsi dan hasilnya akan disimpulkan pada waktu pengujian. Jika nilai arg atau result tidak kompatibel dengan deklarasi tipe fungsi, permintaan akan dianggap tidak valid.
Lebih dari satu FunctionMock
dapat disediakan untuk nama fungsi tertentu selama pencocokan Arg
berbeda. Mungkin hanya ada satu fungsi untuk kelebihan beban tertentu yang semua nilai Arg
adalah Arg.any_value
.
Lihat juga Fungsi dalam bahasa Aturan Keamanan .
Representasi JSON | |
---|---|
{ "function": string, "args": [ { object ( |
Bidang | |
---|---|
function | Nama fungsinya. Nama fungsi harus cocok dengan yang diberikan oleh deklarasi layanan. |
args[] | Daftar nilai |
result | Hasil tiruan dari pemanggilan fungsi. |
Arg
Pencocokan argumen untuk fungsi tiruan.
Representasi JSON | |
---|---|
{ // Union field |
Bidang | ||
---|---|---|
type bidang gabungan. Nilai argumen yang didukung. type hanya dapat berupa salah satu dari berikut ini: | ||
exactValue | Argumen sama persis dengan nilai yang diberikan. | |
anyValue | Argumen cocok dengan nilai apa pun yang diberikan. |
Hasil
Nilai hasil yang mungkin dari pemanggilan fungsi tiruan.
Representasi JSON | |
---|---|
{ // Union field |
Bidang | ||
---|---|---|
type bidang gabungan. Nilai hasil yang didukung. type hanya dapat berupa salah satu dari berikut ini: | ||
value | Hasilnya adalah nilai sebenarnya. Tipe nilainya harus sesuai dengan tipe yang dideklarasikan oleh layanan. | |
undefined | Hasilnya tidak terdefinisi, artinya hasilnya tidak dapat dihitung. |
Pengkodean Jalur
Jenis pengkodean jalur yang digunakan.
Enum | |
---|---|
ENCODING_UNSPECIFIED | Tidak ada pengkodean yang ditentukan. Defaultnya adalah perilaku "URL_ENCODED". |
URL_ENCODED | Memperlakukan segmen jalur sebagai URL yang dikodekan tetapi dengan pemisah yang tidak dikodekan ("/"). Ini adalah perilaku default. |
PLAIN | Memperlakukan jalur total sebagai non-URL yang disandikan, misalnya mentah. |
Tingkat Laporan Ekspresi
Jumlah data yang akan disertakan dalam respons laporan ekspresi.
Enum | |
---|---|
LEVEL_UNSPECIFIED | Tidak ada level yang ditentukan. Defaultnya adalah perilaku "NONE". |
NONE | Jangan sertakan informasi tambahan apa pun. |
FULL | Sertakan pelaporan terperinci tentang ekspresi yang dievaluasi. |
VISITED | Hanya sertakan ekspresi yang dikunjungi selama evaluasi. |
Masalah
Masalah mencakup peringatan, kesalahan, dan pemberitahuan penghentian.
Representasi JSON | |
---|---|
{ "sourcePosition": { object ( |
Bidang | |
---|---|
sourcePosition | Posisi masalah di |
description | Deskripsi kesalahan singkat. |
severity | Tingkat keparahan masalahnya. |
Posisi Sumber
Posisi dalam konten Source
termasuk barisnya, nomor kolom, dan indeks File
dalam pesan Source
. Digunakan untuk tujuan debug.
Representasi JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Bidang | |
---|---|
fileName | Nama |
line | Nomor baris dari fragmen sumber. berbasis 1. |
column | Kolom pertama pada baris sumber terkait dengan fragmen sumber. |
currentOffset | Posisi awal relatif terhadap awal file. |
endOffset | Posisi akhir relatif terhadap awal file. |
Kerasnya
Kumpulan tingkat keparahan masalah.
Enum | |
---|---|
SEVERITY_UNSPECIFIED | Tingkat keparahan yang tidak ditentukan. |
DEPRECATION | Masalah penghentian pernyataan dan metode yang mungkin tidak lagi didukung atau dipelihara. |
WARNING | Peringatan seperti: variabel yang tidak digunakan. |
ERROR | Kesalahan seperti: kurung kurawal yang tidak cocok atau redefinisi variabel. |
Hasil tes
Pesan hasil pengujian yang berisi status pengujian serta deskripsi dan posisi sumber kegagalan pengujian.
Representasi JSON | |
---|---|
{ "state": enum ( |
Bidang | |
---|---|
state | Keadaan tes. |
debugMessages[] | Pesan debug terkait masalah eksekusi pengujian yang ditemui selama evaluasi. Pesan debug mungkin terkait dengan terlalu banyak atau terlalu sedikit pemanggilan fungsi tiruan atau kesalahan runtime yang terjadi selama evaluasi. Misalnya: |
errorPosition | Posisikan di Evaluasi ekspresi dapat mengakibatkan kesalahan. Aturan ditolak secara default, sehingga ekspektasi Misalnya |
functionCalls[] | Kumpulan panggilan fungsi yang dilakukan ke metode yang ditentukan layanan. Pemanggilan fungsi disertakan sesuai urutan kemunculannya selama evaluasi, disediakan untuk fungsi yang diolok-olok dan tidak diolok-olok, dan disertakan pada respons apa pun |
visitedExpressions[] | Kumpulan ekspresi izin yang dikunjungi untuk pengujian tertentu. Ini mengembalikan posisi dan hasil evaluasi dari semua ekspresi izin yang dikunjungi yang relevan dengan kasus uji, misalnya
Untuk laporan mendetail tentang status evaluasi perantara, lihat bidang |
expressionReports[] | Pemetaan dari ekspresi dalam kumpulan aturan AST ke nilai yang dievaluasi. Bersarang sebagian untuk mencerminkan struktur AST. Perhatikan bahwa bidang ini sebenarnya melacak ekspresi dan bukan pernyataan izin, berbeda dengan bidang "visitedExpressions" di atas. Ekspresi literal dihilangkan. |
Negara
Status valid untuk hasil tes.
Enum | |
---|---|
STATE_UNSPECIFIED | Status pengujian tidak disetel. |
SUCCESS | Tesnya sukses. |
FAILURE | Tes adalah sebuah kegagalan. |
Panggilan Fungsi
Mewakili panggilan fungsi yang ditentukan layanan yang dipanggil selama eksekusi pengujian.
Representasi JSON | |
---|---|
{ "function": string, "args": [ value ] } |
Bidang | |
---|---|
function | Nama fungsi yang dipanggil. |
args[] | Argumen yang diberikan ke fungsi tersebut. |
Ekspresi yang Dikunjungi
Simpan posisi dan hasil akses untuk ekspresi yang dikunjungi dalam aturan.
Representasi JSON | |
---|---|
{
"sourcePosition": {
object ( |
Bidang | |
---|---|
sourcePosition | Posisi di |
value | Nilai yang dievaluasi untuk ekspresi yang dikunjungi, misalnya benar/salah |
Laporan Ekspresi
Menjelaskan di mana ekspresi ditemukan dalam file dan apa yang dievaluasi selama penggunaannya.
Representasi JSON | |
---|---|
{ "sourcePosition": { object ( |
Bidang | |
---|---|
sourcePosition | Posisi ekspresi dalam sumber aturan asli. |
values[] | Nilai yang dievaluasi oleh ekspresi ini saat ditemui. |
children[] | Subekspresi |
Jumlah Nilai
Tuple untuk berapa kali Ekspresi dievaluasi ke ExpressionValue tertentu.
Representasi JSON | |
---|---|
{ "value": value, "count": integer } |
Bidang | |
---|---|
value | Nilai kembalian dari ekspresi |
count | Berapa kali ekspresi itu kembali. |