Method: projects.test

Teste Source para correção sintática e semântica. Os problemas presentes, se houver, serão retornados ao autor da chamada com uma descrição, gravidade e local de origem.

O método de teste pode ser executado com Source. Transmitir Source é útil para testar novas regras de unidade.

Os testes executados com a API REST usam bancos de dados de produção, buckets de armazenamento e fontes relacionadas. Esses testes podem gerar cobranças de uso. Recomendamos que você use o Pacote de emuladores locais do Firebase para realizar testes de regras, já que é possível executá-los em recursos off-line que não são de produção e sem cobranças de uso.

Este é um exemplo de Source que permite que os usuários façam upload de imagens para um bucket que tenha o ID do usuário e corresponda os metadados corretos:

Exemplo

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

Solicitação HTTP

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

O URL usa a sintaxe de transcodificação gRPC.

Parâmetros de caminho

Parâmetros
name

string

Obrigatório. Para testes com source, o nome do recurso precisa se referir ao projeto: Formato: projects/{project_id}

Corpo da solicitação

O corpo da solicitação contém dados com a seguinte estrutura:

Representação JSON
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
Campos
source

object (Source)

Source para verificar a precisão.

testSuite

object (TestSuite)

O TestSuite in-line a ser executado no Source.

Quando o Source for fornecido inline, os casos de teste só serão executados se o Source for sintática e semanticamente válido.

Corpo da resposta

Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:

A resposta para FirebaseRulesService.TestRuleset.

Representação JSON
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
Campos
issues[]

object (Issue)

Problemas de Source sintáticos e semânticos de gravidade variável. Os problemas de gravidade ERROR vão impedir a execução dos testes.

testResults[]

object (TestResult)

O conjunto de resultados de acordo com os casos de teste no TestSuite. Os resultados vão aparecer na mesma ordem que os casos de teste no TestSuite.

Escopos de autorização

Requer um dos seguintes escopos do OAuth:

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

Para saber mais, consulte a Visão geral da autenticação.

Pacote de testes

A TestSuite é uma coleção de instâncias de TestCase que validam a exatidão lógica das regras. O TestSuite pode ser referenciado in-line em uma invocação projects.test ou como parte de um objeto Release como uma verificação de pré-lançamento.

Representação JSON
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
Campos
testCases[]

object (TestCase)

Coleção de casos de teste associados ao TestSuite.

Caso de teste

As mensagens TestCase fornecem o contexto da solicitação e uma expectativa sobre se o contexto será permitido ou negado. Os casos de teste podem especificar request, resosurce e functionMocks para simular uma chamada de função para uma função fornecida pelo serviço.

O objeto request representa o contexto presente no momento da solicitação.

O resource é o valor do recurso de destino (por exemplo, metadados de um objeto do GCS ou documento do Firestore) conforme ele aparece no armazenamento permanente antes que a solicitação seja executada.

Consulte também a documentação de referência relacionada ao Cloud Firestore ( solicitação, recurso) e ao Cloud Storage para Firebase (solicitação, recurso).

Representação JSON
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
Campos
expectation

enum (Expectation)

Testar a expectativa.

request

value (Value format)

Solicitar contexto.

O formato exato do contexto da solicitação depende do serviço. Consulte a documentação de serviço apropriada para mais informações sobre os campos e tipos compatíveis na solicitação. No mínimo, todos os serviços oferecem suporte aos seguintes campos e tipos:

Campo de solicitação Tipo
Auth.uid string
token de autenticação map<string, string>
cabeçalhos map<string, string>
method string
params map<string, string>
path string
tempo google.protobuf.Timestamp

Se o valor da solicitação não for bem formado para o serviço, a solicitação será rejeitada como um argumento inválido.

resource

value (Value format)

Valor de recurso opcional como aparece no armazenamento permanente antes que a solicitação seja atendida.

O tipo de recurso depende do valor request.path.

functionMocks[]

object (FunctionMock)

Simulações de regras opcionais para funções definidas pelo serviço. Se ela não for definida, qualquer função de regras definidas pelo serviço deverá retornar um erro, o que pode ou não influenciar o resultado do teste.

pathEncoding

enum (PathEncoding)

Especifica se os caminhos (como request.path) são codificados e como.

expressionReportLevel

enum (ExpressionReportLevel)

Especifica o que será incluído na resposta.

Expectativa

O conjunto de expectativas de caso de teste com suporte.

Enums
EXPECTATION_UNSPECIFIED Expectativa não especificada.
ALLOW Um resultado permitido é esperado.
DENY O resultado é negado.

Função Mockup

Definição da função de regras de simulação.

As simulações precisam se referir a uma função declarada pelo serviço de destino. O tipo dos argumentos e do resultado da função será inferido no momento do teste. Se os valores de argumento ou resultado não forem compatíveis com a declaração de tipo de função, a solicitação será considerada inválida.

É possível fornecer mais de um FunctionMock para um determinado nome de função, desde que os correspondentes de Arg sejam diferentes. Pode haver apenas uma função para determinada sobrecarga em que todos os valores Arg são Arg.any_value.

Consulte também Funções na linguagem de regras de segurança.

Representação JSON
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
Campos
function

string

O nome da função.

O nome da função precisa corresponder ao nome informado por uma declaração de serviço.

args[]

object (Arg)

A lista de valores Arg para correspondência. A ordem em que os argumentos são fornecidos é a ordem em que eles aparecem na invocação da função.

result

object (Result)

O resultado simulado da chamada de função.

Arg

Correspondências "arg" para a função de simulação.

Representação 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ão type. Valores de argumento compatíveis. type pode ser apenas de um dos tipos a seguir:
exactValue

value (Value format)

O argumento corresponde exatamente ao valor fornecido.

