Method: projects.test

Sözdizimsel ve anlamsal doğruluk için Test Source . Varsa, mevcut sorunlar arayan kişiye bir açıklama, önem derecesi ve kaynak konumuyla birlikte iade edilecektir.

Test yöntemi Source ile yürütülebilir. Source Geçirme, yeni kuralların birim testi için kullanışlıdır.

REST API kullanılarak çalıştırılan testlerin üretim veritabanlarını, depolama paketlerini ve ilgili kaynak kaynaklarını kullandığını unutmayın. Bu tür testler kullanım ücretlerine neden olabilir. Kullanım ücreti ödemeden çevrimdışı, üretim dışı kaynaklar üzerinde testler çalıştırabileceğiniz için, Kural testi gerçekleştirmek için Firebase Local Emulator Suite'i kullanmanızı önemle tavsiye ederiz.

Aşağıda kullanıcıların, kullanıcı kimliklerini taşıyan ve doğru meta verilerle eşleşen bir pakete resim yüklemelerine izin veren bir Source örneği verilmiştir:

Örnek

// 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 isteği

POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test

URL, gRPC Kod Dönüştürme sözdizimini kullanır.

Yol parametreleri

Parametreler
name

string

Gerekli. source yönelik testler için kaynak adı projeye atıfta bulunmalıdır: Format: projects/{project_id}

Talep gövdesi

İstek gövdesi aşağıdaki yapıya sahip verileri içerir:

JSON gösterimi
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Alanlar
source

object ( Source )

Source doğruluğu kontrol edilecek.

testSuite

object ( TestSuite )

Source karşı yürütülecek satır içi TestSuite .

Source satır içi olarak sağlandığında, test senaryoları yalnızca Source sözdizimsel ve anlamsal olarak geçerliyse çalıştırılacaktır.

Yanıt gövdesi

Başarılı olursa yanıt gövdesi aşağıdaki yapıya sahip verileri içerir:

FirebaseRulesService.TestRuleset yanıtı.

JSON gösterimi
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Alanlar
issues[]

object ( Issue )

Değişen önem derecesine sahip sözdizimsel ve anlamsal Source sorunları. ERROR önem derecesine sahip sorunlar testlerin yürütülmesini engelleyecektir.

testResults[]

object ( TestResult )

TestSuite test senaryolarına verilen test sonuçları kümesi. Sonuçlar, TestSuite görünen test senaryolarıyla aynı sırada görünecektir.

Yetki Kapsamları

Aşağıdaki OAuth kapsamlarından birini gerektirir:

  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/firebase
  • https://www.googleapis.com/auth/firebase.readonly

Daha fazla bilgi için Kimlik Doğrulamaya Genel Bakış bölümüne bakın.

Test odası

TestSuite kuralların mantıksal doğruluğunu doğrulayan bir TestCase örnekleri koleksiyonudur. TestSuite , bir projects.test çağrısında satır içi olarak veya yayın öncesi kontrol olarak bir Release nesnesinin parçası olarak başvurulabilir.

JSON gösterimi
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Alanlar
testCases[]

object ( TestCase )

TestSuite ile ilişkili test senaryolarının toplanması.

Test durumu

TestCase mesajları, istek bağlamını ve verilen bağlama izin verilip verilmeyeceğine veya reddedileceğine ilişkin beklentiyi sağlar. Test durumları, hizmet tarafından sağlanan bir işleve yapılan bir işlev çağrısını taklit etmek için request , resosurce ve functionMocks belirtebilir.

request nesnesi, istek anında mevcut olan bağlamı temsil eder.

resource , istek yürütülmeden önce kalıcı depolamada görünen hedef kaynağın değeridir (örneğin, bir GCS nesnesinin veya Firestore belgesinin meta verileri).

Ayrıca Cloud Firestore ( istek , kaynak ) ve Cloud Storage for Firebase ( istek , kaynak ) için ilgili referans belgelerine de bakın.

JSON gösterimi
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Alanlar
expectation

enum ( Expectation )

Beklenti testi.

request

value ( Value format)

Bağlam isteyin.

İstek bağlamının tam biçimi hizmete bağlıdır. İstekte desteklenen alanlar ve türler hakkında bilgi için uygun hizmet belgelerine bakın. Tüm hizmetler minimum olarak aşağıdaki alanları ve türleri destekler:

Talep alanı Tip
yetki.uid string
kimlik doğrulama belirteci map<string, string>
başlıklar map<string, string>
yöntem string
parametreler map<string, string>
yol string
zaman google.protobuf.Timestamp

İstek değeri hizmet için iyi biçimlendirilmemişse istek geçersiz bir bağımsız değişken olarak reddedilecektir.

resource

value ( Value format)

İstek karşılanmadan önce kalıcı depolamada görünen isteğe bağlı kaynak değeri.

Kaynak türü request.path değerine bağlıdır.

