- HTTP リクエスト
- パスパラメータ
- リクエストの本文
- レスポンスの本文
- 承認スコープ
- TestSuite
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- TestCase
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- 期待する対応
- FunctionMock
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- 引数
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- Result
- PathEncoding
- ExpressionReportLevel
- 問題
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- SourcePosition
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- 重大度
- TestResult
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- 都道府県
- FunctionCall
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- VisitedExpression(訪問した式)
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- ExpressionReport
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- ValueCount
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表現
- 試してみる
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 |
必須。 |
リクエストの本文
リクエストの本文には、次の構造のデータが含まれます。
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( リクエスト、リソース)と Cloud Storage for Firebase(リクエスト、リソース)の関連リファレンス ドキュメントもご覧ください。
JSON 表現 | |
---|---|
{ "expectation": enum ( |
フィールド | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
テストの想定。 |
||||||||||||||||
request |
リクエスト コンテキスト。 リクエスト コンテキストの正確な形式は、サービスによって異なります。リクエストでサポートされるフィールドと型については、該当するサービスのドキュメントをご覧ください。少なくとも、すべてのサービスは次のフィールドと型をサポートしています。
サービスに対してリクエスト値の形式が適切に行われていない場合、リクエストは無効な引数として拒否されます。 |
||||||||||||||||
resource |
リクエストの処理前に永続ストレージに表示される任意のリソース値。 リソースタイプは |
||||||||||||||||
functionMocks[] |
サービス定義関数用のオプションの Rules 関数モック。設定しない場合、サービス定義の Rules 関数はエラーを返すことが期待され、これがテスト結果に影響する場合もあれば、影響しない場合もあります。 |
||||||||||||||||
pathEncoding |
パス(request.path など)をエンコードするかどうかとそのエンコード方法を指定します。 |
||||||||||||||||
expressionReportLevel |
レスポンスに含める内容を指定します。 |
予定
サポートされるテストケースの想定値のセット。
列挙型 | |
---|---|
EXPECTATION_UNSPECIFIED |
期待値が指定されていません。 |
ALLOW |
結果は許容されます。 |
DENY |
結果は拒否されるはずです。 |
FunctionMock
モックルール関数の定義。
モックは、ターゲット サービスで宣言された関数を参照する必要があります。関数の引数の型と結果の型はテスト時に推測されます。arg 値または結果値のいずれかが関数型の宣言と互換性がない場合、リクエストは無効と見なされます。
Arg
マッチャーが他と区別されている限り、特定の関数名に複数の FunctionMock
を指定できます。すべての Arg
値が Arg.any_value
の関数は、1 つのオーバーロードに対して 1 つだけ指定できます。
セキュリティ ルール言語の関数もご覧ください。
JSON 表現 | |
---|---|
{ "function": string, "args": [ { object ( |
フィールド | |
---|---|
function |
関数名。 関数名は、サービス宣言で指定されたものと一致する必要があります。 |
args[] |
照合する |
result |
関数呼び出しのモック結果。 |
引数
モック関数の引数マッチャー。
JSON 表現 | |
---|---|
{ // Union field |
フィールド | ||
---|---|---|
共用体フィールド type 。サポートされている引数値。type は次のいずれかになります。 |
||
exactValue |
引数が、指定された値と完全に一致します。 |
|
anyValue |
引数は、指定された任意の値と一致します。 |
結果
関数のモック呼び出しから得られる可能性のある結果値。
JSON 表現 | |
---|---|
{ // Union field |
フィールド | ||
---|---|---|
共用体フィールド type 。サポートされている結果の値。type は次のいずれかになります。 |
||
value |
結果は実際の値です。値の型は、サービスが宣言した型と一致する必要があります。 |
|
undefined |
結果が未定義です。つまり、結果を計算できませんでした。 |
PathEncoding
使用されるパス エンコードのタイプ。
列挙型 | |
---|---|
ENCODING_UNSPECIFIED |
エンコードが指定されていません。デフォルトは「URL_ENCODED」です。確認します。 |
URL_ENCODED |
パスセグメントを URL エンコードされたものとして扱いますが、エンコードされていない区切り文字(「/」)は付きます。これはデフォルトの動作です。 |
PLAIN |
合計パスを URL 以外のエンコードとして扱います(例:未加工です。 |
ExpressionReportLevel
式のレポートのレスポンスに含めるデータの量。
列挙型 | |
---|---|
LEVEL_UNSPECIFIED |
レベルが指定されていません。デフォルトは「NONE」です。確認します。 |
NONE |
その他の情報は含めないでください。 |
FULL |
評価された式に関する詳細なレポートを含めます。 |
VISITED |
評価中にアクセスした式のみを含めます。 |
問題
問題には、警告、エラー、サポート終了のお知らせなどがあります。
JSON 表現 | |
---|---|
{ "sourcePosition": { object ( |
フィールド | |
---|---|
sourcePosition |
|
description |
エラーの簡単な説明。 |
severity |
問題の重大度。 |
参照元の位置
Source
コンテンツ内の位置(行、列番号、Source
メッセージの File
のインデックスなど)。デバッグ目的で使用します。
JSON 表現 | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
フィールド | |
---|---|
fileName |
|
line |
ソース フラグメントの行番号。1 から始まります。 |
column |
ソース フラグメントに関連付けられたソース行の最初の列。 |
currentOffset |
ファイルの先頭を基準とする開始位置。 |
endOffset |
ファイルの先頭を基準とする終了位置。 |
重大度
問題の重大度のセット。
列挙型 | |
---|---|
SEVERITY_UNSPECIFIED |
重大度は指定されていません。 |
DEPRECATION |
サポートまたはメンテナンスされなくなったステートメントとメソッドの非推奨に関する問題。 |
WARNING |
未使用の変数などの警告。 |
ERROR |
一致しない中かっこや変数の再定義などのエラー。 |
TestResult
テストの状態、テスト失敗の説明とソースの位置を含むテスト結果のメッセージ。
JSON 表現 | |
---|---|
{ "state": enum ( |
フィールド | |
---|---|
state |
テストの状態。 |
debugMessages[] |
評価中に発生したテスト実行の問題に関連するデバッグ メッセージ。 デバッグ メッセージは、関数モックの呼び出し回数が多すぎるか少なすぎるか、評価中に発生するランタイム エラーに関連している可能性があります。 例: |
errorPosition |
主要ランタイム エラーが発生する 式の評価でエラーが発生することがあります。ルールはデフォルトで拒否されるため、エラーが生成されたときの 例: |
functionCalls[] |
サービス定義メソッドに対して行われる関数呼び出しのセット。 関数呼び出しは、評価中に検出された順序で含まれ、モックされた関数とモックされていない関数の両方に対して行われ、テスト |
visitedExpressions[] |
特定のテストでアクセスした権限式のセット。これは、テストケースに関連し、アクセスされたすべての権限式の位置と評価結果を返します。
中間評価状態の詳細なレポートについては、 |
expressionReports[] |
ルールセット AST 内の式から評価された値へのマッピング。AST 構造をミラーリングするために部分的にネストされています。このフィールドは実際には式をトラッキングしており、「visitedExpressions」とは対照的に権限ステートメントをトラッキングしていないことに注意してください。ご確認ください。リテラル式は省略されます。 |
状態
テスト結果の有効な状態。
列挙型 | |
---|---|
STATE_UNSPECIFIED |
テストの状態が設定されていません。 |
SUCCESS |
テストは成功する。 |
FAILURE |
テストは失敗です。 |
FunctionCall
テスト実行中に呼び出されたサービス定義関数呼び出しを表します。
JSON 表現 | |
---|---|
{ "function": string, "args": [ value ] } |
フィールド | |
---|---|
function |
呼び出される関数の名前。 |
args[] |
関数に指定された引数。 |
VisitedExpression
ルールでアクセスした式の位置と結果にアクセスします。
JSON 表現 | |
---|---|
{
"sourcePosition": {
object ( |
フィールド | |
---|---|
sourcePosition |
式が訪問された |
value |
アクセスした式の評価値。例:true/false |
ExpressionReport
式がファイル内のどこにあるか、式の使用中に評価された内容を記述します。
JSON 表現 | |
---|---|
{ "sourcePosition": { object ( |
フィールド | |
---|---|
sourcePosition |
元のルールソース内の式の位置。 |
values[] |
検出時にこの式が評価した値。 |
children[] |
サブ式 |
値の数
特定の ExpressionValue に対して Expression が評価された回数のタプル。
JSON 表現 | |
---|---|
{ "value": value, "count": integer } |
フィールド | |
---|---|
value |
式の戻り値 |
count |
その式が返された回数。 |