Method: projects.test

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

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

Tenga en cuenta que las pruebas que se ejecutan con la API REST utilizan bases de datos de producción, depósitos de almacenamiento y recursos relacionados. Dichas pruebas pueden generar cargos por uso. Te recomendamos encarecidamente que uses Firebase Local Emulator Suite para realizar pruebas de reglas, ya que puedes ejecutar pruebas en recursos que no son de producción y sin conexión sin cargos por uso.

El siguiente es un ejemplo de Source que permite a los usuarios subir imágenes a un depósito con su identificación de usuario y que coinciden 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 las pruebas contra la 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 que se comprobará para verificar su exactitud.

testSuite

object ( TestSuite )

TestSuite línea para ejecutar contra la Source .

Cuando la 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 de Source sintáctico y semántico de diversa gravedad. Los problemas de gravedad de ERROR evitará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 .

Ámbitos 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 la descripción general de la autenticación .

Banco de pruebas

TestSuite es una colección de instancias de TestCase que validan la corrección lógica de las reglas. Se puede hacer referencia al TestSuite en línea dentro de una invocación de projects.test o como parte de un objeto Release como una comprobació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

TestCase mensajes de TestCase proporcionan el contexto de la solicitud y una expectativa sobre si el contexto dado se permitirá o denegará. Los casos de prueba pueden especificar la request , el resosurce y la functionMocks resosurce una llamada de función a una función proporcionada por el servicio.

El objeto de 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 Firestore) tal como aparece en el almacenamiento persistente antes de que se ejecute la solicitud.

Consulta 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 )

Prueba de expectativa.

request

value ( Value format)

Solicitar contexto.

El formato exacto del contexto de la 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
auth.token map<string, string>
encabezados map<string, string>
método string
params map<string, string>
camino string
hora google.protobuf.Timestamp

Si el valor de la solicitud no está bien formado para el servicio, la solicitud se rechazará como un 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 de request.path .

functionMocks[]

object ( FunctionMock )

La función de reglas opcionales simula las 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 o no influir 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 qué debe incluirse 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ónMock

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 los argumentos de la función y el resultado se deducirán en el momento de la prueba. Si el argumento o los valores de resultado 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 dado siempre que los comparadores Arg sean distintos. Puede haber solo una función para una sobrecarga dada donde todos los valores de Arg son Arg.any_value .

Consulte 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 el que se proporcionan los argumentos es el orden en el 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

Coincidentes de argumentos para la función de simulación.

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 campo de unión. 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

Posibles valores de resultado de la invocación simulada 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
type campo de unión. 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 del tipo declarado por el servicio.

undefined

object

El resultado no está definido, lo que significa que no se pudo calcular.

PathEncoding

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 no codificada en URL, por ejemplo, sin formato.

ExpressionReportLevel

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 información adicional.
FULL Incluya 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 problema en la Source .

description

string

Breve descripción del error.

severity

enum ( Severity )

La gravedad del problema.

SourcePosition

Posición en el contenido de Source , incluida su línea, número de columna y un índice del File en el mensaje de 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 de origen. 1 basado.

column

integer

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

currentOffset

integer

Posición inicial relativa al principio del archivo.

endOffset

integer

Posición final relativa al comienzo del archivo.

Gravedad

El conjunto de gravedad del problema.

Enumeraciones
SEVERITY_UNSPECIFIED Una gravedad no especificada.
DEPRECATION Problema de obsolescencia para declaraciones y métodos que ya no pueden ser compatibles o mantenidos.
WARNING Advertencias como: variables no utilizadas.
ERROR Errores como: llaves inigualables 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

Depurar mensajes 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 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 la Source donde se produce el error de tiempo de ejecución principal.

La evaluación de una expresión puede generar un error. Las reglas se niegan 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 permisos visitadas para una prueba determinada. Esto devuelve las posiciones y los resultados de la evaluación de todas las expresiones de permiso 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, 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 se evaluaron. Parcialmente anidado para reflejar la estructura AST. Tenga en cuenta que este campo en realidad está rastreando expresiones y no declaraciones de permisos en contraste con el campo "VisitExpressions" anterior. Se omiten las expresiones literales.

Expresar

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.

VisitedExpression

Almacene la posición y el resultado de acceso para 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

ExpressionReport

Describe en qué parte de un archivo se encuentra una expresión y con qué se evaluó durante el transcurso de 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 originales.

values[]

object ( ValueCount )

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

children[]

object ( ExpressionReport )

Subexpresiones

ValueCount

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

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

value ( Value format)

El valor de retorno de la expresión.

count

integer

La cantidad de veces que regresó esa expresión.