Method: projects.test

Testez Source pour l’exactitude syntaxique et sémantique. Les problèmes présents, le cas échéant, seront renvoyés à l'appelant avec une description, leur gravité et l'emplacement de la source.

La méthode de test peut être exécutée avec Source . Passer Source est utile pour tester de nouvelles règles unitaires.

Notez que les tests exécutés à l'aide de l'API REST utilisent des bases de données de production, des compartiments de stockage et des ressources associées. De tels tests peuvent entraîner des frais d'utilisation. Nous vous recommandons fortement d'utiliser la suite d'émulateurs locaux Firebase pour effectuer des tests de règles, car vous pouvez exécuter des tests sur des ressources hors production hors ligne sans frais d'utilisation.

Voici un exemple de Source qui permet aux utilisateurs de télécharger des images dans un compartiment portant leur identifiant utilisateur et correspondant aux métadonnées correctes :

Exemple

// 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/')
  }
}

Requête HTTP

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

L'URL utilise la syntaxe de transcodage gRPC .

Paramètres du chemin

Paramètres
name

string

Requis. Pour les tests sur source , le nom de la ressource doit faire référence au projet : Format : projects/{project_id}

Corps de la demande

Le corps de la requête contient des données avec la structure suivante :

Représentation JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Des champs
source

object ( Source )

Source à vérifier pour l'exactitude.

testSuite

object ( TestSuite )

Le TestSuite en ligne à exécuter sur le Source .

Lorsque Source est fournie en ligne, les cas de test ne seront exécutés que si la Source est syntaxiquement et sémantiquement valide.

Corps de réponse

En cas de succès, le corps de la réponse contient des données avec la structure suivante :

La réponse pour FirebaseRulesService.TestRuleset .

Représentation JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Des champs
issues[]

object ( Issue )

Problèmes Source syntaxiques et sémantiques de gravité variable. Les problèmes de gravité ERROR empêcheront l’exécution des tests.

testResults[]

object ( TestResult )

L'ensemble des résultats de test donnés aux cas de test dans TestSuite . Les résultats apparaîtront dans le même ordre que les cas de test dans TestSuite .

Portées des autorisations

Nécessite l'une des étendues OAuth suivantes :

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

Pour plus d'informations, consultez la Présentation de l'authentification .

Suite de tests

TestSuite est une collection d'instances TestCase qui valident l'exactitude logique des règles. La TestSuite peut être référencée en ligne dans un appel projects.test ou dans le cadre d'un objet Release en tant que vérification préalable à la publication.

Représentation JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Des champs
testCases[]

object ( TestCase )

Collection de cas de tests associés à la TestSuite .

Cas de test

Les messages TestCase fournissent le contexte de la demande et une attente quant à savoir si le contexte donné sera autorisé ou refusé. Les cas de test peuvent spécifier les request , resosurce et functionMocks pour simuler un appel de fonction à une fonction fournie par un service.

L'objet request représente le contexte présent au moment de la requête.

La resource est la valeur de la ressource cible (par exemple, les métadonnées d'un objet GCS ou d'un document Firestore) telle qu'elle apparaît dans le stockage persistant avant l'exécution de la requête.

Consultez également la documentation de référence associée pour Cloud Firestore ( requête , ressource ) et Cloud Storage pour Firebase ( requête , ressource ).

Représentation JSON
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Des champs
expectation

enum ( Expectation )

Attente du test.

request

value ( Value format)

Contexte de la demande.

Le format exact du contexte de demande dépend du service. Consultez la documentation du service approprié pour obtenir des informations sur les champs et les types pris en charge dans la demande. Au minimum, tous les services prennent en charge les champs et types suivants :

Champ de demande Taper
auth.uid string
jeton d'authentification map<string, string>
en-têtes map<string, string>
méthode string
paramètres map<string, string>
chemin string
temps google.protobuf.Timestamp

Si la valeur de la requête n'est pas bien formée pour le service, la requête sera rejetée comme argument non valide.

resource

value ( Value format)

Valeur de ressource facultative telle qu'elle apparaît dans le stockage persistant avant que la demande ne soit satisfaite.