anyValue

object

O argumento corresponde a qualquer valor fornecido.

Resultado

Possíveis valores de resultado da invocação simulada da função.

Representação 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ão type. Valores de resultado compatíveis. type pode ser apenas de um dos tipos a seguir:
value

value (Value format)

O resultado é um valor real. O tipo do valor precisa corresponder ao tipo declarado pelo serviço.

undefined

object

O resultado é indefinido, o que significa que o resultado não pôde ser calculado.

Codificação de caminho

O tipo de codificação de caminho usado.

Enums
ENCODING_UNSPECIFIED Nenhuma codificação foi especificada. O padrão é "URL_ENCODED" do seu modelo.
URL_ENCODED Trata os segmentos de caminho como um URL codificado, mas com separadores não codificados ("/"). Esse é o comportamento padrão.
PLAIN Trata o caminho total como não codificado no URL, por exemplo, cru.

Expressão de relatório

A quantidade de dados a serem incluídos na resposta do relatório de expressão.

Enums
LEVEL_UNSPECIFIED Nenhum nível foi especificado. O padrão é "NENHUMA" do seu modelo.
NONE Não inclua informações adicionais.
FULL Inclui relatórios detalhados sobre expressões avaliadas.
VISITED Incluir apenas as expressões que foram visitadas durante a avaliação.

Problema

Os problemas incluem avisos, erros e avisos de descontinuação.

Representação JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
Campos
sourcePosition

object (SourcePosition)

Posição do problema no Source.

description

string

Breve descrição do erro.

severity

enum (Severity)

A gravidade do problema.

SourcePosition

Posição no conteúdo de Source, incluindo a linha, o número da coluna e um índice de File na mensagem Source. Usado para fins de depuração.

Representação JSON
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
Campos
fileName

string

Nome do File.

line

integer

Número da linha do fragmento de origem. baseado em 1.

column

integer

Primeira coluna na linha de origem associada ao fragmento de origem.

currentOffset

integer

Posição inicial em relação ao início do arquivo.

endOffset

integer

Posição final em relação ao início do arquivo.

Gravidade

O conjunto de gravidades do problema.

Enums
SEVERITY_UNSPECIFIED Uma gravidade não especificada.
DEPRECATION Problema de descontinuação de instruções e métodos que podem não ser mais compatíveis ou mantidos.
WARNING Avisos como: variáveis não usadas.
ERROR Erros como: chaves sem correspondência ou redefinição de variável.

Resultado de teste

Mensagem do resultado do teste com o estado, além de uma descrição e uma posição de origem para as falhas do teste.

Representação JSON
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
Campos
state

enum (State)

Estado do teste.

debugMessages[]

string

Depurar mensagens relacionadas a problemas de execução de teste encontrados durante a avaliação.

As mensagens de depuração podem estar relacionadas a muitas ou poucas invocações de simulações de função ou a erros de tempo de execução que ocorrem durante a avaliação.

Por exemplo: Unable to read variable [name: "resource"]

errorPosition

object (SourcePosition)

Posição no Source em que ocorre o erro do princípio de execução.

A avaliação de uma expressão pode resultar em um erro. As regras são negadas por padrão. Portanto, uma expectativa DENY quando um erro é gerado é válida. Quando há um DENY com erro, o SourcePosition é retornado.

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

functionCalls[]

object (FunctionCall)

O conjunto de chamadas de função feitas para métodos definidos pelo serviço.

As chamadas de função são incluídas na ordem em que são encontradas durante a avaliação, são fornecidas para funções simuladas e não simuladas e incluídas na resposta, independentemente do teste state.

visitedExpressions[]

object (VisitedExpression)

O conjunto de expressões de permissão visitadas para um determinado teste. Isso retorna as posições e os resultados de avaliação de todas as expressões de permissão visitadas que foram relevantes para o caso de teste, por exemplo,

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

Para ver um relatório detalhado dos estados de avaliação intermediários, consulte o campo expressionReports.

expressionReports[]

object (ExpressionReport)

O mapeamento da expressão no conjunto de regras AST para os valores para os quais foram avaliados. Parcialmente aninhado para espelhar a estrutura AST. Esse campo rastreia expressões, não instruções de permissão, em contraste com "visitedExpressions" acima. As expressões literais são omitidas.

Estado

Estados válidos para o resultado do teste.

Enums
STATE_UNSPECIFIED O estado do teste não foi definido.
SUCCESS O teste é um sucesso.
FAILURE O teste falha.

FunctionCall

Representa uma chamada de função definida pelo serviço que foi invocada durante a execução do teste.

Representação JSON
{
  "function": string,
  "args": [
    value
  ]
}
Campos
function

string

Nome da função invocada.

args[]

value (Value format)

Os argumentos que foram fornecidos à função.

VisitedExpression

Armazena a posição e o resultado do acesso para uma expressão visitada nas regras.

Representação JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
Campos
sourcePosition

object (SourcePosition)

Posição no Source em que uma expressão foi visitada.

value

value (Value format)

O valor avaliado para a expressão visitada, por exemplo, verdadeiro/falso

Relatório de expressão

Descreve onde uma expressão é encontrada em um arquivo e como ela foi avaliada durante o uso.

Representação JSON
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
Campos
sourcePosition

object (SourcePosition)

Posição da expressão na fonte das regras originais.

values[]

object (ValueCount)

Valores que essa expressão avaliou quando encontrada.

children[]

object (ExpressionReport)

Subexpressões

Contagem de valores

Tupla de quantas vezes uma expressão foi avaliada em um ExpressionValue específico.

Representação JSON
{
  "value": value,
  "count": integer
}
Campos
value

value (Value format)

O valor de retorno da expressão

count

integer

O número de vezes que a expressão retornou.