functionMocks[]

object ( FunctionMock )

Hizmet tanımlı işlevler için İsteğe Bağlı Kurallar işlevi taklitleri. Ayarlanmazsa, herhangi bir hizmet tanımlı Kural işlevinin, test sonucunu etkileyebilecek veya etkilemeyebilecek bir hata döndürmesi beklenir.

pathEncoding

enum ( PathEncoding )

Yolların (request.path gibi) kodlanıp kodlanmadığını ve nasıl kodlandığını belirtir.

expressionReportLevel

enum ( ExpressionReportLevel )

Yanıta nelerin dahil edilmesi gerektiğini belirtir.

Beklenti

Desteklenen test senaryosu beklentileri kümesi.

Numaralandırmalar
EXPECTATION_UNSPECIFIED Belirtilmemiş beklenti.
ALLOW İzin verilen bir sonuç bekleyin.
DENY Reddedilen bir sonuç bekleyin.

İşlevMock

Sahte Kurallar işlev tanımı.

Mocks, hedef hizmet tarafından bildirilen bir işleve atıfta bulunmalıdır. Args fonksiyonunun türü ve sonucu test zamanında çıkarılacaktır. Bağımsız değişken veya sonuç değerlerinden biri işlev türü bildirimiyle uyumlu değilse istek geçersiz sayılacaktır.

Arg eşleştiricileri farklı olduğu sürece belirli bir işlev adı için birden fazla FunctionMock sağlanabilir. Tüm Arg değerlerinin Arg.any_value olduğu belirli bir aşırı yük için yalnızca bir işlev olabilir.

Ayrıca bkz. Güvenlik Kuralları dilindeki İşlevler .

JSON gösterimi
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Alanlar
function

string

Fonksiyonun adı.

İşlev adı, hizmet bildirimi tarafından sağlanan adla eşleşmelidir.

args[]

object ( Arg )

Eşleşecek Arg değerlerinin listesi. Bağımsız değişkenlerin sağlanma sırası, işlev çağrısında görünmeleri gereken sıradır.

result

object ( Result )

İşlev çağrısının sahte sonucu.

Argüman

Sahte işlev için bağımsız değişken eşleştiriciler.

JSON gösterimi
{

  // Union field type can be only one of the following:
  "exactValue": value,
  "anyValue": {
    object
  }
  // End of list of possible types for union field type.
}
Alanlar
Birleşim alanı type . Desteklenen bağımsız değişken değerleri. type aşağıdakilerden yalnızca biri olabilir:
exactValue

value ( Value format)

Bağımsız değişken sağlanan değerle tam olarak eşleşiyor.

anyValue

object

Bağımsız değişken sağlanan herhangi bir değerle eşleşir.

Sonuç

İşlev sahte çağrısının olası sonuç değerleri.

JSON gösterimi
{

  // Union field type can be only one of the following:
  "value": value,
  "undefined": {
    object
  }
  // End of list of possible types for union field type.
}
Alanlar
Birleşim alanı type . Desteklenen sonuç değerleri. type aşağıdakilerden yalnızca biri olabilir:
value

value ( Value format)

Sonuç gerçek bir değerdir. Değerin türü, hizmet tarafından bildirilen türle eşleşmelidir.

undefined

object

Sonuç tanımsız, yani sonuç hesaplanamıyor.

Yol Kodlaması

Kullanılan yol kodlamasının türü.

Numaralandırmalar
ENCODING_UNSPECIFIED Hiçbir kodlama belirtilmedi. Varsayılan olarak "URL_ENCODED" davranışı kullanılır.
URL_ENCODED Yol bölümlerini URL kodlu olarak ancak kodlanmamış ayırıcılarla ("/") ele alır. Bu varsayılan davranıştır.
PLAIN Toplam yolu URL'siz kodlanmış, örneğin ham olarak ele alır.

İfadeRapor Düzeyi

İfade raporu yanıtına dahil edilecek veri miktarı.

Numaralandırmalar
LEVEL_UNSPECIFIED Herhangi bir seviye belirtilmedi. Varsayılan olarak "YOK" davranışına ayarlanır.
NONE Herhangi bir ek bilgi eklemeyin.
FULL Değerlendirilen ifadelere ilişkin ayrıntılı raporlamayı ekleyin.
VISITED Yalnızca değerlendirme sırasında ziyaret edilen ifadeleri dahil edin.

Sorun

Sorunlar arasında uyarılar, hatalar ve kullanımdan kaldırma bildirimleri yer alır.

JSON gösterimi
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Alanlar
sourcePosition

object ( SourcePosition )

Source Kaynaktaki konumu.

description

string

Kısa hata açıklaması.

severity

enum ( Severity )

Sorunun ciddiyeti.

Kaynak Konumu

Source mesajındaki satırı, sütun numarası ve File dizini de dahil olmak üzere Source içeriğindeki konum. Hata ayıklama amacıyla kullanılır.