Le type de ressource dépend de la valeur request.path .

functionMocks[]

object ( FunctionMock )

La fonction Règles facultatives se moque des fonctions définies par le service. Si elle n'est pas définie, toute fonction de règles définie par le service est censée renvoyer une erreur, qui peut ou non influencer le résultat du test.

pathEncoding

enum ( PathEncoding )

Spécifie si les chemins (tels que request.path) sont codés et comment.

expressionReportLevel

enum ( ExpressionReportLevel )

Spécifie ce qui doit être inclus dans la réponse.

Attente

L’ensemble des attentes du scénario de test pris en charge.

Énumérations
EXPECTATION_UNSPECIFIED Attente non précisée.
ALLOW Attendez-vous à un résultat autorisé.
DENY Attendez-vous à un résultat refusé.

FonctionMock

Définition de la fonction de règles simulées.

Les simulations doivent faire référence à une fonction déclarée par le service cible. Le type des arguments de la fonction et le résultat seront déduits au moment du test. Si les valeurs de l'argument ou du résultat ne sont pas compatibles avec la déclaration du type de fonction, la demande sera considérée comme invalide.

Plusieurs FunctionMock peuvent être fournis pour un nom de fonction donné à condition que les matchers Arg soient distincts. Il ne peut y avoir qu'une seule fonction pour une surcharge donnée où toutes les valeurs Arg sont Arg.any_value .

Voir aussi Fonctions dans le langage Règles de sécurité .

Représentation JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Des champs
function

string

Le nom de la fonction.

Le nom de la fonction doit correspondre à celui fourni par une déclaration de service.

args[]

object ( Arg )

La liste des valeurs Arg à faire correspondre. L'ordre dans lequel les arguments sont fournis est l'ordre dans lequel ils doivent apparaître dans l'invocation de la fonction.

result

object ( Result )

Le résultat fictif de l'appel de fonction.

Arg

Arg matchers pour la fonction mock.

Représentation 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.
}
Des champs
type de champ Union. Valeurs d’argument prises en charge. type ne peut être que l'un des éléments suivants :
exactValue

value ( Value format)

L’argument correspond exactement à la valeur fournie.

anyValue

object

L’argument correspond à n’importe quelle valeur fournie.

Résultat

Valeurs de résultat possibles de l’invocation simulée de la fonction.

Représentation 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.
}
Des champs
type de champ Union. Valeurs de résultat prises en charge. type ne peut être que l'un des éléments suivants :
value

value ( Value format)

Le résultat est une valeur réelle. Le type de la valeur doit correspondre à celui du type déclaré par le service.

undefined

object

Le résultat n'est pas défini, ce qui signifie qu'il n'a pas pu être calculé.

PathEncoding

Le type de codage de chemin utilisé.

Énumérations
ENCODING_UNSPECIFIED Aucun encodage n'a été spécifié. La valeur par défaut est le comportement "URL_ENCODED".
URL_ENCODED Traite les segments de chemin comme une URL codée mais avec des séparateurs non codés ("/"). Ceci est le comportement par défaut.
PLAIN Traite le chemin total comme non codé en URL, par exemple brut.

ExpressionReportLevel

Quantité de données à inclure dans la réponse du rapport d'expression.

Énumérations
LEVEL_UNSPECIFIED Aucun niveau n'a été précisé. La valeur par défaut est le comportement « AUCUN ».
NONE N’incluez aucune information supplémentaire.
FULL Inclure un rapport détaillé sur les expressions évaluées.
VISITED Incluez uniquement les expressions qui ont été visitées lors de l’évaluation.

Problème

Les problèmes incluent des avertissements, des erreurs et des avis de dépréciation.

Représentation JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Des champs
sourcePosition

object ( SourcePosition )

Position du problème dans la Source .

description

string

Brève description de l'erreur.

severity

enum ( Severity )

La gravité du problème.

PositionSource

Position dans le contenu Source , y compris sa ligne, son numéro de colonne et un index du File dans le message Source . Utilisé à des fins de débogage.

Représentation JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Des champs
fileName

string

Nom du File .

line

integer

