- HTTPリクエスト
- パスパラメータ
- リクエストボディ
- レスポンスボディ
- 認可の範囲
- テストスイート
- テストケース
- 期待
- 関数モック
- 引数
- 結果
- パスエンコーディング
- 式レポートレベル
- 問題
- ソース位置
- 重大度
- テスト結果
- 州
- 関数呼び出し
- 訪問された式
- 式レポート
- 値の数
- それを試してみてください!
Source
の構文的および意味的正確性をテストします。問題が存在する場合は、説明、重大度、ソースの場所とともに呼び出し元に返されます。
テスト メソッドはSource
を使用して実行できます。 Source
の受け渡しは、新しいルールの単体テストに役立ちます。
REST API を使用して実行されるテストでは、実稼働データベース、ストレージ バケット、および関連リソースが使用されることに注意してください。このようなテストでは使用料が発生する場合があります。使用料金なしでオフラインの非運用リソースでテストを実行できるため、ルール テストを実行するには Firebase Local Emulator Suite を使用することを強くお勧めします。
以下は、ユーザーが自分のユーザー ID を持ち、正しいメタデータと一致するバケットに画像をアップロードできるようにする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 | |
レスポンスボディ
成功した場合、応答本文には次の構造のデータが含まれます。
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 、 resource ) および Cloud Storage for Firebase ( request 、 resource ) の関連リファレンス ドキュメントもご覧ください。
JSON表現 | |
---|---|
{ "expectation": enum ( |
田畑 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | テストの期待。 | ||||||||||||||||
request | リクエストコンテキスト。 リクエスト コンテキストの正確な形式はサービスによって異なります。リクエストでサポートされているフィールドとタイプについては、該当するサービスのドキュメントを参照してください。少なくとも、すべてのサービスは次のフィールドとタイプをサポートします。
リクエスト値がサービスに対して適切な形式でない場合、リクエストは無効な引数として拒否されます。 | ||||||||||||||||
resource | リクエストが実行される前に永続ストレージに表示されるオプションのリソース値。 リソースの種類は | ||||||||||||||||
functionMocks[] | サービス定義関数のオプションのルール関数モック。設定されていない場合、サービス定義のルール関数はエラーを返すことが想定されており、テスト結果に影響を与える場合とそうでない場合があります。 | ||||||||||||||||
pathEncoding | パス (request.path など) をエンコードするかどうか、およびその方法を指定します。 | ||||||||||||||||
expressionReportLevel | 応答に何を含める必要があるかを指定します。 |
期待
サポートされているテスト ケースの期待値のセット。
列挙型 | |
---|---|
EXPECTATION_UNSPECIFIED | 不特定の期待。 |
ALLOW | 許容される結果が期待されます。 |
DENY | 拒否される結果が予想されます。 |
関数モック
モックルール関数の定義。
モックは、ターゲット サービスによって宣言された関数を参照する必要があります。関数の引数と結果の型はテスト時に推測されます。引数または結果の値のいずれかが関数の型宣言と互換性がない場合、リクエストは無効とみなされます。
Arg
マッチャーが異なる限り、特定の関数名に対して複数のFunctionMock
を提供できます。すべてのArg
値がArg.any_value
である特定のオーバーロードには関数が 1 つだけ存在する場合があります。
「セキュリティ ルール言語の関数」も参照してください。
JSON表現 | |
---|---|
{ "function": string, "args": [ { object ( |
田畑 | |
---|---|
function | 関数の名前。 関数名はサービス宣言で指定されたものと一致する必要があります。 |
args[] | 照合する |
result | 関数呼び出しのモック結果。 |
引数
モック関数の Arg マッチャー。
JSON表現 | |
---|---|
{ // Union field |
田畑 | ||
---|---|---|
共用体フィールドのtype 。サポートされている引数値。 type 次のいずれか 1 つだけです。 | ||
exactValue | 引数は指定された値と完全に一致します。 | |
anyValue | 引数は指定された任意の値と一致します。 |
結果
関数のモック呼び出しから得られる結果の値。
JSON表現 | |
---|---|
{ // Union field |
田畑 | ||
---|---|---|
共用体フィールドのtype 。サポートされる結果の値。 type 次のいずれか 1 つだけです。 | ||
value | 結果は実際の値です。値の型は、サービスによって宣言された型と一致する必要があります。 | |
undefined | 結果は未定義です。これは、結果を計算できなかったことを意味します。 |
パスエンコーディング
使用されるパスエンコーディングのタイプ。
列挙型 | |
---|---|
ENCODING_UNSPECIFIED | エンコーディングが指定されていません。デフォルトは「URL_ENCODED」動作です。 |
URL_ENCODED | パスセグメントを URL エンコードされたものとして扱いますが、エンコードされていない区切り文字 (「/」) が使用されます。これはデフォルトの動作です。 |
PLAIN | 合計パスを URL エンコードされていないもの (生など) として扱います。 |
式レポートレベル
式レポート応答に含めるデータの量。
列挙型 | |
---|---|
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 | 一致しない中括弧や変数の再定義などのエラー。 |
テスト結果
テストの状態、テスト失敗の説明とソースの位置を含むテスト結果メッセージ。
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[] | 部分式 |
値の数
Expression が特定の ExpressionValue に評価された回数のタプル。
JSON表現 | |
---|---|
{ "value": value, "count": integer } |
田畑 | |
---|---|
value | 式の戻り値 |
count | 式が返された回数。 |