JSON gösterimi
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Alanlar
fileName

string

File Adı.

line

integer

Kaynak parçanın satır numarası. 1 tabanlı.

column

integer

Kaynak parçasıyla ilişkili kaynak satırındaki ilk sütun.

currentOffset

integer

Dosyanın başlangıcına göre başlangıç ​​konumu.

endOffset

integer

Dosyanın başlangıcına göre bitiş konumu.

Şiddet

Sorunun ciddiyet derecesi kümesi.

Numaralandırmalar
SEVERITY_UNSPECIFIED Belirtilmemiş bir ciddiyet.
DEPRECATION Artık desteklenemeyecek veya sürdürülemeyecek ifadeler ve yöntemler için kullanımdan kaldırma sorunu.
WARNING Şunlar gibi uyarılar: kullanılmayan değişkenler.
ERROR Eşleşmeyen küme parantezleri veya değişkenlerin yeniden tanımlanması gibi hatalar.

Test sonucu

Testin durumunu ve test başarısızlıklarının açıklamasını ve kaynak konumunu içeren test sonucu mesajı.

JSON gösterimi
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Alanlar
state

enum ( State )

Testin durumu.

debugMessages[]

string

Değerlendirme sırasında karşılaşılan test yürütme sorunlarıyla ilgili hata ayıklama mesajları.

Hata ayıklama mesajları, işlev taklitlerinin çok fazla veya çok az çağrılması veya değerlendirme sırasında ortaya çıkan çalışma zamanı hatalarıyla ilgili olabilir.

Örneğin: Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

Source temel çalışma zamanı hatasının oluştuğu konum.

Bir ifadenin değerlendirilmesi hatayla sonuçlanabilir. Kurallar varsayılan olarak reddedilir, dolayısıyla bir hata oluştuğunda DENY beklentisi geçerlidir. Hatalı bir DENY olduğunda SourcePosition döndürülür.

Örneğin errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

Hizmet tanımlı yöntemlere yapılan işlev çağrıları kümesi.

İşlev çağrıları, değerlendirme sırasında karşılaşıldıkları sıraya göre dahil edilir, hem sahte hem de sahte olmayan işlevler için sağlanır ve test state bakılmaksızın yanıta dahil edilir.

visitedExpressions[]

object ( VisitedExpression )

Belirli bir test için ziyaret edilen izin ifadeleri kümesi. Bu, test senaryosuyla ilgili olan tüm ziyaret edilen izin ifadelerinin konumlarını ve değerlendirme sonuçlarını döndürür;

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

Ara değerlendirme durumlarının ayrıntılı bir raporu için expressionReports alanına bakın

expressionReports[]

object ( ExpressionReport )

AST kural kümesindeki ifadeden değerlendirildikleri değerlere eşleme. AST yapısını yansıtmak için kısmen yuvalanmıştır. Yukarıdaki "visitedExpressions" alanının aksine, bu alanın aslında izin ifadelerini değil, ifadeleri izlediğini unutmayın. Değişmez ifadeler atlanmıştır.

Durum

Test sonucu için geçerli durumlar.

Numaralandırmalar
STATE_UNSPECIFIED Test durumu ayarlanmadı.
SUCCESS Test bir başarıdır.
FAILURE Test başarısızlıktır.

İşlev Çağrısı

Test yürütme sırasında çağrılan hizmet tanımlı bir işlev çağrısını temsil eder.

JSON gösterimi
{
  "function": string,
  "args": [
    value
  ]
}
Alanlar
function

string

Çağrılan işlevin adı.

args[]

value ( Value format)

İşleve sağlanan bağımsız değişkenler.

Ziyaret İfadesi

Kurallarda ziyaret edilen bir ifadenin konumunu ve erişim sonucunu saklayın.

JSON gösterimi
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Alanlar
sourcePosition

object ( SourcePosition )

Source bir ifadenin ziyaret edildiği konum.

value

value ( Value format)

Ziyaret edilen ifade için değerlendirilen değer; örneğin doğru/yanlış

İfade Raporu

Bir ifadenin dosyanın neresinde bulunduğunu ve kullanımı boyunca neye göre değerlendirildiğini açıklar.

JSON gösterimi
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Alanlar
sourcePosition

object ( SourcePosition )

İfadenin orijinal kural kaynağındaki konumu.

values[]

object ( ValueCount )

Bu ifadeyle karşılaşıldığında değerlendirilen değerler.

children[]

object ( ExpressionReport )

Alt ifadeler

Değer Sayısı

Bir İfadenin belirli bir ExpressionValue'ya göre kaç kez değerlendirildiğini gösteren Tuple.

JSON gösterimi
{
  "value": value,
  "count": integer
}
Alanlar
value

value ( Value format)

İfadenin dönüş değeri

count

integer

Bu ifadenin döndürülme sayısı.