Method: projects.test

Source auf syntaktische und semantische Korrektheit. Eventuell vorhandene Probleme werden mit einer Beschreibung, dem Schweregrad und dem Ursprungsort an den Anrufer zurückgesendet.

Die Testmethode kann mit Source ausgeführt werden. Die Übergabe Source ist nützlich für Unit-Tests neuer Regeln.

Beachten Sie, dass Tests, die mit der REST-API ausgeführt werden, Produktionsdatenbanken, Speicher-Buckets und zugehörige Ressourcen verwenden. Bei solchen Tests können Nutzungsgebühren anfallen. Wir empfehlen Ihnen dringend, die Firebase Local Emulator Suite zum Durchführen von Regeltests zu verwenden, da Sie Tests auf Offline-, Nicht-Produktionsressourcen ohne Nutzungsgebühren ausführen können.

Das Folgende ist ein Beispiel für Source , die es Benutzern ermöglicht, Bilder in einen Bucket hochzuladen, der ihre Benutzer-ID trägt und mit den richtigen Metadaten übereinstimmt:

Beispiel

// 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-Anfrage

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

Die URL verwendet die gRPC-Transcoding -Syntax.

Pfadparameter

Parameter
name

string

Erforderlich. Für Tests gegen source muss sich der Ressourcenname auf das Projekt beziehen: Format: projects/{project_id}

Anforderungstext

Der Anfragetext enthält Daten mit folgender Struktur:

JSON-Darstellung
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Felder
source

object ( Source )

Source auf Richtigkeit prüfen.

testSuite

object ( TestSuite )

Die Inline TestSuite zur Ausführung gegen die Source .

Wenn Source inline bereitgestellt wird, werden die Testfälle nur ausgeführt, wenn die Source syntaktisch und semantisch gültig ist.

Antwortkörper

Bei Erfolg enthält der Antworttext Daten mit der folgenden Struktur:

Die Antwort für FirebaseRulesService.TestRuleset .

JSON-Darstellung
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Felder
issues[]

object ( Issue )

Syntaktische und semantische Source unterschiedlicher Schwere. Probleme mit dem Schweregrad ERROR verhindern die Ausführung von Tests.

testResults[]

object ( TestResult )

Der Satz von Testergebnissen anhand der Testfälle in der TestSuite . Die Ergebnisse werden in derselben Reihenfolge angezeigt, in der die Testfälle in der TestSuite angezeigt werden.

Autorisierungsbereiche

Erfordert einen der folgenden OAuth-Bereiche:

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

Weitere Informationen finden Sie in der Authentifizierungsübersicht .

TestSuite

TestSuite ist eine Sammlung von TestCase Instanzen, die die logische Richtigkeit von Regeln validieren. Auf die TestSuite kann inline innerhalb eines projects.test Aufrufs oder als Teil eines Release Objekts als Vorabprüfung verwiesen werden.

JSON-Darstellung
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Felder
testCases[]

object ( TestCase )

Sammlung von Testfällen, die der TestSuite zugeordnet sind.

Testfall

TestCase Nachrichten stellen den Anforderungskontext und eine Erwartung dar, ob der angegebene Kontext zugelassen oder abgelehnt wird. In Testfällen können request , resosurce und functionMocks angegeben werden, um einen Funktionsaufruf an eine vom Dienst bereitgestellte Funktion zu verspotten.

Das request stellt den zum Zeitpunkt der Anforderung vorhandenen Kontext dar.

Die resource ist der Wert der Zielressource (z. B. Metadaten eines GCS-Objekts oder Firestore-Dokuments), wie er im persistenten Speicher erscheint, bevor die Anforderung ausgeführt wird.

Siehe auch die zugehörige Referenzdokumentation für Cloud Firestore ( Anfrage , Ressource ) und Cloud Storage für Firebase ( Anfrage , Ressource ).

JSON-Darstellung
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Felder
expectation

enum ( Expectation )

Testerwartung.

request

value ( Value format)

Kontext anfordern.

Das genaue Format des Anforderungskontexts ist dienstabhängig. Informationen zu den unterstützten Feldern und Typen in der Anfrage finden Sie in der entsprechenden Servicedokumentation. Alle Dienste unterstützen mindestens die folgenden Felder und Typen:

Anfragefeld Typ
auth.uid string
Authentifizierungstoken map<string, string>
Kopfzeilen map<string, string>
Methode string
Parameter map<string, string>
Weg string
Zeit google.protobuf.Timestamp

Wenn der Anforderungswert für den Dienst nicht wohlgeformt ist, wird die Anforderung als ungültiges Argument abgelehnt.

resource

value ( Value format)

Optionaler Ressourcenwert, wie er im persistenten Speicher angezeigt wird, bevor die Anforderung erfüllt wird.

Der Ressourcentyp hängt vom Wert request.path ab.

functionMocks[]

object ( FunctionMock )

