Method: projects.test

Source の構文とセマンティックの正確性をテストします。問題が存在する場合は、説明、重大度、ソースの場所とともに呼び出し元に返されます。

テストメソッドは Source で実行できます。Source を渡すと、新しいルールの単体テストに便利です。

なお、REST API を使用してテストを実行する場合は、本番環境データベース、ストレージ バケット、関連するソースを使用します。このようなテストでは、使用に応じて料金が発生する可能性があります。ルールのテストには Firebase Local Emulator Suite を使用することを強くおすすめします。オフラインの非本番環境リソースでテストを実行できます。使用料金はかかりません。

次の例は、Source ユーザーがユーザー ID を持ち、正しいメタデータに一致するバケットに画像をアップロードできるようにしています。

// 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 Transcoding 構文を使用します。

パスパラメータ

パラメータ
name

string

必須。source に対するテストでは、リソース名はプロジェクトを参照する必要があります(形式: projects/{project_id})。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

JSON 表現
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
フィールド
source

object (Source)

Source の正確性をチェックします。

testSuite

object (TestSuite)

Source に対して実行するインライン TestSuite

Source をインラインで指定すると、Source が構文的および意味的に有効な場合にのみテストケースが実行されます。

レスポンスの本文

成功すると、レスポンスの本文に次の構造のデータが含まれます。

FirebaseRulesService.TestRuleset に対するレスポンス。

JSON 表現
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
フィールド
issues[]

object (Issue)

さまざまな重大度の構文的および意味的 Source の問題。重大度が ERROR の問題の場合、テストを実行できません。

testResults[]

object (TestResult)

TestSuite のテストケースに基づくテスト結果のセット。結果は、TestSuite に表示されるテストケースと同じ順序で表示されます。

認可スコープ

次の 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 (TestCase)
    }
  ]
}
フィールド
testCases[]

object (TestCase)

TestSuite に関連付けられたテストケースのコレクション。

テストケース

TestCase メッセージは、リクエスト コンテキストと、そのコンテキストが許可または拒否されるかどうかの期待値を提供します。テストケースで requestresosurcefunctionMocks を指定して、サービス提供の関数への関数呼び出しをモックできます。

request オブジェクトは、リクエスト時に存在するコンテキストを表します。

resource は、リクエストが実行される前に永続ストレージに表示されるターゲット リソース(GCS オブジェクトや Firestore ドキュメントのメタデータなど)の値です。

Cloud Firestore( リクエストリソース)と Cloud Storage for Firebase(リクエストリソース)の関連リファレンス ドキュメントもご覧ください。

JSON 表現
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
フィールド
expectation

enum (Expectation)

テストの想定。

request

value (Value format)

リクエスト コンテキスト。

リクエスト コンテキストの正確な形式は、サービスによって異なります。リクエストでサポートされるフィールドと型については、該当するサービスのドキュメントをご覧ください。少なくとも、すべてのサービスは次のフィールドと型をサポートしています。

リクエスト フィールド タイプ
auth.uid string
auth.token map<string, string>
ヘッダー map<string, string>
支払い方法 string
パラメータ map<string, string>
パス string
時間 google.protobuf.Timestamp

サービスに対してリクエスト値の形式が適切に行われていない場合、リクエストは無効な引数として拒否されます。

resource

value (Value format)

リクエストの処理前に永続ストレージに表示される任意のリソース値。

リソースタイプは request.path 値によって異なります。

functionMocks[]

object (FunctionMock)

サービス定義関数用のオプションの Rules 関数モック。設定しない場合、サービス定義の Rules 関数はエラーを返すことが期待され、これがテスト結果に影響する場合もあれば、影響しない場合もあります。

pathEncoding

enum (PathEncoding)

パス(request.path など)をエンコードするかどうかとそのエンコード方法を指定します。

expressionReportLevel

enum (ExpressionReportLevel)

レスポンスに含める内容を指定します。

予定

サポートされるテストケースの想定値のセット。

列挙型
EXPECTATION_UNSPECIFIED 期待値が指定されていません。
ALLOW 結果は許容されます。
DENY 結果は拒否されるはずです。

FunctionMock

モックルール関数の定義。

モックは、ターゲット サービスで宣言された関数を参照する必要があります。関数の引数の型と結果の型はテスト時に推測されます。arg 値または結果値のいずれかが関数型の宣言と互換性がない場合、リクエストは無効と見なされます。

Arg マッチャーが他と区別されている限り、特定の関数名に複数の FunctionMock を指定できます。すべての Arg 値が Arg.any_value の関数は、1 つのオーバーロードに対して 1 つだけ指定できます。

セキュリティ ルール言語の関数もご覧ください。

JSON 表現
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
フィールド
function

string

関数名。

関数名は、サービス宣言で指定されたものと一致する必要があります。

args[]

object (Arg)

照合する Arg 値のリスト。引数を指定する順序は、関数呼び出しで指定する必要がある順序です。

result

object (Result)

関数呼び出しのモック結果。

引数

モック関数の引数マッチャー。

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.
}
フィールド
共用体フィールド type。サポートされている引数値。type は次のいずれかになります。
exactValue

value (Value format)

引数が、指定された値と完全に一致します。

anyValue

object

引数は、指定された任意の値と一致します。

結果

