Method: projects.test

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

string

Wymagany. W przypadku testów na source nazwa zasobu musi odnosić się do projektu: Format: projects/{project_id}

Treść żądania

Treść żądania zawiera dane o następującej strukturze:

Reprezentacja JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Pola
source

object ( Source )

Source do sprawdzenia pod kątem poprawności.

testSuite

object ( TestSuite )

Wbudowany pakiet TestSuite do wykonania w odniesieniu do Source .

Jeśli Source jest podane w trybie inline, przypadki testowe zostaną uruchomione tylko wtedy, gdy Source jest poprawne składniowo i semantycznie.

Treść odpowiedzi

Jeśli się powiedzie, treść odpowiedzi zawiera dane o następującej strukturze:

Odpowiedź dla FirebaseRulesService.TestRuleset .

Reprezentacja JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Pola
issues[]

object ( Issue )

Zagadnienia Source syntaktyczne i semantyczne o różnym nasileniu. Problemy z ważnością ERROR uniemożliwią wykonanie testów.

testResults[]

object ( TestResult )

Zbiór wyników testów, biorąc pod uwagę przypadki testowe w pakiecie TestSuite . Wyniki pojawią się w tej samej kolejności, w jakiej przypadki testowe pojawiają się w TestSuite .

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

object ( TestCase )

Zbiór przypadków testowych powiązanych z pakietem TestSuite .

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

enum ( Expectation )

Oczekiwanie testowe.

request

value ( Value format)

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:

Pole żądania Typ
uwierzytelnianie.uid string
token uwierzytelnienia map<string, string>
nagłówki map<string, string>
metoda string
parametry map<string, string>
ścieżka string
czas google.protobuf.Timestamp

Jeśli wartość żądania nie jest poprawnie sformułowana dla usługi, żądanie zostanie odrzucone jako nieprawidłowy argument.

resource

value ( Value format)

Opcjonalna wartość zasobu wyświetlana w pamięci trwałej przed spełnieniem żądania.

Typ zasobu zależy od wartości request.path .

functionMocks[]

object ( FunctionMock )

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

enum ( PathEncoding )

Określa, czy ścieżki (takie jak request.path) są kodowane i w jaki sposób.

expressionReportLevel

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

string

Nazwa funkcji.

Nazwa funkcji musi odpowiadać nazwie podanej w deklaracji usługi.

args[]

object ( Arg )

Lista wartości Arg do dopasowania. Kolejność podawania argumentów jest kolejnością, w jakiej muszą one wystąpić w wywołaniu funkcji.

result

object ( Result )

Próbny wynik wywołania funkcji.

Argument

Dopasowujące argumenty dla funkcji próbnej.

Reprezentacja 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.
}
Pola
type pola Unii. Obsługiwane wartości argumentów. type może być tylko jeden z poniższych:
exactValue

value ( Value format)

Argument dokładnie odpowiada podanej wartości.

anyValue

object

Argument pasuje do dowolnej podanej wartości.

Wynik

Możliwe wartości wyników z próbnego wywołania funkcji.

Reprezentacja 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.
}
Pola
type pola Unii. Obsługiwane wartości wyników. type może być tylko jeden z poniższych:
value

value ( Value format)

Wynikiem jest rzeczywista wartość. Typ wartości musi być zgodny z typem zadeklarowanym przez usługę.

undefined

object

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

object ( SourcePosition )

Pozycja zagadnienia w Source .

description

string

Krótki opis błędu.

severity

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

string

Nazwa File .

line

integer

Numer linii fragmentu źródłowego. oparty na 1.

column

integer

Pierwsza kolumna w wierszu źródłowym powiązana z fragmentem źródłowym.

currentOffset

integer

Pozycja początkowa względem początku pliku.

endOffset

integer

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

enum ( State )

Stan testu.

debugMessages[]

string

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

errorPosition

object ( SourcePosition )

Pozycja w Source , w której występuje główny błąd wykonania.

Ocena wyrażenia może spowodować błąd. Reguły są domyślnie odrzucane, więc oczekiwanie DENY w przypadku wygenerowania błędu jest prawidłowe. Jeśli wystąpi błąd DENY , zwracana jest pozycja SourcePosition .

Np. errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

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

visitedExpressions[]

object ( VisitedExpression )

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

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

Szczegółowy raport pośrednich stanów oceny znajduje się w polu expressionReports

expressionReports[]

object ( ExpressionReport )

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

string

Nazwa wywoływanej funkcji.

args[]

value ( Value format)

Argumenty dostarczone do funkcji.

Wyrażenie odwiedzone

Przechowuj pozycję i wynik dostępu dla wyrażenia odwiedzonego w regułach.

Reprezentacja JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Pola
sourcePosition

object ( SourcePosition )

Pozycja w Source , w którym odwiedzono wyrażenie.

value

value ( Value format)

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

object ( SourcePosition )

Pozycja wyrażenia w oryginalnym źródle reguł.

values[]

object ( ValueCount )

Wartości, które to wyrażenie ocenia po napotkaniu.

children[]

object ( ExpressionReport )

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

value ( Value format)

Wartość zwracana przez wyrażenie

count

integer

Liczba zwróconych wystąpień tego wyrażenia.