Method: projects.test

Source de prueba para la corrección sintáctica y semántica. Los problemas presentes, si los hay, se devolverán a la persona que llama con una descripción, gravedad y ubicación del origen.

El método de prueba se puede ejecutar con Source . Pasar Source es útil para realizar pruebas unitarias de nuevas reglas.

Tenga en cuenta que las pruebas ejecutadas con la API REST utilizan bases de datos de producción, depósitos de almacenamiento y recursos relacionados. Estas pruebas pueden generar cargos de uso. Le recomendamos encarecidamente que utilice Firebase Local Emulator Suite para realizar pruebas de reglas, ya que puede ejecutar pruebas en recursos fuera de línea y que no son de producción sin cargos por uso.

El siguiente es un ejemplo de Source que permite a los usuarios cargar imágenes en un depósito con su identificación de usuario y que coincida con 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 utiliza la sintaxis de transcodificación gRPC .

Parámetros de ruta

Parámetros
name

string

Requerido. Para pruebas con 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 )

Source a verificar para ver si es correcta.

testSuite

object ( TestSuite )

El TestSuite en línea para ejecutar contra el Source .

Cuando Source se proporciona en línea, los casos de prueba solo se ejecutarán si la Source es sintáctica y semánticamente válida.

Cuerpo de respuesta

Si tiene éxito, 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áctico y semántico de diversa gravedad. Los problemas de gravedad ERROR impedirán la ejecución de las pruebas.

testResults[]

object ( TestResult )

El conjunto de resultados de prueba dados los casos de prueba en TestSuite . Los resultados aparecerán en el mismo orden en que aparecen los casos de prueba en TestSuite .

Alcances de autorización

Requiere uno de los siguientes ámbitos 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, consulte Descripción general de la autenticación .

Banco de pruebas

TestSuite es una colección de instancias TestCase que validan la corrección lógica de las reglas. Se puede hacer referencia a TestSuite en línea dentro de una invocación projects.test o como parte de un objeto Release como una verificación previa al lanzamiento.

Representación JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Campos
testCases[]

object ( TestCase )

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 dado será permitido o denegado. Los casos de prueba pueden especificar request , resosurce y functionMocks para simular una llamada de función a una función proporcionada por el servicio.

El objeto request representa el contexto presente en el momento de la solicitud.

El resource es el valor del recurso de destino (por ejemplo, metadatos de un objeto GCS o documento de Firestore) tal como aparece en el almacenamiento persistente antes de que se ejecute la solicitud.

Consulte también la documentación de referencia relacionada para 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 de prueba.

request

value ( Value format)

Solicitar contexto.

El formato exacto del contexto de solicitud depende del servicio. Consulte la documentación de 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 solicitud Tipo
auth.uid string
token de autenticación map<string, string>
encabezados map<string, string>
método string
parámetros map<string, string>
camino string
tiempo google.protobuf.Timestamp

Si el valor de la solicitud no está bien formado para el servicio, la solicitud se rechazará como argumento no válido.

resource

value ( Value format)

Valor de recurso opcional tal como aparece en el almacenamiento persistente antes de que se cumpla la solicitud.

El tipo de recurso depende del valor request.path .

functionMocks[]

object ( FunctionMock )

La función de reglas opcionales se simula para funciones definidas por el servicio. Si no se establece, se espera que cualquier función de reglas definidas por el servicio devuelva un error, que puede influir o no en el resultado de la prueba.

pathEncoding

enum ( PathEncoding )

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

expressionReportLevel

enum ( ExpressionReportLevel )

Especifica lo que se debe incluir en la respuesta.

Expectativa

El conjunto de expectativas de casos de prueba admitidos.

Enumeraciones
EXPECTATION_UNSPECIFIED Expectativa no especificada.
ALLOW Espere un resultado permitido.
DENY Espere un resultado denegado.

Función simulada

Definición de función de reglas simuladas.

Los simulacros deben hacer referencia a una función declarada por el servicio de destino. El tipo de argumentos y resultados de la función se inferirán en el momento de la prueba. Si los valores arg o result no son compatibles con la declaración del tipo de función, la solicitud se considerará inválida.

Se puede proporcionar más de un FunctionMock para un nombre de función determinado siempre que los comparadores Arg sean distintos. Puede haber solo una función para una sobrecarga determinada donde todos los valores Arg sean Arg.any_value .

Ver también Funciones en el lenguaje Reglas de Seguridad .

Representación JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Campos
function

string

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 de Arg que deben coincidir. El orden en que se proporcionan los argumentos es el orden en que deben aparecer en la invocación de la función.

result

object ( Result )

El resultado simulado de la llamada a la 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
type de campo de unión. Valores de argumentos admitidos. type puede ser sólo 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

Posibles valores de resultado de la invocación simulada de 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
type de campo de unión. Valores de resultados admitidos. type puede ser sólo uno de los siguientes:
value

