- Solicitud HTTP
- Parámetros de ruta de acceso
- Cuerpo de la solicitud
- Cuerpo de la respuesta
- Alcances de autorización
- TestSuite
- Caso de prueba
- Expectativa
- FunctionMock
- Arg
- Resultado
- Codificación de rutas
- Nivel de informe de expresión
- Problema
- Posición de origen
- Gravedad
- Resultado de prueba
- Estado
- Llamada a función
- VisitedExpression
- Informe de expresiones
- Recuento de valores
- Pruébalo
Prueba Source
para verificar la corrección sintáctica y semántica. Los problemas presentes, si los hay, se mostrarán al emisor con una descripción, gravedad y ubicación de origen.
El método de prueba se puede ejecutar con Source
. Pasar Source
es útil para probar nuevas reglas de unidades.
Ten en cuenta que las pruebas que se ejecutan con la API de REST usan bases de datos de producción, buckets de almacenamiento y recursos rsesource relacionados. Esas pruebas pueden generar cargos de uso. Te recomendamos que uses Firebase Local Emulator Suite para realizar pruebas de reglas, ya que puedes ejecutar pruebas en recursos sin conexión y que no son de producción sin cargos por uso.
El siguiente es un ejemplo de Source
, que permite a los usuarios subir imágenes a un bucket con su ID de usuario y los metadatos correctos:
Ejemplo
// 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/')
}
}
Solicitud HTTP
POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test
La URL usa la sintaxis de la transcodificación gRPC.
Parámetros de ruta de acceso
Parámetros | |
---|---|
name |
Obligatorio. Para las pruebas de |
Cuerpo de la solicitud
El cuerpo de la solicitud contiene datos con la siguiente estructura:
Representación JSON | |
---|---|
{ "source": { object ( |
Campos | |
---|---|
source |
Se debe verificar que |
testSuite |
El Cuando se proporciona |
Cuerpo de la respuesta
Si se ejecuta de forma correcta, el cuerpo de la respuesta contiene datos con la siguiente estructura:
La respuesta para FirebaseRulesService.TestRuleset
.
Representación JSON | |
---|---|
{ "issues": [ { object ( |
Campos | |
---|---|
issues[] |
Problemas |
testResults[] |
Es el conjunto de resultados de prueba según los casos de prueba de |
Alcances de autorización
Se necesita uno de los siguientes alcances de OAuth:
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/firebase
https://www.googleapis.com/auth/firebase.readonly
Para obtener más información, consulta Descripción general de la autenticación.
Conjunto de pruebas
TestSuite
es una colección de instancias de TestCase
que validan la precisión lógica de las reglas. Se puede hacer referencia a TestSuite
en línea en una invocación de projects.test
o como parte de un objeto Release
como verificación previa al lanzamiento.
Representación JSON | |
---|---|
{
"testCases": [
{
object ( |
Campos | |
---|---|
testCases[] |
Es una colección de casos de prueba asociados con |
Caso de prueba
Los mensajes TestCase
proporcionan el contexto de la solicitud y una expectativa sobre si el contexto determinado se permitirá o rechazará. Los casos de prueba pueden especificar request
, resosurce
y functionMocks
para simular una llamada a una función proporcionada por un servicio.
El objeto request
representa el contexto presente en el momento de la solicitud.
resource
es el valor del recurso de destino (p.ej., los metadatos de un objeto de GCS o un documento de Firestore) tal como aparece en el almacenamiento persistente antes de que se ejecute la solicitud.
Consulta también la documentación de referencia relacionada de Cloud Firestore ( solicitud, recurso) y Cloud Storage para Firebase (solicitud, recurso).
Representación JSON | |
---|---|
{ "expectation": enum ( |
Campos | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
Expectativa para la prueba. |
||||||||||||||||
request |
Solicita contexto. El formato exacto del contexto de la solicitud depende del servicio. Consulta la documentación del servicio correspondiente para obtener información sobre los campos y tipos admitidos en la solicitud. Como mínimo, todos los servicios admiten los siguientes campos y tipos:
Si el valor de la solicitud no tiene el formato correcto para el servicio, esta se rechazará y se considerará un argumento no válido. |
||||||||||||||||
resource |
Es el valor del recurso opcional tal como aparece en el almacenamiento persistente antes de que se complete la solicitud. El tipo de recurso depende del valor |
||||||||||||||||
functionMocks[] |
La función de reglas opcionales simula ser para funciones definidas por servicios. Si no se establece, se espera que cualquier función de reglas definida por el servicio muestre un error, que puede o no influir en el resultado de la prueba. |
||||||||||||||||
pathEncoding |
Especifica si las rutas de acceso (como request.path) están codificadas y cómo. |
||||||||||||||||
expressionReportLevel |
Especifica qué se debe incluir en la respuesta. |
Expectativa
Es el conjunto de expectativas admitidas del caso de prueba.
Enums | |
---|---|
EXPECTATION_UNSPECIFIED |
Expectativa no especificada. |
ALLOW |
Espera un resultado permitido. |
DENY |
Espera un resultado denegado. |
FunctionMock.
Definición de la función de reglas de prueba.
Las simulaciones deben hacer referencia a una función declarada por el servicio de destino. El tipo de los argumentos de la función y el resultado se inferirán en el momento de la prueba. Si los valores arg o result no son compatibles con la declaración de tipo de función, la solicitud se considerará no válida.
Se puede proporcionar más de un FunctionMock
para un nombre de función determinado, siempre que los comparadores Arg
sean diferentes. Puede haber una sola función para una sobrecarga determinada en la que todos los valores Arg
son Arg.any_value
.
Consulta también Funciones en el lenguaje de las reglas de seguridad.
Representación JSON | |
---|---|
{ "function": string, "args": [ { object ( |
Campos | |
---|---|
function |
Es el nombre de la función. El nombre de la función debe coincidir con uno proporcionado por una declaración de servicio. |
args[] |
La lista de valores |
result |
Es el resultado simulado de la llamada a función. |
Arg
Comparadores de argumentos para la función simulada.
Representación JSON | |
---|---|
{ // Union field |
Campos | ||
---|---|---|
Campo de unión type . Valores de argumento admitidos. type puede ser solo uno de los siguientes: |
||
exactValue |
El argumento coincide exactamente con el valor proporcionado. |
|
anyValue |
El argumento coincide con cualquier valor proporcionado. |
Resultado
Valores posibles de los resultados de la invocación de prueba de la función.
Representación JSON | |
---|---|
{ // Union field |
Campos | ||
---|---|---|
Campo de unión type . Valores de resultado admitidos. type puede ser solo uno de los siguientes: |
||
value |
El resultado es un valor real. El tipo del valor debe coincidir con el tipo declarado por el servicio. |
|
undefined |
El resultado no está definido, lo que significa que no se pudo calcular. |
Codificación de rutas
El tipo de codificación de ruta utilizada.
Enums | |
---|---|
ENCODING_UNSPECIFIED |
No se especificó ninguna codificación. La configuración predeterminada es “URL_ENCODED”. el comportamiento de los usuarios. |
URL_ENCODED |
Trata los segmentos de ruta de acceso como codificados en la URL, pero con separadores no codificados ("/"). Este es el comportamiento predeterminado. |
PLAIN |
Trata la ruta de acceso total como una URL codificada, p.ej., sin procesar. |
Niveldeinforme de expresión
La cantidad de datos que se incluirán en la respuesta del informe de expresiones.
Enums | |
---|---|
LEVEL_UNSPECIFIED |
No se especificó ningún nivel. La configuración predeterminada es “NONE”. el comportamiento de los usuarios. |
NONE |
No incluyas información adicional. |
FULL |
Incluir informes detallados sobre las expresiones evaluadas. |
VISITED |
Solo incluye las expresiones que se visitaron durante la evaluación. |
Problema
Los problemas incluyen advertencias, errores y avisos de baja.
Representación JSON | |
---|---|
{ "sourcePosition": { object ( |
Campos | |
---|---|
sourcePosition |
Posición del problema en |
description |
Descripción breve del error. |
severity |
La gravedad del problema. |
Posición de origen
Posición en el contenido de Source
, incluida su línea, el número de columna y un índice de File
en el mensaje Source
Se usa para fines de depuración.
Representación JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Campos | |
---|---|
fileName |
Es el nombre del |
line |
Número de línea del fragmento de origen. 1. |
column |
Primera columna en la línea de origen asociada con el fragmento de origen. |
currentOffset |
Posición inicial relativa al principio del archivo. |
endOffset |
Posición final relativa al principio del archivo. |
Gravedad
El conjunto de gravedad del problema.
Enums | |
---|---|
SEVERITY_UNSPECIFIED |
Una gravedad no especificada. |
DEPRECATION |
Problema de baja de las declaraciones y los métodos que pueden no ser compatibles ni mantenidos. |
WARNING |
Hay advertencias como variables sin usar. |
ERROR |
Errores como llaves no coincidentes o redefinición de variables |
Resultado de prueba
Mensaje del resultado de la prueba que contiene el estado de la prueba, así como una descripción y la posición de la fuente para las pruebas fallidas.
Representación JSON | |
---|---|
{ "state": enum ( |
Campos | |
---|---|
state |
Estado de la prueba. |
debugMessages[] |
Mensajes de depuración relacionados con problemas de ejecución de pruebas detectados durante la evaluación. Los mensajes de depuración pueden estar relacionados con demasiadas o muy pocas invocaciones de simulaciones de funciones o con errores de tiempo de ejecución que ocurren durante la evaluación. Por ejemplo: |
errorPosition |
Posición en La evaluación de una expresión puede dar como resultado un error. Las reglas se rechazan de forma predeterminada, por lo que la expectativa P. ej., |
functionCalls[] |
Es el conjunto de llamadas a funciones realizadas a métodos definidos por servicios. Las llamadas a función se incluyen en el orden en que se encuentran durante la evaluación, se proporcionan para las funciones simuladas y no simuladas, y se incluyen en la respuesta, independientemente de la |
visitedExpressions[] |
Es el conjunto de expresiones de permisos visitadas para una prueba determinada. Esto muestra las posiciones y los resultados de la evaluación de todas las expresiones de permisos visitadas que fueron relevantes para el caso de prueba, p.ej.,
Para obtener un informe detallado de los estados de evaluación intermedia, consulta el campo |
expressionReports[] |
La asignación de la expresión en el conjunto de reglas AST a los valores con los que se evaluaron. Anidado parcialmente para duplicar la estructura de AST. Ten en cuenta que este campo, en realidad, hace un seguimiento de las expresiones y no de las declaraciones de permisos, a diferencia de "visitedExpressions". arriba. Se omiten las expresiones literales. |
Estado
Estados válidos para el resultado de la prueba.
Enums | |
---|---|
STATE_UNSPECIFIED |
No se estableció el estado de la prueba. |
SUCCESS |
La prueba es un éxito. |
FAILURE |
La prueba es un error. |
FunctionCall
Representa una llamada a función definida por el servicio que se invocó durante la ejecución de la prueba.
Representación JSON | |
---|---|
{ "function": string, "args": [ value ] } |
Campos | |
---|---|
function |
Nombre de la función invocada |
args[] |
Los argumentos que se proporcionaron a la función. |
VisitedExpression
Almacena la posición y el resultado de acceso de una expresión visitada en las reglas.
Representación JSON | |
---|---|
{
"sourcePosition": {
object ( |
Campos | |
---|---|
sourcePosition |
Posición en el |
value |
El valor evaluado para la expresión visitada, p.ej., verdadero/falso |
Informe de expresiones
Describe en qué parte de un archivo se encuentra una expresión y qué se evaluó durante su uso.
Representación JSON | |
---|---|
{ "sourcePosition": { object ( |
Campos | |
---|---|
sourcePosition |
Posición de la expresión en la fuente de las reglas originales. |
values[] |
Valores que esta expresión evaluó cuando se encontró. |
children[] |
Subexpresiones |
Recuento de valores
Tupla que indica cuántas veces se evaluó una expresión como un ExpressionValue en particular.
Representación JSON | |
---|---|
{ "value": value, "count": integer } |
Campos | |
---|---|
value |
El valor que se muestra de la expresión |
count |
La cantidad de veces que se mostró esa expresión. |