- Żądanie HTTP
- Parametry ścieżki
- Treść żądania
- Treść odpowiedzi
- Zakresy autoryzacji
- Pakiet testowy
- Przypadek testowy
- Oczekiwanie
- FunkcjaMock
- Argument
- Wynik
- Kodowanie ścieżki
- Poziom raportu wyrażenia
- Wydanie
- Pozycja źródła
- Powaga
- Wynik testu
- Państwo
- FunkcjaWywołanie
- Wyrażenie odwiedzone
- Raport wyrażeń
- Liczba wartości
- Spróbuj!
Source
testowe pod kątem poprawności składniowej i semantycznej. Występujące problemy, jeśli wystąpią, zostaną zwrócone osobie dzwoniącej wraz z opisem, wagą i lokalizacją źródła.
Metodę testową można wykonać za pomocą Source
. Przekazywanie Source
jest przydatne do testowania jednostkowego nowych reguł.
Należy pamiętać, że testy uruchamiane przy użyciu interfejsu API REST wykorzystują produkcyjne bazy danych, zasobniki pamięci masowej i powiązane źródła zasobów. Takie testy mogą wiązać się z opłatami za użytkowanie. Zdecydowanie zalecamy korzystanie z pakietu Firebase Local Emulator Suite do testowania reguł, ponieważ możesz uruchamiać testy na zasobach nieprodukcyjnych w trybie offline bez opłat za użytkowanie.
Poniżej znajduje się przykład Source
, które pozwala użytkownikom przesyłać obrazy do zasobnika zawierającego ich identyfikator użytkownika i pasujące do poprawnych metadanych:
Przykład
// 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/')
}
}
Żądanie HTTP
POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test
Adres URL używa składni transkodowania gRPC .
Parametry ścieżki
Parametry | |
---|---|
name | Wymagany. W przypadku testów na |
Treść żądania
Treść żądania zawiera dane o następującej strukturze:
Reprezentacja JSON | |
---|---|
{ "source": { object ( |
Pola | |
---|---|
source | |
testSuite | Wbudowany pakiet Jeśli |
Treść odpowiedzi
Jeśli się powiedzie, treść odpowiedzi zawiera dane o następującej strukturze:
Odpowiedź dla FirebaseRulesService.TestRuleset
.
Reprezentacja JSON | |
---|---|
{ "issues": [ { object ( |
Pola | |
---|---|
issues[] | Zagadnienia |
testResults[] | Zbiór wyników testów, biorąc pod uwagę przypadki testowe w pakiecie |
Zakresy autoryzacji
Wymaga jednego z następujących zakresów OAuth:
-
https://www.googleapis.com/auth/cloud-platform
-
https://www.googleapis.com/auth/firebase
-
https://www.googleapis.com/auth/firebase.readonly
Aby uzyskać więcej informacji, zobacz Omówienie uwierzytelniania .
Pakiet testowy
TestSuite
to zbiór instancji TestCase
, które sprawdzają poprawność logiczną reguł. Do TestSuite
można odwoływać się bezpośrednio w wywołaniu projects.test
lub jako część obiektu Release
w ramach kontroli przed wydaniem.
Reprezentacja JSON | |
---|---|
{
"testCases": [
{
object ( |
Pola | |
---|---|
testCases[] | Zbiór przypadków testowych powiązanych z pakietem |
Przypadek testowy
Komunikaty TestCase
zapewniają kontekst żądania i oczekiwanie, czy dany kontekst zostanie dozwolony, czy odrzucony. Przypadki testowe mogą określać request
, resosurce
functionMocks
w celu wyśmiewania wywołania funkcji do funkcji udostępnianej przez usługę.
Obiekt request
reprezentuje kontekst obecny w momencie żądania.
resource
to wartość zasobu docelowego (np. metadane obiektu GCS lub dokumentu Firestore), która pojawia się w pamięci trwałej przed wykonaniem żądania.
Zobacz także powiązaną dokumentację referencyjną dotyczącą Cloud Firestore ( żądanie , zasób ) i Cloud Storage dla Firebase ( żądanie , zasób ).
Reprezentacja JSON | |
---|---|
{ "expectation": enum ( |
Pola | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | Oczekiwanie testowe. | ||||||||||||||||
request | Kontekst żądania. Dokładny format kontekstu żądania zależy od usługi. Informacje o obsługiwanych polach i typach żądania można znaleźć w odpowiedniej dokumentacji serwisowej. Minimalnie wszystkie usługi obsługują następujące pola i typy:
Jeśli wartość żądania nie jest poprawnie sformułowana dla usługi, żądanie zostanie odrzucone jako nieprawidłowy argument. | ||||||||||||||||
resource | Opcjonalna wartość zasobu wyświetlana w pamięci trwałej przed spełnieniem żądania. Typ zasobu zależy od wartości | ||||||||||||||||
functionMocks[] | Opcjonalna funkcja Reguły manipuluje funkcjami zdefiniowanymi przez usługę. Jeśli nie jest ustawiona, oczekuje się, że każda funkcja Reguły zdefiniowana przez usługę zwróci błąd, który może, ale nie musi, mieć wpływ na wynik testu. | ||||||||||||||||
pathEncoding | Określa, czy ścieżki (takie jak request.path) są kodowane i w jaki sposób. | ||||||||||||||||
expressionReportLevel | Określa, co powinno zostać uwzględnione w odpowiedzi. |
Oczekiwanie
Zbiór obsługiwanych oczekiwań przypadków testowych.
Wyliczenia | |
---|---|
EXPECTATION_UNSPECIFIED | Nieokreślone oczekiwanie. |
ALLOW | Oczekuj dozwolonego wyniku. |
DENY | Spodziewaj się odrzuconego wyniku. |
FunkcjaMock
Definicja funkcji Mock Rules.
Próby muszą odnosić się do funkcji zadeklarowanej przez usługę docelową. Typ funkcji args i wynik zostaną wywnioskowane w czasie testu. Jeśli wartości arg lub wynikowe nie są zgodne z deklaracją typu funkcji, żądanie zostanie uznane za nieprawidłowe.
Dla danej nazwy funkcji można udostępnić więcej niż jeden FunctionMock
, o ile elementy dopasowujące Arg
są różne. Dla danego przeciążenia może istnieć tylko jedna funkcja, w której wszystkie wartości Arg
to Arg.any_value
.
Zobacz także Funkcje w języku Reguły Bezpieczeństwa .
Reprezentacja JSON | |
---|---|
{ "function": string, "args": [ { object ( |
Pola | |
---|---|
function | Nazwa funkcji. Nazwa funkcji musi odpowiadać nazwie podanej w deklaracji usługi. |
args[] | Lista wartości |
result | Próbny wynik wywołania funkcji. |
Argument
Dopasowujące argumenty dla funkcji próbnej.
Reprezentacja JSON | |
---|---|
{ // Union field |
Pola | ||
---|---|---|
type pola Unii. Obsługiwane wartości argumentów. type może być tylko jeden z poniższych: | ||
exactValue | Argument dokładnie odpowiada podanej wartości. | |
anyValue | Argument pasuje do dowolnej podanej wartości. |
Wynik
Możliwe wartości wyników z próbnego wywołania funkcji.
Reprezentacja JSON | |
---|---|
{ // Union field |
Pola | ||
---|---|---|
type pola Unii. Obsługiwane wartości wyników. type może być tylko jeden z poniższych: | ||
value | Wynikiem jest rzeczywista wartość. Typ wartości musi być zgodny z typem zadeklarowanym przez usługę. | |
undefined | Wynik jest niezdefiniowany, co oznacza, że nie można go obliczyć. |
Kodowanie ścieżki
Typ użytego kodowania ścieżki.
Wyliczenia | |
---|---|
ENCODING_UNSPECIFIED | Nie określono żadnego kodowania. Domyślnie jest to zachowanie „URL_ENCODED”. |
URL_ENCODED | Traktuje segmenty ścieżki jako zakodowane w adresie URL, ale z niekodowanymi separatorami („/”). Jest to zachowanie domyślne. |
PLAIN | Traktuje całkowitą ścieżkę jako niezakodowaną w adresie URL, np. surową. |
Poziom raportu wyrażenia
Ilość danych do uwzględnienia w odpowiedzi na raport wyrażenia.
Wyliczenia | |
---|---|
LEVEL_UNSPECIFIED | Nie określono żadnego poziomu. Domyślnie zachowanie to „BRAK”. |
NONE | Nie podawaj żadnych dodatkowych informacji. |
FULL | Dołącz szczegółowe raporty dotyczące ocenianych wyrażeń. |
VISITED | Uwzględnij tylko wyrażenia, które zostały odwiedzone podczas oceny. |
Wydanie
Problemy obejmują ostrzeżenia, błędy i powiadomienia o wycofaniu.
Reprezentacja JSON | |
---|---|
{ "sourcePosition": { object ( |
Pola | |
---|---|
sourcePosition | Pozycja zagadnienia w |
description | Krótki opis błędu. |
severity | Ważność problemu. |
Pozycja źródła
Pozycja w treści Source
, włączając jej wiersz, numer kolumny i indeks File
w wiadomości Source
. Używane do celów debugowania.
Reprezentacja JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Pola | |
---|---|
fileName | Nazwa |
line | Numer linii fragmentu źródłowego. oparty na 1. |
column | Pierwsza kolumna w wierszu źródłowym powiązana z fragmentem źródłowym. |
currentOffset | Pozycja początkowa względem początku pliku. |
endOffset | Pozycja końcowa względem początku pliku. |
Powaga
Zestaw istotności problemu.
Wyliczenia | |
---|---|
SEVERITY_UNSPECIFIED | Nieokreślone nasilenie. |
DEPRECATION | Problem z wycofaniem instrukcji i metod, które mogą nie być już obsługiwane lub obsługiwane. |
WARNING | Ostrzeżenia takie jak: nieużywane zmienne. |
ERROR | Błędy takie jak: niedopasowane nawiasy klamrowe lub redefinicja zmiennej. |
Wynik testu
Komunikat o wynikach testu zawierający stan testu, a także opis i położenie źródła niepowodzeń testu.
Reprezentacja JSON | |
---|---|
{ "state": enum ( |
Pola | |
---|---|
state | Stan testu. |
debugMessages[] | Debuguj komunikaty związane z problemami z wykonaniem testów napotkanymi podczas oceny. Komunikaty debugowania mogą być związane ze zbyt dużą lub zbyt małą liczbą wywołań próbnych funkcji lub błędami środowiska wykonawczego, które występują podczas oceny. Na przykład: |
errorPosition | Pozycja w Ocena wyrażenia może spowodować błąd. Reguły są domyślnie odrzucane, więc oczekiwanie Np. |
functionCalls[] | Zestaw wywołań funkcji wykonanych do metod zdefiniowanych przez usługę. Wywołania funkcji są uwzględniane w kolejności, w jakiej zostały napotkane podczas oceny, są dostępne zarówno dla funkcji próbnych, jak i niezaszyfrowanych oraz uwzględniane w odpowiedzi niezależnie od |
visitedExpressions[] | Zestaw odwiedzonych wyrażeń uprawnień dla danego testu. Zwraca to pozycje i wyniki oceny wszystkich odwiedzonych wyrażeń uprawnień, które były istotne dla przypadku testowego, np
Szczegółowy raport pośrednich stanów oceny znajduje się w polu |
expressionReports[] | Mapowanie z wyrażenia w zestawie reguł AST na wartości, według których zostały oszacowane. Częściowo zagnieżdżone, aby odzwierciedlić strukturę AST. Należy pamiętać, że w przeciwieństwie do powyższego pola „visitedExpressions” w tym polu w rzeczywistości śledzone są wyrażenia, a nie instrukcje dotyczące uprawnień. Wyrażenia dosłowne są pomijane. |
Państwo
Poprawne stany wyniku testu.
Wyliczenia | |
---|---|
STATE_UNSPECIFIED | Stan testu nie jest ustawiony. |
SUCCESS | Próba zakończyła się sukcesem. |
FAILURE | Próba to porażka. |
FunkcjaWywołanie
Reprezentuje wywołanie funkcji zdefiniowanej przez usługę, które zostało wywołane podczas wykonywania testu.
Reprezentacja JSON | |
---|---|
{ "function": string, "args": [ value ] } |
Pola | |
---|---|
function | Nazwa wywoływanej funkcji. |
args[] | Argumenty dostarczone do funkcji. |
Wyrażenie odwiedzone
Przechowuj pozycję i wynik dostępu dla wyrażenia odwiedzonego w regułach.
Reprezentacja JSON | |
---|---|
{
"sourcePosition": {
object ( |
Pola | |
---|---|
sourcePosition | Pozycja w |
value | Oceniana wartość odwiedzanego wyrażenia, np. prawda/fałsz |
Raport wyrażeń
Opisuje, gdzie w pliku znajduje się wyrażenie i do czego zostało ono ocenione w trakcie jego użycia.
Reprezentacja JSON | |
---|---|
{ "sourcePosition": { object ( |
Pola | |
---|---|
sourcePosition | Pozycja wyrażenia w oryginalnym źródle reguł. |
values[] | Wartości, które to wyrażenie ocenia po napotkaniu. |
children[] | Podwyrażenia |
Liczba wartości
Krotka określająca, ile razy wyrażenie zostało ocenione do określonej wartości wyrażenia.
Reprezentacja JSON | |
---|---|
{ "value": value, "count": integer } |
Pola | |
---|---|
value | Wartość zwracana przez wyrażenie |
count | Liczba zwróconych wystąpień tego wyrażenia. |