Optionale Rules-Funktionsmocks für servicedefinierte Funktionen. Wenn diese Option nicht festgelegt ist, wird von jeder vom Dienst definierten Regelfunktion erwartet, dass sie einen Fehler zurückgibt, der das Testergebnis beeinflussen kann oder auch nicht.

pathEncoding

enum ( PathEncoding )

Gibt an, ob und wie Pfade (z. B. request.path) codiert werden.

expressionReportLevel

enum ( ExpressionReportLevel )

Gibt an, was in der Antwort enthalten sein soll.

Erwartung

Der Satz unterstützter Testfallerwartungen.

Aufzählungen
EXPECTATION_UNSPECIFIED Unbestimmte Erwartung.
ALLOW Erwarten Sie ein zulässiges Ergebnis.
DENY Erwarten Sie ein abgelehntes Ergebnis.

FunctionMock

Definition der Mock-Rules-Funktion.

Mocks müssen auf eine vom Zieldienst deklarierte Funktion verweisen. Der Typ der Funktionsargumente und das Ergebnis werden zum Zeitpunkt des Tests abgeleitet. Wenn entweder die arg- oder result-Werte nicht mit der Funktionstypdeklaration kompatibel sind, wird die Anfrage als ungültig betrachtet.

Für einen bestimmten Funktionsnamen kann mehr als ein FunctionMock bereitgestellt werden, solange die Arg Matcher unterschiedlich sind. Für eine bestimmte Überladung kann es nur eine Funktion geben, bei der alle Arg Werte Arg.any_value sind.

Siehe auch Funktionen in der Sprache der Sicherheitsregeln .

JSON-Darstellung
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Felder
function

string

Der Name der Funktion.

Der Funktionsname muss mit einem durch eine Dienstdeklaration bereitgestellten Namen übereinstimmen.

args[]

object ( Arg )

Die Liste der abzugleichenden Arg Werte. Die Reihenfolge, in der die Argumente bereitgestellt werden, ist die Reihenfolge, in der sie im Funktionsaufruf erscheinen müssen.

result

object ( Result )

Das Scheinergebnis des Funktionsaufrufs.

Arg

Arg-Matcher für die Mock-Funktion.

JSON-Darstellung
{

  // Union field type can be only one of the following:
  "exactValue": value,
  "anyValue": {
    object
  }
  // End of list of possible types for union field type.
}
Felder
Union- type . Unterstützte Argumentwerte. type kann nur einer der folgenden sein:
exactValue

value ( Value format)

Das Argument stimmt genau mit dem angegebenen Wert überein.

anyValue

object

Das Argument stimmt mit jedem angegebenen Wert überein.

Ergebnis

Mögliche Ergebniswerte des Funktions-Mock-Aufrufs.

JSON-Darstellung
{

  // Union field type can be only one of the following:
  "value": value,
  "undefined": {
    object
  }
  // End of list of possible types for union field type.
}
Felder
Union- type . Unterstützte Ergebniswerte. type kann nur einer der folgenden sein:
value

value ( Value format)

Das Ergebnis ist ein tatsächlicher Wert. Der Typ des Werts muss mit dem vom Dienst deklarierten Typ übereinstimmen.

undefined

object

Das Ergebnis ist undefiniert, was bedeutet, dass das Ergebnis nicht berechnet werden konnte.

Pfadkodierung

Der Typ der verwendeten Pfadkodierung.

Aufzählungen
ENCODING_UNSPECIFIED Es wurde keine Kodierung angegeben. Standardmäßig wird das Verhalten „URL_ENCODED“ verwendet.
URL_ENCODED Behandelt Pfadsegmente als URL-codiert, jedoch mit nicht codierten Trennzeichen („/“). Dies ist das Standardverhalten.
PLAIN Behandelt den gesamten Pfad als nicht URL-codiert, z. B. als Rohdatei.

ExpressionReportLevel

Die Datenmenge, die in die Antwort des Ausdrucksberichts einbezogen werden soll.

Aufzählungen
LEVEL_UNSPECIFIED Es wurde kein Level angegeben. Standardmäßig ist das Verhalten „NONE“.
NONE Fügen Sie keine zusätzlichen Informationen hinzu.
FULL Fügen Sie detaillierte Berichte zu ausgewerteten Ausdrücken hinzu.
VISITED Schließen Sie nur die Ausdrücke ein, die während der Auswertung besucht wurden.

Ausgabe

Zu den Problemen gehören Warnungen, Fehler und veraltete Hinweise.

JSON-Darstellung
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Felder
sourcePosition

object ( SourcePosition )

Position des Problems in der Source .

description

string

Kurze Fehlerbeschreibung.

severity

enum ( Severity )

Die Schwere des Problems.

Quellposition

Position im Source , einschließlich seiner Zeile, Spaltennummer und einem Index der File in der Source . Wird für Debug-Zwecke verwendet.

JSON-Darstellung
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Felder
fileName

string

Name der File .

line

integer