value ( Value format)

El resultado es un valor real. El tipo de 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 el resultado.

Codificación de ruta

El tipo de codificación de ruta utilizada.

Enumeraciones
ENCODING_UNSPECIFIED No se ha especificado ninguna codificación. El comportamiento predeterminado es "URL_ENCODED".
URL_ENCODED Trata los segmentos de ruta como URL codificados pero con separadores no codificados ("/"). Este es el comportamiento predeterminado.
PLAIN Trata la ruta total como sin codificación URL, por ejemplo, sin formato.

Nivel de informe de expresión

La cantidad de datos que se incluirán en la respuesta del informe de expresión.

Enumeraciones
LEVEL_UNSPECIFIED No se ha especificado ningún nivel. El comportamiento predeterminado es "NINGUNO".
NONE No incluya ninguna información adicional.
FULL Incluir informes detallados sobre las expresiones evaluadas.
VISITED Incluya únicamente las expresiones que fueron visitadas durante la evaluación.

Asunto

Los problemas incluyen advertencias, errores y avisos de obsolescencia.

Representación JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Campos
sourcePosition

object ( SourcePosition )

Posición del tema en la Source .

description

string

Breve descripción del error.

severity

enum ( Severity )

La gravedad del problema.

Posición de origen

Posición en el contenido Source , incluida su línea, número de columna y un índice del File en el mensaje Source . Se utiliza con fines de depuración.

Representación JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Campos
fileName

string

Nombre del File .

line

integer

Número de línea del fragmento fuente. Basado en 1.

column

integer

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

currentOffset

integer

Posición inicial relativa al comienzo del archivo.

endOffset

integer

Posición final relativa al comienzo del archivo.

Gravedad

El conjunto de gravedades de problemas.

Enumeraciones
SEVERITY_UNSPECIFIED Una gravedad no especificada.
DEPRECATION Problema de desaprobación de declaraciones y métodos que quizás ya no sean compatibles o mantenidos.
WARNING Advertencias como: variables no utilizadas.
ERROR Errores como: llaves no coincidentes o redefinición de variables.

Resultado de la prueba

Mensaje de resultado de la prueba que contiene el estado de la prueba, así como una descripción y la posición de origen de las fallas de la prueba.

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 encontrados durante la evaluación.

Los mensajes de depuración pueden estar relacionados con demasiadas o muy pocas invocaciones de simulacros 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 la Source donde ocurre el error principal de tiempo de ejecución.

La evaluación de una expresión puede dar como resultado un error. Las reglas son denegadas de forma predeterminada, por lo que una expectativa DENY cuando se genera un error es válida. Cuando hay un DENY con un error, se devuelve SourcePosition .

Por ejemplo, errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

El conjunto de llamadas a funciones realizadas a métodos definidos por el servicio.

Las llamadas a funciones se incluyen en el orden en que se encuentran durante la evaluación, se proporcionan para funciones simuladas y no simuladas y se incluyen en la respuesta independientemente del state de la prueba.

visitedExpressions[]

object ( VisitedExpression )

El conjunto de expresiones de permiso visitadas para una prueba determinada. Esto devuelve las posiciones y los resultados de la evaluación de todas las expresiones de permiso visitadas que eran relevantes para el caso de prueba, por ejemplo

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

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

expressionReports[]

object ( ExpressionReport )

El mapeo de la expresión en el conjunto de reglas AST a los valores con los que fueron evaluados. Parcialmente anidado para reflejar la estructura AST. Tenga en cuenta que este campo en realidad rastrea expresiones y no declaraciones de permiso, a diferencia del campo "visitedExpressions" anterior. Se omiten las expresiones literales.

Estado

Estados válidos para el resultado de la prueba.

Enumeraciones
STATE_UNSPECIFIED El estado de prueba no está establecido.
SUCCESS La prueba es un éxito.
FAILURE La prueba es un fracaso.

Llamada de función

Representa una llamada de 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.

VisitadoExpresión

Almacene la posición y acceda al resultado de una expresión visitada en reglas.

Representación JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Campos
sourcePosition

object ( SourcePosition )

Posición en la Source donde se visitó una expresión.

value

value ( Value format)

El valor evaluado para la expresión visitada, por ejemplo, verdadero/falso.

Informe de expresión

Describe en qué parte de un archivo se encuentra una expresión y en 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 expresión en la fuente de reglas original.

values[]

object ( ValueCount )

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

children[]

object ( ExpressionReport )

Subexpresiones

ValorContar

Tupla de cuántas veces se evaluó una expresión en un ExpressionValue particular.

Representación JSON
{
  "value": value,
  "count": integer
}
Campos
value

value ( Value format)

El valor de retorno de la expresión.

count

integer

El número de veces que regresó esa expresión.