関数のモック呼び出しから得られる可能性のある結果値。

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.
}
フィールド
共用体フィールド type。サポートされている結果の値。type は次のいずれかになります。
value

value (Value format)

結果は実際の値です。値の型は、サービスが宣言した型と一致する必要があります。

undefined

object

結果が未定義です。つまり、結果を計算できませんでした。

PathEncoding

使用されるパス エンコードのタイプ。

列挙型
ENCODING_UNSPECIFIED エンコードが指定されていません。デフォルトは「URL_ENCODED」です。確認します。
URL_ENCODED パスセグメントを URL エンコードされたものとして扱いますが、エンコードされていない区切り文字(「/」)は付きます。これはデフォルトの動作です。
PLAIN 合計パスを URL 以外のエンコードとして扱います(例:未加工です。

ExpressionReportLevel

式のレポートのレスポンスに含めるデータの量。

列挙型
LEVEL_UNSPECIFIED レベルが指定されていません。デフォルトは「NONE」です。確認します。
NONE その他の情報は含めないでください。
FULL 評価された式に関する詳細なレポートを含めます。
VISITED 評価中にアクセスした式のみを含めます。

問題

問題には、警告、エラー、サポート終了のお知らせなどがあります。

JSON 表現
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
フィールド
sourcePosition

object (SourcePosition)

Source での問題の位置。

description

string

エラーの簡単な説明。

severity

enum (Severity)

問題の重大度。

参照元の位置

Source コンテンツ内の位置(行、列番号、Source メッセージの File のインデックスなど)。デバッグ目的で使用します。

JSON 表現
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
フィールド
fileName

string

File の名前。

line

integer

ソース フラグメントの行番号。1 から始まります。

column

integer

ソース フラグメントに関連付けられたソース行の最初の列。

currentOffset

integer

ファイルの先頭を基準とする開始位置。

endOffset

integer

ファイルの先頭を基準とする終了位置。

重大度

問題の重大度のセット。

列挙型
SEVERITY_UNSPECIFIED 重大度は指定されていません。
DEPRECATION サポートまたはメンテナンスされなくなったステートメントとメソッドの非推奨に関する問題。
WARNING 未使用の変数などの警告。
ERROR 一致しない中かっこや変数の再定義などのエラー。

TestResult

テストの状態、テスト失敗の説明とソースの位置を含むテスト結果のメッセージ。

JSON 表現
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
フィールド
state

enum (State)

テストの状態。

debugMessages[]

string

評価中に発生したテスト実行の問題に関連するデバッグ メッセージ。

デバッグ メッセージは、関数モックの呼び出し回数が多すぎるか少なすぎるか、評価中に発生するランタイム エラーに関連している可能性があります。

例: Unable to read variable [name: "resource"]

errorPosition

object (SourcePosition)

主要ランタイム エラーが発生する Source 内の位置。

式の評価でエラーが発生することがあります。ルールはデフォルトで拒否されるため、エラーが生成されたときの DENY の想定は有効です。エラーのある DENY がある場合は、SourcePosition が返されます。

例: errorPosition { line: 19 column: 37 }

functionCalls[]

object (FunctionCall)

サービス定義メソッドに対して行われる関数呼び出しのセット。

関数呼び出しは、評価中に検出された順序で含まれ、モックされた関数とモックされていない関数の両方に対して行われ、テスト state に関係なくレスポンスに含まれます。

visitedExpressions[]

object (VisitedExpression)

特定のテストでアクセスした権限式のセット。これは、テストケースに関連し、アクセスされたすべての権限式の位置と評価結果を返します。

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

中間評価状態の詳細なレポートについては、expressionReports フィールドをご覧ください。

expressionReports[]

object (ExpressionReport)

ルールセット AST 内の式から評価された値へのマッピング。AST 構造をミラーリングするために部分的にネストされています。このフィールドは実際には式をトラッキングしており、「visitedExpressions」とは対照的に権限ステートメントをトラッキングしていないことに注意してください。ご確認ください。リテラル式は省略されます。

状態

テスト結果の有効な状態。

列挙型
STATE_UNSPECIFIED テストの状態が設定されていません。
SUCCESS テストは成功する。
FAILURE テストは失敗です。

FunctionCall

テスト実行中に呼び出されたサービス定義関数呼び出しを表します。

JSON 表現
{
  "function": string,
  "args": [
    value
  ]
}
フィールド
function

string

呼び出される関数の名前。

args[]

value (Value format)

関数に指定された引数。

VisitedExpression

ルールでアクセスした式の位置と結果にアクセスします。

JSON 表現
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
フィールド
sourcePosition

object (SourcePosition)

式が訪問された Source 内の位置。

value

value (Value format)

アクセスした式の評価値。例:true/false

ExpressionReport

式がファイル内のどこにあるか、式の使用中に評価された内容を記述します。

JSON 表現
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
フィールド
sourcePosition

object (SourcePosition)

元のルールソース内の式の位置。

values[]

object (ValueCount)

検出時にこの式が評価した値。

children[]

object (ExpressionReport)

サブ式

値の数

特定の ExpressionValue に対して Expression が評価された回数のタプル。

JSON 表現
{
  "value": value,
  "count": integer
}
フィールド
value

value (Value format)

式の戻り値

count

integer

その式が返された回数。