- Żądanie HTTP
- Parametry ścieżki
- Treść żądania
- Treść odpowiedzi
- Zakresy autoryzacji
- TestSuite
- Zgłoszenie testowe
- Oczekiwania
- Funkcja FunctionMock
- Arg
- Wynik
- Kodowanie ścieżki
- ExpressionReportLevel
- Problem
- Pozycja źródła
- Waga
- Wynik testu
- Stan
- Wywołanie funkcji
- VisitedExpression
- RaportWyrażenia
- ValueCount (Liczba wartości)
- Wypróbuj
Przetestuj działanie Source
pod kątem poprawności składniowej i semantycznej. Istniejące problemy (jeśli jakieś występują) zostaną zwrócone do osoby wywołującej wraz z opisem, powagą i lokalizacją źródła.
Metodę testowania można wykonać za pomocą funkcji Source
. Zaliczenie Source
przydaje się do testowania jednostkowego nowych reguł.
Pamiętaj, że testy przeprowadzane za pomocą interfejsu API REST korzystają z produkcyjnych baz danych, zasobników na dane i powiązanych źródeł danych. Takie testy mogą powodować naliczanie opłat za korzystanie. Zdecydowanie zalecamy używanie Pakietu emulatorów lokalnych Firebase do testowania reguł, ponieważ testy można przeprowadzać na zasobach nieprodukcyjnych offline, bez opłat za wykorzystanie.
Oto przykład kodu Source
, który umożliwia użytkownikom przesyłanie do zasobnika obrazów o odpowiednim identyfikatorze użytkownika i z poprawnymi metadanymi:
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 |
Wymagane. W przypadku testów pod kątem zgodności z zasadą |
Treść żądania
Treść żądania zawiera dane o następującej strukturze:
Zapis JSON | |
---|---|
{ "source": { object ( |
Pola | |
---|---|
source |
|
testSuite |
Wbudowany kod Jeśli właściwość |
Treść odpowiedzi
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
Odpowiedź dla: FirebaseRulesService.TestRuleset
.
Zapis JSON | |
---|---|
{ "issues": [ { object ( |
Pola | |
---|---|
issues[] |
Syntaktyczne i semantyczne problemy typu |
testResults[] |
Zbiór wyników testów na podstawie przypadków testowych w: |
Zakresy autoryzacji
Wymaga jednego z tych zakresów protokołu OAuth:
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/firebase
https://www.googleapis.com/auth/firebase.readonly
Więcej informacji znajdziesz w artykule o uwierzytelnianiu (w języku angielskim).
TestSuite
TestSuite
to zbiór TestCase
instancji, który weryfikuje logiczną prawidłowość reguł. Do obiektu TestSuite
można się odwoływać w tekście w wywołaniu projects.test
lub jako część obiektu Release
w ramach kontroli przedpremierowej.
Zapis JSON | |
---|---|
{
"testCases": [
{
object ( |
Pola | |
---|---|
testCases[] |
Zbiór przypadków testowych powiązanych z |
Przypadek testowy
Komunikaty TestCase
zawierają kontekst żądania i oczekiwanie, czy dany kontekst będzie dozwolony czy odrzucony. Przypadki testowe mogą określać request
, resosurce
i functionMocks
w celu imitowania wywołania funkcji udostępnionej przez usługę.
Obiekt request
reprezentuje kontekst w momencie żądania.
resource
to wartość zasobu docelowego (np. metadane obiektu GCS lub dokumentu Firestore), która znajduje się w pamięci trwałej przed wykonaniem żądania.
Zapoznaj się też z dokumentacją Cloud Firestore ( żądanie, zasób) i Cloud Storage dla Firebase (żądanie oraz zasób).
Zapis JSON | |
---|---|
{ "expectation": enum ( |
Pola | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
Oczekiwanie testu. |
||||||||||||||||
request |
Kontekst żądania. Dokładny format kontekstu żądania zależy od usługi. Informacje na temat pól i typów obsługiwanych w żądaniu znajdziesz w odpowiedniej dokumentacji usługi. Minimalnie wszystkie usługi obsługują te pola i typy:
Jeśli wartość żądania nie jest prawidłowo sformatowana w przypadku usługi, zostanie odrzucone jako nieprawidłowy argument. |
||||||||||||||||
resource |
Opcjonalna wartość zasobu widoczna w pamięci trwałej przed zrealizowaniem żądania. Typ zasobu zależy od wartości |
||||||||||||||||
functionMocks[] |
Funkcja reguł opcjonalnych ma przykłady funkcji zdefiniowanych przez usługę. Jeśli jej nie skonfigurujesz, każda funkcja zdefiniowana przez usługę reguł powinna zwracać błąd, który może wpłynąć na wynik testu, ale nie musi. |
||||||||||||||||
pathEncoding |
Określa, czy ścieżki (np. request.path) są kodowane i w jaki sposób. |
||||||||||||||||
expressionReportLevel |
Określa, co ma zawierać odpowiedź. |
Oczekiwanie
Zbiór oczekiwań na potrzeby przypadku testowego.
Wartości w polu enum | |
---|---|
EXPECTATION_UNSPECIFIED |
Nieokreślone oczekiwanie. |
ALLOW |
Spodziewaj się dozwolonego wyniku. |
DENY |
Oczekiwany jest odrzucony wynik. |
Przykładowy szablon funkcji
Definicja funkcji przykładowych reguł.
Przykłady muszą odnosić się do funkcji zadeklarowanej przez usługę docelową. Typ argumentów funkcji i wynik zostanie ustalony w czasie testu. Jeśli wartości argumentu lub wyników nie są zgodne z deklaracją typu funkcji, żądanie zostanie uznane za nieprawidłowe.
Dla danej nazwy funkcji można podać więcej niż jeden element FunctionMock
, o ile dopasowania typu Arg
są różne. W przypadku danego przeciążenia może istnieć tylko 1 funkcja, przy czym wszystkie wartości Arg
to Arg.any_value
.
Zobacz też Funkcje w języku reguł zabezpieczeń.
Zapis JSON | |
---|---|
{ "function": string, "args": [ { object ( |
Pola | |
---|---|
function |
Nazwa funkcji. Nazwa funkcji musi być zgodna z nazwą w deklaracji usługi. |
args[] |
Lista |
result |
Przykładowy wynik wywołania funkcji. |
arg
Dopasowania argumentów dla funkcji pozornej.
Zapis JSON | |
---|---|
{ // Union field |
Pola | ||
---|---|---|
Pole sumy type . Obsługiwane wartości argumentów. type może mieć tylko jedną z tych wartości: |
||
exactValue |
Argument ściśle pasuje do podanej wartości. |
|
anyValue |
Argument jest zgodny z dowolną podaną wartością. |
Wynik
Możliwe wartości wyników z pozornego wywołania funkcji.
Zapis JSON | |
---|---|
{ // Union field |
Pola | ||
---|---|---|
Pole sumy type . Obsługiwane wartości wyników. type może mieć tylko jedną z tych wartości: |
||
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 PathEncoding
Typ użytego kodowania ścieżki.
Wartości w polu enum | |
---|---|
ENCODING_UNSPECIFIED |
Kodowanie nie zostało określone. Domyślna wartość to „URL_ENCODED” zachowanie użytkownika. |
URL_ENCODED |
Traktuje segmenty ścieżki jako zakodowane w adresie URL, ale z niezakodowanymi separatorami („/”). Jest to jego ustawienie domyślne. |
PLAIN |
Traktuje łączną ścieżkę jako niezakodowaną adresem URL, np. nieprzetworzone. |
Poziom_raportu_wyrażeń
Ilość danych do uwzględnienia w odpowiedzi na raport o wyrażeniach.
Wartości w polu enum | |
---|---|
LEVEL_UNSPECIFIED |
Nie określono poziomu. Domyślna wartość to „NONE” zachowanie użytkownika. |
NONE |
Nie podawaj żadnych dodatkowych informacji. |
FULL |
Dołącz szczegółowe raporty na temat ocenianych wyrażeń. |
VISITED |
Uwzględniaj tylko wyrażenia, które zostały odwiedzone podczas oceny. |
Problem
Mogą to być ostrzeżenia, błędy i powiadomienia o wycofaniu.
Zapis JSON | |
---|---|
{ "sourcePosition": { object ( |
Pola | |
---|---|
sourcePosition |
Pozycja problemu w |
description |
Krótki opis błędu. |
severity |
Waga problemu. |
Pozycja źródłowa
Pozycja w treści Source
, w tym jej wiersz, numer kolumny oraz indeks elementu File
w komunikacie Source
. Służy do debugowania.
Zapis JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Pola | |
---|---|
fileName |
Nazwa elementu ( |
line |
Numer wiersza fragmentu źródłowego. 1, |
column |
Pierwsza kolumna w wierszu źródłowym powiązanym z fragmentem źródłowym. |
currentOffset |
Pozycja początkowa względem początku pliku. |
endOffset |
Pozycja końcowa względem początku pliku. |
Poziom ważności
Zestaw wagi problemów.
Wartości w polu enum | |
---|---|
SEVERITY_UNSPECIFIED |
Nieokreślona ważność. |
DEPRECATION |
Problem z wycofaniem instrukcji i metod, które mogą nie być już obsługiwane lub obsługiwane. |
WARNING |
Ostrzeżenia, np.: nieużywane zmienne. |
ERROR |
błędy, np. niedopasowane nawiasy klamrowe lub zmiany definicji zmiennych. |
TestResult
Komunikat o wyniku testu zawierający stan testu, opis i pozycję źródłową w przypadku niepowodzenia testu.
Zapis JSON | |
---|---|
{ "state": enum ( |
Pola | |
---|---|
state |
Stan testu. |
debugMessages[] |
Komunikaty o debugowaniu związane z problemami z wykonaniem testu, które wystąpiły podczas oceny. Komunikaty o debugowaniu mogą być związane ze zbyt dużą liczbą lub zbyt małą liczbą wywołań funkcji próbnych albo z błędami czasu działania występującymi podczas oceny. Na przykład: |
errorPosition |
Pozycja w tabeli Ocena wyrażenia może zakończyć się błędem. Reguły są domyślnie odrzucane, więc prawidłowe jest oczekiwanie typu Na przykład: |
functionCalls[] |
Zbiór wywołań funkcji wykonanych do metod zdefiniowanych przez usługę. Wywołania funkcji są uwzględniane w kolejności, w jakiej występują podczas oceny, są podawane zarówno w przypadku funkcji próbnych, jak i nietestowanych. Są one uwzględniane w odpowiedzi niezależnie od testu |
visitedExpressions[] |
Zbiór wyrażeń używanych do danego testu, które zostały odwiedzone przez użytkownika. Zwraca pozycje i wyniki oceny wszystkich odwiedzonych wyrażeń uprawnień, które były istotne w przypadku testu, np.
Szczegółowy raport o stanach oceny pośredniej znajdziesz w polu |
expressionReports[] |
Mapowanie z wyrażenia w zestawie reguł AST na wartości, na które zostały przeliczone. Częściowo zagnieżdżone, aby odzwierciedlić strukturę AST. Zwróć uwagę, że to pole śledzi wyrażenia, a nie instrukcje uprawnień (w odróżnieniu od pola „visitedExpressions”) powyżej. Wyrażenia dosłowne są pomijane. |
Stan
Prawidłowe stany wyniku testu.
Wartości w polu enum | |
---|---|
STATE_UNSPECIFIED |
Nie ustawiono stanu testu. |
SUCCESS |
Testy kończą się sukcesem. |
FAILURE |
Test kończy się niepowodzeniem. |
Wywołanie funkcji
Reprezentuje wywołanie funkcji zdefiniowanej przez usługę, które zostało wywołane podczas wykonywania testu.
Zapis JSON | |
---|---|
{ "function": string, "args": [ value ] } |
Pola | |
---|---|
function |
Nazwa wywołanej funkcji. |
args[] |
Argumenty podane dla funkcji. |
VisitedExpression
Przechowuje pozycję i wynik dostępu dla wyrażenia odwiedzonego w regułach.
Zapis JSON | |
---|---|
{
"sourcePosition": {
object ( |
Pola | |
---|---|
sourcePosition |
Pozycja w tabeli |
value |
Wartość obliczona dla odwiedzonego wyrażenia, np. prawda/fałsz |
RaportWyrażenia
Opisuje, gdzie w pliku znajduje się wyrażenie i co zostało ocenione podczas jego użycia.
Zapis JSON | |
---|---|
{ "sourcePosition": { object ( |
Pola | |
---|---|
sourcePosition |
Pozycja wyrażenia w źródle reguł oryginalnych. |
values[] |
Wartości, na które wyrażenie oceniło to wyrażenie. |
children[] |
Wyrażenia podrzędne |
Liczba wartości
Kropka określająca, ile razy wyrażenie zostało ocenione jako określona wartość wyrażenia.
Zapis JSON | |
---|---|
{ "value": value, "count": integer } |
Pola | |
---|---|
value |
Wartość zwrócona wyrażenia |
count |
Liczba wystąpień tego wyrażenia. |