- HTTP-запрос
- Параметры пути
- Тело запроса
- Тело ответа
- Области авторизации
- Тестовый набор
- Тесткейс
- Ожидание
- ФункцияMock
- Арг
- Результат
- Кодирование пути
- ВыражениеОтчетУровень
- Проблема
- Исходная позиция
- Серьезность
- Результат теста
- Состояние
- Вызов функции
- ПосещенноеВыражение
- Отчет о выражениях
- ValueCount
- Попробуйте!
Тестовый Source
на синтаксическую и семантическую корректность. Присутствующие проблемы, если таковые имеются, будут возвращены вызывающему абоненту с описанием, серьезностью и местоположением источника.
Тестовый метод может быть выполнен с помощью Source
. Передача Source
полезна для модульного тестирования новых правил.
Обратите внимание, что тесты, выполняемые с использованием REST API, используют рабочие базы данных, сегменты хранения и связанные ресурсы. За такое тестирование может взиматься плата за использование. Мы настоятельно рекомендуем вам использовать пакет локального эмулятора Firebase для тестирования правил, поскольку вы можете запускать тесты на автономных непроизводственных ресурсах без платы за использование.
Ниже приведен пример Source
, который позволяет пользователям загружать изображения в корзину, содержащую их идентификатор пользователя и соответствующие правильным метаданным:
Пример
// 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/')
}
}
HTTP-запрос
POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test
URL-адрес использует синтаксис транскодирования gRPC .
Параметры пути
Параметры | |
---|---|
name | Необходимый. Для тестов |
Тело запроса
Тело запроса содержит данные следующей структуры:
JSON-представление | |
---|---|
{ "source": { object ( |
Поля | |
---|---|
source | |
testSuite | Встроенный Если |
Тело ответа
В случае успеха тело ответа содержит данные следующей структуры:
Ответ на FirebaseRulesService.TestRuleset
.
JSON-представление | |
---|---|
{ "issues": [ { object ( |
Поля | |
---|---|
issues[] | Синтаксические и семантические |
testResults[] | Набор результатов тестирования с учетом тестовых примеров в |
Области авторизации
Требуется одна из следующих областей OAuth:
-
https://www.googleapis.com/auth/cloud-platform
-
https://www.googleapis.com/auth/firebase
-
https://www.googleapis.com/auth/firebase.readonly
Для получения дополнительной информации см. Обзор аутентификации .
Тестовый набор
TestSuite
— это набор экземпляров TestCase
, проверяющих логическую правильность правил. На TestSuite
можно ссылаться в рамках вызова projects.test
или как часть объекта Release
в качестве проверки перед выпуском.
JSON-представление | |
---|---|
{
"testCases": [
{
object ( |
Поля | |
---|---|
testCases[] | Коллекция тестовых случаев, связанных с |
Тесткейс
Сообщения TestCase
предоставляют контекст запроса и ожидание того, будет ли данный контекст разрешен или запрещен. В тестовых примерах могут быть указаны request
, resosurce
и functionMocks
для имитации вызова функции, предоставляемой службой.
Объект request
представляет контекст, присутствующий во время запроса.
resource
— это значение целевого ресурса (например, метаданные объекта GCS или документа Firestore), как оно появляется в постоянном хранилище до выполнения запроса.
См. также соответствующую справочную документацию по Cloud Firestore ( request , resources ) и Cloud Storage for Firebase ( request , resources ).
JSON-представление | |
---|---|
{ "expectation": enum ( |
Поля | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | Ожидание теста. | ||||||||||||||||
request | Запросить контекст. Точный формат контекста запроса зависит от службы. Информацию о поддерживаемых полях и типах запроса см. в соответствующей сервисной документации. Как минимум, все службы поддерживают следующие поля и типы:
Если значение запроса не соответствует службе, запрос будет отклонен как недопустимый аргумент. | ||||||||||||||||
resource | Необязательное значение ресурса, которое появляется в постоянном хранилище до выполнения запроса. Тип ресурса зависит от значения | ||||||||||||||||
functionMocks[] | Дополнительная функция Rules имитирует определяемые службой функции. Если этот параметр не установлен, ожидается, что любая определяемая службой функция правил будет возвращать ошибку, которая может повлиять или не повлиять на результат теста. | ||||||||||||||||
pathEncoding | Указывает, кодируются ли пути (например, request.path) и каким образом. | ||||||||||||||||
expressionReportLevel | Указывает, что должно быть включено в ответ. |
Ожидание
Набор поддерживаемых ожиданий тестовых примеров.
Перечисления | |
---|---|
EXPECTATION_UNSPECIFIED | Неопределенное ожидание. |
ALLOW | Ожидайте разрешенного результата. |
DENY | Ожидайте отрицательный результат. |
ФункцияMock
Определение функции Mock Rules.
Mocks должны ссылаться на функцию, объявленную целевой службой. Тип функции args и результат будут определены во время тестирования. Если значения аргумента или результата несовместимы с объявлением типа функции, запрос будет считаться недействительным.
Для данного имени функции может быть предоставлено более одного FunctionMock
, если сопоставители Arg
различны. Для данной перегрузки может быть только одна функция, где все значения Arg
— Arg.any_value
.
См. также Функции на языке правил безопасности .
JSON-представление | |
---|---|
{ "function": string, "args": [ { object ( |
Поля | |
---|---|
function | Имя функции. Имя функции должно совпадать с именем, указанным в объявлении службы. |
args[] | Список значений |
result | Макет результата вызова функции. |
Арг
Сопоставители аргументов для фиктивной функции.
JSON-представление | |
---|---|
{ // Union field |
Поля | ||
---|---|---|
type поля объединения. Поддерживаемые значения аргументов. type может быть только одним из следующих: | ||
exactValue | Аргумент точно соответствует предоставленному значению. | |
anyValue | Аргумент соответствует любому предоставленному значению. |
Результат
Возможные значения результата фиктивного вызова функции.
JSON-представление | |
---|---|
{ // Union field |
Поля | ||
---|---|---|
type поля объединения. Поддерживаемые значения результатов. type может быть только одним из следующих: | ||
value | Результатом является фактическое значение. Тип значения должен соответствовать типу, объявленному службой. | |
undefined | Результат не определен, что означает, что результат не может быть вычислен. |
Кодирование пути
Тип используемой кодировки пути.
Перечисления | |
---|---|
ENCODING_UNSPECIFIED | Кодировка не указана. По умолчанию используется поведение «URL_ENCODED». |
URL_ENCODED | Сегменты пути рассматриваются как закодированные URL-адреса, но с незакодированными разделителями («/»). Это поведение по умолчанию. |
PLAIN | Считает общий путь не-URL-кодированным, например необработанным. |
ВыражениеОтчетУровень
Объем данных, включаемых в ответ отчета о выражениях.
Перечисления | |
---|---|
LEVEL_UNSPECIFIED | Уровень не указан. По умолчанию установлено значение «НЕТ». |
NONE | Не включайте никакой дополнительной информации. |
FULL | Включите подробный отчет об оцениваемых выражениях. |
VISITED | Включайте только те выражения, которые были посещены во время оценки. |
Проблема
Проблемы включают предупреждения, ошибки и уведомления об устаревании.
JSON-представление | |
---|---|
{ "sourcePosition": { object ( |
Поля | |
---|---|
sourcePosition | Положение вопроса в |
description | Краткое описание ошибки. |
severity | Серьезность проблемы. |
Исходная позиция
Позиция в Source
содержимом, включая его строку, номер столбца и индекс File
в Source
сообщении. Используется в целях отладки.
JSON-представление | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
Поля | |
---|---|
fileName | Имя |
line | Номер строки исходного фрагмента. 1-основанный. |
column | Первый столбец в исходной строке, связанный с исходным фрагментом. |
currentOffset | Начальная позиция относительно начала файла. |
endOffset | Конечная позиция относительно начала файла. |
Серьезность
Набор серьезностей проблем.
Перечисления | |
---|---|
SEVERITY_UNSPECIFIED | Неустановленная степень тяжести. |
DEPRECATION | Проблема устаревания операторов и методов, которые больше не поддерживаются или не поддерживаются. |
WARNING | Предупреждения, такие как: неиспользуемые переменные. |
ERROR | Такие ошибки, как: несовпадающие фигурные скобки или переопределение переменной. |
Результат теста
Сообщение о результате теста, содержащее состояние теста, а также описание и источник ошибок теста.
JSON-представление | |
---|---|
{ "state": enum ( |
Поля | |
---|---|
state | Состояние теста. |
debugMessages[] | Сообщения отладки, связанные с проблемами выполнения тестов, возникшими во время оценки. Сообщения отладки могут быть связаны со слишком большим или слишком малым количеством вызовов макетов функций или с ошибками времени выполнения, возникающими во время оценки. Например: |
errorPosition | Позиция в Оценка выражения может привести к ошибке. По умолчанию правила запрещены, поэтому ожидание Например, |
functionCalls[] | Набор вызовов функций, выполняемых для методов, определяемых службой. Вызовы функций включаются в том порядке, в котором они встречаются во время оценки, предоставляются как для имитируемых, так и для немакируемых функций и включаются в ответ независимо от |
visitedExpressions[] | Набор выражений посещенных разрешений для данного теста. Это возвращает позиции и результаты оценки всех посещенных выражений разрешений, которые имели отношение к тестовому примеру, например
Подробный отчет о промежуточных состояниях оценки см. в поле |
expressionReports[] | Сопоставление выражений в наборе правил AST со значениями, которым они были вычислены. Частично вложен для отражения структуры AST. Обратите внимание, что это поле на самом деле отслеживает выражения, а не инструкции разрешений, в отличие от поля «visitedExpressions» выше. Буквальные выражения опускаются. |
Состояние
Допустимые состояния для результата теста.
Перечисления | |
---|---|
STATE_UNSPECIFIED | Состояние тестирования не установлено. |
SUCCESS | Тест прошел успешно. |
FAILURE | Тест провален. |
Вызов функции
Представляет вызов функции, определяемой службой, который был вызван во время выполнения теста.
JSON-представление | |
---|---|
{ "function": string, "args": [ value ] } |
Поля | |
---|---|
function | Имя вызванной функции. |
args[] | Аргументы, переданные функции. |
ПосещенноеВыражение
Сохраните позицию и получите доступ к результату выражения, посещенного в правилах.
JSON-представление | |
---|---|
{
"sourcePosition": {
object ( |
Поля | |
---|---|
sourcePosition | Позиция в |
value | Оцененное значение посещаемого выражения, например true/false. |
Отчет о выражениях
Описывает, где в файле находится выражение и как оно оценивалось в ходе его использования.
JSON-представление | |
---|---|
{ "sourcePosition": { object ( |
Поля | |
---|---|
sourcePosition | Положение выражения в исходном источнике правил. |
values[] | Значения, которые вычисляется этим выражением при обнаружении. |
children[] | Подвыражения |
ValueCount
Кортеж, показывающий, сколько раз выражение оценивалось по определенному значению ExpressionValue.
JSON-представление | |
---|---|
{ "value": value, "count": integer } |
Поля | |
---|---|
value | Возвращаемое значение выражения |
count | Сколько раз возвращалось это выражение. |