Method: projects.test

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

string

Diperlukan. Untuk pengujian terhadap source , nama sumber daya harus mengacu pada proyek: Format: projects/{project_id}

Permintaan tubuh

Badan permintaan berisi data dengan struktur berikut:

Representasi JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Bidang
source

object ( Source )

Source harus diperiksa kebenarannya.

testSuite

object ( TestSuite )

TestSuite sebaris untuk dijalankan terhadap Source .

Ketika Source disediakan secara inline, kasus pengujian hanya akan dijalankan jika Source valid secara sintaksis dan semantik.

Badan respons

Jika berhasil, isi respons berisi data dengan struktur berikut:

Respons untuk FirebaseRulesService.TestRuleset .

Representasi JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Bidang
issues[]

object ( Issue )

Masalah Source sintaksis dan semantik dengan tingkat keparahan yang berbeda-beda. Masalah tingkat keparahan ERROR akan menghalangi pelaksanaan pengujian.

testResults[]

object ( TestResult )

Kumpulan hasil pengujian yang diberikan pada kasus pengujian di TestSuite . Hasilnya akan muncul dalam urutan yang sama dengan kasus uji yang muncul di TestSuite .

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 (TestCase)
    }
  ]
}
Bidang
testCases[]

object ( TestCase )

Kumpulan kasus uji yang terkait dengan TestSuite .

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 (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Bidang
expectation

enum ( Expectation )

Uji ekspektasi.

request

value ( Value format)

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:

Bidang permintaan Jenis
auth.uid string
auth.token map<string, string>
header map<string, string>
metode string
param map<string, string>
jalur string
waktu google.protobuf.Timestamp

Jika nilai permintaan tidak dibuat dengan baik untuk layanan tersebut, permintaan akan ditolak karena argumen tidak valid.

resource

value ( Value format)

Nilai sumber daya opsional seperti yang muncul di penyimpanan persisten sebelum permintaan dipenuhi.

Jenis sumber daya bergantung pada nilai request.path .

functionMocks[]

object ( FunctionMock )

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

enum ( PathEncoding )

Menentukan apakah jalur (seperti request.path) dikodekan dan bagaimana caranya.

expressionReportLevel

enum ( 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 (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Bidang
function

string

Nama fungsinya.

Nama fungsi harus cocok dengan yang diberikan oleh deklarasi layanan.

args[]

object ( Arg )

Daftar nilai Arg yang akan dicocokkan. Urutan argumen yang diberikan adalah urutan kemunculannya dalam pemanggilan fungsi.

result

object ( Result )

Hasil tiruan dari pemanggilan fungsi.

Arg

Pencocokan argumen untuk fungsi tiruan.

Representasi 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.
}
Bidang
type bidang gabungan. Nilai argumen yang didukung. type hanya dapat berupa salah satu dari berikut ini:
exactValue

value ( Value format)

Argumen sama persis dengan nilai yang diberikan.

anyValue

object

Argumen cocok dengan nilai apa pun yang diberikan.

Hasil

Nilai hasil yang mungkin dari pemanggilan fungsi tiruan.

Representasi 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.
}
Bidang
type bidang gabungan. Nilai hasil yang didukung. type hanya dapat berupa salah satu dari berikut ini:
value

value ( Value format)

Hasilnya adalah nilai sebenarnya. Tipe nilainya harus sesuai dengan tipe yang dideklarasikan oleh layanan.

undefined

object

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 (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Bidang
sourcePosition

object ( SourcePosition )

Posisi masalah di Source .

description

string

Deskripsi kesalahan singkat.

severity

enum ( 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

string

Nama File .

line

integer

Nomor baris dari fragmen sumber. berbasis 1.

column

integer

Kolom pertama pada baris sumber terkait dengan fragmen sumber.

currentOffset

integer

Posisi awal relatif terhadap awal file.

endOffset

integer

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 (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Bidang
state

enum ( State )

Keadaan tes.

debugMessages[]

string

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: Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

Posisikan di Source tempat terjadinya kesalahan runtime prinsip.

Evaluasi ekspresi dapat mengakibatkan kesalahan. Aturan ditolak secara default, sehingga ekspektasi DENY ketika terjadi kesalahan adalah valid. Ketika ada DENY dengan kesalahan, SourcePosition dikembalikan.

Misalnya errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

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 state pengujiannya.

visitedExpressions[]

object ( VisitedExpression )

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

match /path {
  allow read if: <expr>
}

Untuk laporan mendetail tentang status evaluasi perantara, lihat bidang expressionReports

expressionReports[]

object ( ExpressionReport )

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

string

Nama fungsi yang dipanggil.

args[]

value ( Value format)

Argumen yang diberikan ke fungsi tersebut.

Ekspresi yang Dikunjungi

Simpan posisi dan hasil akses untuk ekspresi yang dikunjungi dalam aturan.

Representasi JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Bidang
sourcePosition

object ( SourcePosition )

Posisi di Source tempat ekspresi dikunjungi.

value

value ( Value format)

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 (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Bidang
sourcePosition

object ( SourcePosition )

Posisi ekspresi dalam sumber aturan asli.

values[]

object ( ValueCount )

Nilai yang dievaluasi oleh ekspresi ini saat ditemui.

children[]

object ( ExpressionReport )

Subekspresi

Jumlah Nilai

Tuple untuk berapa kali Ekspresi dievaluasi ke ExpressionValue tertentu.

Representasi JSON
{
  "value": value,
  "count": integer
}
Bidang
value

value ( Value format)

Nilai kembalian dari ekspresi

count

integer

Berapa kali ekspresi itu kembali.