Numéro de ligne du fragment source. basé sur 1.

column

integer

Première colonne de la ligne source associée au fragment source.

currentOffset

integer

Position de départ par rapport au début du fichier.

endOffset

integer

Position de fin par rapport au début du fichier.

Gravité

L’ensemble des gravités des problèmes.

Énumérations
SEVERITY_UNSPECIFIED Une gravité non précisée.
DEPRECATION Problème de dépréciation pour les instructions et les méthodes qui ne sont peut-être plus prises en charge ou maintenues.
WARNING Avertissements tels que : variables inutilisées.
ERROR Erreurs telles que : des accolades sans correspondance ou une redéfinition de variable.

Résultat du test

Message de résultat du test contenant l'état du test ainsi qu'une description et la position source des échecs du test.

Représentation JSON
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Des champs
state

enum ( State )

Etat de l'essai.

debugMessages[]

string

Messages de débogage liés aux problèmes d’exécution des tests rencontrés lors de l’évaluation.

Les messages de débogage peuvent être liés à trop ou trop peu d’appels de fonctions simulées ou à des erreurs d’exécution qui se produisent lors de l’évaluation.

Par exemple : Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

Position dans la Source où l'erreur d'exécution principale se produit.

L'évaluation d'une expression peut entraîner une erreur. Les règles sont refusées par défaut, donc une attente DENY lorsqu'une erreur est générée est valide. Lorsqu'il y a un DENY avec une erreur, la SourcePosition est renvoyée.

Par exemple errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

L'ensemble des appels de fonction effectués vers des méthodes définies par le service.

Les appels de fonction sont inclus dans l'ordre dans lequel ils sont rencontrés lors de l'évaluation, sont fournis pour les fonctions simulées et non simulées, et inclus dans la réponse quel que soit l' state du test.

visitedExpressions[]

object ( VisitedExpression )

L'ensemble des expressions d'autorisation visitées pour un test donné. Cela renvoie les positions et les résultats d'évaluation de toutes les expressions d'autorisation visitées qui étaient pertinentes pour le scénario de test, par exemple

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

Pour un rapport détaillé des états d'évaluation intermédiaires, voir le champ expressionReports

expressionReports[]

object ( ExpressionReport )

Le mappage de l'expression dans l'ensemble de règles AST aux valeurs auxquelles elles ont été évaluées. Partiellement imbriqué pour refléter la structure AST. Notez que ce champ suit en fait les expressions et non les déclarations d'autorisation contrairement au champ "visitedExpressions" ci-dessus. Les expressions littérales sont omises.

État

États valides pour le résultat du test.

Énumérations
STATE_UNSPECIFIED L’état du test n’est pas défini.
SUCCESS Le test est une réussite.
FAILURE Le test est un échec.

FonctionAppel

Représente un appel de fonction défini par le service qui a été invoqué lors de l'exécution du test.

Représentation JSON
{
  "function": string,
  "args": [
    value
  ]
}
Des champs
function

string

Nom de la fonction invoquée.

args[]

value ( Value format)

Les arguments fournis à la fonction.

Expression visitée

Stockez la position et accédez au résultat d’une expression visitée dans les règles.

Représentation JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Des champs
sourcePosition

object ( SourcePosition )

Position dans la Source où une expression a été visitée.

value

value ( Value format)

La valeur évaluée pour l'expression visitée, par exemple vrai/faux

RapportExpression

Décrit où dans un fichier se trouve une expression et comment elle a été évaluée au cours de son utilisation.

Représentation JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Des champs
sourcePosition

object ( SourcePosition )

Position de l'expression dans la source des règles originales.

values[]

object ( ValueCount )

Valeurs auxquelles cette expression est évaluée lorsqu’elle est rencontrée.

children[]

object ( ExpressionReport )

Sous-expressions

ValueCount

Tuple indiquant combien de fois une expression a été évaluée avec une ExpressionValue particulière.

Représentation JSON
{
  "value": value,
  "count": integer
}
Des champs
value

value ( Value format)

La valeur de retour de l'expression

count

integer

Nombre de fois que cette expression a été renvoyée.