Zeilennummer des Quellfragments. 1-basiert.

column

integer

Erste Spalte in der Quellzeile, die dem Quellfragment zugeordnet ist.

currentOffset

integer

Startposition relativ zum Anfang der Datei.

endOffset

integer

Endposition relativ zum Anfang der Datei.

Schwere

Der Satz von Problemschweregraden.

Aufzählungen
SEVERITY_UNSPECIFIED Ein nicht näher bezeichneter Schweregrad.
DEPRECATION Veraltungsproblem für Anweisungen und Methoden, die möglicherweise nicht mehr unterstützt oder gewartet werden.
WARNING Warnungen wie: nicht verwendete Variablen.
ERROR Fehler wie: nicht übereinstimmende geschweifte Klammern oder Neudefinition von Variablen.

Testergebnis

Testergebnisnachricht, die den Status des Tests sowie eine Beschreibung und Quellenposition für Testfehler enthält.

JSON-Darstellung
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Felder
state

enum ( State )

Stand des Tests.

debugMessages[]

string

Debug-Meldungen im Zusammenhang mit Testausführungsproblemen, die während der Auswertung aufgetreten sind.

Debug-Meldungen können mit zu vielen oder zu wenigen Aufrufen von Funktionsmocks oder mit Laufzeitfehlern zusammenhängen, die während der Auswertung auftreten.

Beispiel: Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

Position in der Source , an der der Hauptlaufzeitfehler auftritt.

Die Auswertung eines Ausdrucks kann zu einem Fehler führen. Regeln verweigern standardmäßig, daher ist eine DENY Erwartung gültig, wenn ein Fehler generiert wird. Wenn ein DENY mit einem Fehler vorliegt, wird die SourcePosition zurückgegeben.

Beispiel: errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

Der Satz von Funktionsaufrufen, die an dienstdefinierte Methoden erfolgen.

Funktionsaufrufe werden in der Reihenfolge eingefügt, in der sie während der Auswertung auftreten, werden sowohl für simulierte als auch nicht simulierte Funktionen bereitgestellt und unabhängig vom state in die Antwort einbezogen.

visitedExpressions[]

object ( VisitedExpression )

Der Satz der besuchten Berechtigungsausdrücke für einen bestimmten Test. Dies gibt die Positionen und Auswertungsergebnisse aller besuchten Berechtigungsausdrücke zurück, die für den Testfall relevant waren, z

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

Einen detaillierten Bericht der Zwischenauswertungszustände finden Sie im Feld expressionReports

expressionReports[]

object ( ExpressionReport )

Die Zuordnung vom Ausdruck im Regelsatz-AST zu den Werten, anhand derer sie ausgewertet wurden. Teilweise verschachtelt, um die AST-Struktur widerzuspiegeln. Beachten Sie, dass dieses Feld im Gegensatz zum Feld „visitedExpressions“ oben tatsächlich Ausdrücke und keine Berechtigungsanweisungen verfolgt. Wörtliche Ausdrücke werden weggelassen.

Zustand

Gültige Zustände für das Testergebnis.

Aufzählungen
STATE_UNSPECIFIED Der Teststatus ist nicht festgelegt.
SUCCESS Test ist ein Erfolg.
FAILURE Der Test ist ein Fehlschlag.

Funktionsaufruf

Stellt einen dienstdefinierten Funktionsaufruf dar, der während der Testausführung aufgerufen wurde.

JSON-Darstellung
{
  "function": string,
  "args": [
    value
  ]
}
Felder
function

string

Name der aufgerufenen Funktion.

args[]

value ( Value format)

Die Argumente, die der Funktion bereitgestellt wurden.

VisitedExpression

Speichern Sie die Position und das Zugriffsergebnis für einen in Regeln besuchten Ausdruck.

JSON-Darstellung
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Felder
sourcePosition

object ( SourcePosition )

Position in der Source , an der ein Ausdruck aufgerufen wurde.

value

value ( Value format)

Der ausgewertete Wert für den besuchten Ausdruck, z. B. wahr/falsch

Ausdrucksbericht

Beschreibt, wo in einer Datei ein Ausdruck gefunden wird und wie er im Laufe seiner Verwendung ausgewertet wurde.

JSON-Darstellung
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Felder
sourcePosition

object ( SourcePosition )

Position des Ausdrucks in der ursprünglichen Regelquelle.

values[]

object ( ValueCount )

Werte, zu denen dieser Ausdruck ausgewertet wird, wenn er auftritt.

children[]

object ( ExpressionReport )

Unterausdrücke

ValueCount

Tupel dafür, wie oft ein Ausdruck zu einem bestimmten ExpressionValue ausgewertet wurde.

JSON-Darstellung
{
  "value": value,
  "count": integer
}
Felder
value

value ( Value format)

Der Rückgabewert des Ausdrucks

count

integer

Die Häufigkeit, mit der dieser Ausdruck zurückgegeben wurde.