Method: projects.test

Source SDK'sının söz dizimsel ve anlamsal doğruluğunu test edin. Varsa mevcut sorunlar, arayana açıklama, önem derecesi ve kaynak konumuyla birlikte geri gönderilir.

Test yöntemi Source ile yürütülebilir. Yeni kuralların birim testi için Source testine tabi tutulması önerilir.

REST API kullanılarak çalıştırılan testlerin üretim veritabanlarını, depolama paketlerini ve ilgili rse kaynaklarını kullandığını unutmayın. Bu tür testler için kullanım ücreti alınabilir. Kullanım ücreti ödemeden çevrimdışı, üretim dışı kaynaklarda testler çalıştırabileceğinizden Kural testi yapmak için Firebase Local Emulator Suite'i kullanmanızı önemle tavsiye ederiz.

Aşağıda, kullanıcıların kendi kullanıcı kimliklerini içeren ve doğru meta verilerle eşleşen bir pakete resim yüklemesine 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öz dizimini kullanır.

Yol parametreleri

Parametreler
name

string

Zorunlu. source ile yapılan testlerde kaynak adı, şu projeye işaret etmelidir: Biçim: projects/{project_id}

İstek içeriği

İ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 çerçevesinde yürütülecek satır içi TestSuite.

Source satır içi sağlandığında, test durumları yalnızca Source söz dizimsel ve anlamsal olarak geçerliyse yürütülür.

Yanıt gövdesi

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

FirebaseRulesService.TestRuleset için yanıt.

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

object (Issue)

Farklı önem derecelerinde söz dizimsel ve anlamsal Source sorunları. ERROR önem derecesindeki sorunlar testlerin yürütülmesini engeller.

testResults[]

object (TestResult)

TestSuite içindeki test durumlarına göre belirlenen test sonuçları grubu. Sonuçlar, TestSuite içinde test senaryolarıyla aynı sırayla gösterilir.

Yetkilendirme 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ış başlıklı makaleye bakın.

Test Paketi

TestSuite, kuralların mantıksal doğruluğunu doğrulayan TestCase örnekten oluşan bir koleksiyondur. TestSuite öğesine, projects.test çağrısında satır içi veya yayın öncesi kontrolü olarak Release nesnesinin parçası olarak referans verilebilir.

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

object (TestCase)

TestSuite ile ilişkili test durumları koleksiyonu.

Test Durumu

TestCase mesajları, isteğin bağlamını ve söz konusu bağlama izin verilip verilmeyeceğine dair beklentiyi sunar. Test durumlarında, hizmet tarafından sağlanan bir işleve işlev çağrısında bulunmak için request, resosurce ve functionMocks belirtilebilir.

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

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

Cloud Firestore ( istek, kaynak) ve Cloud Storage for Firebase (istek, kaynak) için de ilgili referans belgelerine 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)

Beklentiyi test edin.

request

value (Value format)

Bağlam bilgisi isteyin.

İstek bağlamının tam biçimi hizmete bağlıdır. İstekteki desteklenen alanlar ve türler hakkında bilgi için ilgili hizmet dokümanlarına bakın. Tüm hizmetler en azından aşağıdaki alanları ve türleri destekler:

İstek alanı Tür
kimlik doğrulama string
auth.token map<string, string>
üst bilgiler map<string, string>
method string
parametreler map<string, string>
yol string
time google.protobuf.Timestamp

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

resource

value (Value format)

İstek yerine getirilmeden önce kalıcı depolama alanında göründüğü şekliyle 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 modelleri. Politika ayarlanmazsa hizmet tarafından tanımlanmış herhangi bir Kurallar işlevinin hata döndürmesi beklenir. Bu hata, test sonucunu etkileyebilir veya etkilemeyebilir.

pathEncoding

enum (PathEncoding)

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

expressionReportLevel

enum (ExpressionReportLevel)

Yanıta nelerin dahil edilmesi gerektiğini belirtir.

Beklenti

Desteklenen test durumu beklentileri grubu.

Sıralamalar
EXPECTATION_UNSPECIFIED Beklenti belirtilmedi.
ALLOW İzin verilen bir sonuç bekleyin.
DENY Sonuç reddedildi.

İşlev Modeli

Örnek Kuralları işlevinin tanımı.

Örnekler, hedef hizmet tarafından bildirilen bir işleve başvuruda bulunmalıdır. Fonksiyon bağımsız değişkenlerinin türü ve sonucu, test sırasında tahmin edilir. Bağımsız değişken veya sonuç değerleri işlev türü bildirimiyle uyumlu değilse istek geçersiz kabul edilir.

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

