Method: projects.test

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

string

Obligatorio. Para las pruebas de source, el nombre del recurso debe hacer referencia al proyecto: Formato: projects/{project_id}

Cuerpo de la solicitud

El cuerpo de la solicitud contiene datos con la siguiente estructura:

Representación JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Campos
source

object (Source)

Se debe verificar que Source sea correcto.

testSuite

object (TestSuite)

El TestSuite intercalado que se ejecutará en el Source.

Cuando se proporciona Source de forma intercalada, los casos de prueba solo se ejecutarán si Source es válido en términos sintácticos y semánticos.

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 (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Campos
issues[]

object (Issue)

Problemas Source sintácticos y semánticos de gravedad variable. Los problemas de gravedad ERROR impedirán que se ejecuten las pruebas.

testResults[]

object (TestResult)

Es el conjunto de resultados de prueba según los casos de prueba de TestSuite. Los resultados aparecerán en el mismo orden en que aparecen los casos de prueba en TestSuite.

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

object (TestCase)

Es una colección de casos de prueba asociados con TestSuite.

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

enum (Expectation)

Expectativa para la prueba.

request

value (Value format)

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:

Campo de la solicitud Tipo
auth.uid string
token de autenticación map<string, string>
encabezados map<string, string>
método string
params map<string, string>
ruta string
hora google.protobuf.Timestamp

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

value (Value format)

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 request.path.

functionMocks[]

object (FunctionMock)

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

enum (PathEncoding)

Especifica si las rutas de acceso (como request.path) están codificadas y cómo.

expressionReportLevel

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

string

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[]

object (Arg)

La lista de valores Arg con los que debe coincidir. El orden en que se proporcionan los argumentos es el orden en el que deben aparecer en la invocación de la función.

result

object (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 type can be only one of the following:
  "exactValue": value,
  "anyValue": {
    object
  }
  // End of list of possible types for union field type.
}
Campos
Campo de unión type. Valores de argumento admitidos. type puede ser solo uno de los siguientes:
exactValue

value (Value format)

El argumento coincide exactamente con el valor proporcionado.

anyValue

object

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 type can be only one of the following:
  "value": value,
  "undefined": {
    object
  }
  // End of list of possible types for union field type.
}
Campos
Campo de unión type. Valores de resultado admitidos. type puede ser solo uno de los siguientes:
value

value (Value format)

El resultado es un valor real. El tipo del valor debe coincidir con el tipo declarado por el servicio.

undefined

object

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

object (SourcePosition)

Posición del problema en Source.

description

string

Descripción breve del error.

severity

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

string

Es el nombre del File.

line

integer

Número de línea del fragmento de origen. 1.

column

integer

Primera columna en la línea de origen asociada con el fragmento de origen.

currentOffset

integer

Posición inicial relativa al principio del archivo.

endOffset

integer

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

enum (State)

Estado de la prueba.

debugMessages[]

string

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

errorPosition

object (SourcePosition)

Posición en Source, donde se produce el error de tiempo de ejecución principal.

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 DENY cuando se genera un error es válida. Cuando hay una DENY con un error, se muestra SourcePosition.

P. ej., errorPosition { line: 19 column: 37 }

functionCalls[]

object (FunctionCall)

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 state de prueba.

visitedExpressions[]

object (VisitedExpression)

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.,

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

Para obtener un informe detallado de los estados de evaluación intermedia, consulta el campo expressionReports

expressionReports[]

object (ExpressionReport)

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

string

Nombre de la función invocada

args[]

value (Value format)

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 (SourcePosition)
  },
  "value": value
}
Campos
sourcePosition

object (SourcePosition)

Posición en el Source en la que se visitó una expresión.

value

value (Value format)

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

object (SourcePosition)

Posición de la expresión en la fuente de las reglas originales.

values[]

object (ValueCount)

Valores que esta expresión evaluó cuando se encontró.

children[]

object (ExpressionReport)

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

value (Value format)

El valor que se muestra de la expresión

count

integer

La cantidad de veces que se mostró esa expresión.