Method: projects.test

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

string

Wajib diisi. Untuk pengujian terhadap source, nama resource harus merujuk pada project: Format: projects/{project_id}

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

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

object (Source)

Source untuk diperiksa keakuratannya.

testSuite

object (TestSuite)

TestSuite inline yang akan dieksekusi terhadap Source.

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

Isi respons

Jika berhasil, isi respons memuat data dengan struktur berikut:

Respons untuk FirebaseRulesService.TestRuleset.

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

object (Issue)

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

testResults[]

object (TestResult)

Kumpulan hasil pengujian berdasarkan kasus pengujian di TestSuite. Hasilnya akan muncul dalam urutan yang sama dengan kasus pengujian yang muncul di TestSuite.

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

object (TestCase)

Kumpulan kasus pengujian yang terkait dengan TestSuite.

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

enum (Expectation)

Uji ekspektasi.

request

value (Value format)

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:

Kolom permintaan Jenis
{i>auth.uid<i} string
{i>auth.token<i} map<string, string>
headers map<string, string>
method string
params map<string, string>
jalur string
waktu google.protobuf.Timestamp

Jika nilai permintaan tidak dibentuk dengan baik untuk layanan, permintaan akan ditolak sebagai argumen yang tidak valid.

resource

value (Value format)

Nilai resource opsional seperti yang muncul dalam penyimpanan persisten sebelum permintaan terpenuhi.

Jenis resource bergantung pada nilai request.path.

functionMocks[]

object (FunctionMock)

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

enum (PathEncoding)

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

expressionReportLevel

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

string

Nama fungsi.

Nama fungsi harus cocok dengan nama 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 panggilan fungsi.

Arg

Pencocok Arg 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.
}
Kolom
Kolom union type. Nilai argumen yang didukung. type hanya ada berupa salah satu diantara berikut:
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 panggilan tiruan fungsi.

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.
}
Kolom
Kolom union type. Nilai hasil yang didukung. type hanya ada berupa salah satu diantara berikut:
value

value (Value format)

Hasilnya adalah nilai sebenarnya. Jenis nilai harus sesuai dengan jenis nilai yang dideklarasikan oleh layanan.

undefined

object

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

object (SourcePosition)

Posisi masalah di Source.

description

string

Deskripsi singkat error.

severity

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

string

Nama File.

line

integer

Nomor baris fragmen sumber. berbasis 1.

column

integer

Kolom pertama pada baris sumber yang terkait dengan fragmen sumber.

currentOffset

integer

Posisi awal relatif terhadap awal file.

endOffset

integer

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

enum (State)

Status pengujian.

debugMessages[]

string

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

errorPosition

object (SourcePosition)

Posisi dalam Source tempat terjadinya error runtime prinsip.

Evaluasi ekspresi dapat mengakibatkan error. Aturan ditolak secara default, sehingga ekspektasi DENY saat error dibuat valid. Jika ada DENY dengan error, SourcePosition akan ditampilkan.

Mis. errorPosition { line: 19 column: 37 }

functionCalls[]

object (FunctionCall)

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

visitedExpressions[]

object (VisitedExpression)

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.

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

Untuk laporan mendetail tentang status evaluasi perantara, lihat kolom expressionReports

expressionReports[]

object (ExpressionReport)

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

string

Nama fungsi yang dipanggil.

args[]

value (Value format)

Argumen yang diberikan ke fungsi.

Ekspresi yang Dikunjungi

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

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

object (SourcePosition)

Posisi dalam Source tempat ekspresi dikunjungi.

value

value (Value format)

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

object (SourcePosition)

Posisi ekspresi dalam sumber aturan asli.

values[]

object (ValueCount)

Nilai yang dievaluasi oleh ekspresi ini saat ditemukan.

children[]

object (ExpressionReport)

Subekspresi

JumlahNilai

Tuple untuk frekuensi Ekspresi dievaluasi ke ExpressionValue tertentu.

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

value (Value format)

Nilai ekspresi yang ditampilkan

count

integer

Berapa kali ekspresi tersebut ditampilkan.