Ayrıca, Güvenlik Kuralları dilindeki işlevler başlıklı makaleyi de inceleyin.

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

string

İşlevin adı.

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

args[]

object (Arg)

Eşleştirilecek 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 örnek sonucu.

Bağımsız değişken

Model işlevi 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ştirme alanı type. Desteklenen bağımsız değişken değerleri. type şunlardan 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 örnek çağrısından 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ştirme alanı type. Desteklenen sonuç değerleri. type şunlardan yalnızca biri olabilir:
value

value (Value format)

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

undefined

object

Sonuç tanımlanmadı. Bu nedenle sonuç hesaplanamadı.

Yol Kodlaması

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

Sıralamalar
ENCODING_UNSPECIFIED Kodlama belirtilmedi. Varsayılan olarak "URL_ENCODED" değerine ayarlanır gösterir.
URL_ENCODED Yol segmentlerini, kodlanmamış ayırıcılar ("/") ile kodlanmış URL olarak değerlendirir. Bu, varsayılan davranıştır.
PLAIN Toplam yolu URL olarak kodlanmayan bir şekilde (ör. ham.

İfadeRapor Düzeyi

İfade raporu yanıtına eklenecek veri miktarı.

Sıralamalar
LEVEL_UNSPECIFIED Düzey belirtilmedi. Varsayılan olarak "NONE" değerine ayarlanır gösterir.
NONE Başka bilgi eklemeyin.
FULL Değerlendirilen ifadelerle ilgili ayrıntılı raporlar 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)

Sorunun Source içindeki konumu.

description

string

Kısa hata açıklaması.

severity

enum (Severity)

Sorunun önem derecesi.

KaynakKonumu

Satır, sütun numarası ve Source mesajındaki File dizini 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ı. temel alır.

column

integer

Kaynak parçayla ilişkili kaynak satırdaki 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.

Önem Düzeyi

Sorun önem dereceleri grubu.

Sıralamalar
SEVERITY_UNSPECIFIED Önem derecesi belirtilmemiş.
DEPRECATION Artık desteklenemeyecek veya sürdürülemeyecek ifadeler ve yöntemlerle ilgili desteğin sonlandırılması sorunu.
WARNING Uyarılar: Kullanılmayan değişkenler.
ERROR Eşleşmeyen küme parantezleri veya değişkenlerin yeniden tanımı gibi hatalar.

TestResult

Testin durumunu ve test hataları için açıklama ile 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 mesajlarda hata ayıklayın.

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

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

errorPosition

object (SourcePosition)

Source içinde ilk çalışma zamanı hatasının ortaya çıktığı konum.

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

Ör. 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şılan sıraya göre dahil edilir, hem sahte hem de modellenmemiş işlevler için sağlanır ve state testinden bağımsız olarak yanıta dahil edilir.

visitedExpressions[]

object (VisitedExpression)

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

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

Ara değerlendirme durumlarının ayrıntılı 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ıtacak şekilde kısmen iç içe yerleştirilmiş. Bu alanın, "visitedExpressions"un aksine aslında izleme ifadeleri değil, izin ifadeleri olduğunu unutmayın yukarıdaki alanı doldurun. Değişmez ifadeler atlanır.

Eyalet

Test sonucu için geçerli durumlar.

Sıralamalar
STATE_UNSPECIFIED Test durumu ayarlanmadı.
SUCCESS Test başarılı oldu.
FAILURE Test, başarısız oldu.

İş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 Edilen İfade

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

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

object (SourcePosition)

Source alanında bir ifadenin ziyaret edildiği konum.

value

value (Value format)

Ziyaret edilen ifade için değerlendirilen değer, ör. doğru/yanlış

İfade Raporu

Bir ifadenin dosyanın neresinde bulunduğunu ve kullanımı sırasında ne değerlendirildiğini açıklar.

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

object (SourcePosition)

Orijinal kural kaynağındaki ifadenin konumu.

values[]

object (ValueCount)

Karşılaşıldığında bu ifadenin değerlendirdiği değerler.

children[]

object (ExpressionReport)

Alt ifadeler

Değer Sayısı

Bir İfadenin belirli bir ExpressionValue için kaç kez değerlendirildiğini ayarlayın.

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

value (Value format)

İfadenin döndürülen değeri

count

integer

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