Method: projects.test

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

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インスタンスのコレクションです。 TestSuiteprojects.test呼び出し内でインラインで参照することも、リリース前チェックとしてReleaseオブジェクトの一部として参照することもできます。

JSON表現
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
田畑
testCases[]

object ( TestCase )

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

テストケース

TestCaseメッセージは、要求コンテキストと、指定されたコンテキストが許可されるか拒否されるかに関する期待を提供します。テスト ケースでは、サービスが提供する関数への関数呼び出しを模擬するために、 requestresosurce 、およびfunctionMocksを指定できます。

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

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

Cloud Firestore ( requestresource ) および Cloud Storage for Firebase ( requestresource ) の関連リファレンス ドキュメントもご覧ください。

JSON表現
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
田畑
expectation

enum ( Expectation )

テストの期待。

request

value ( Value format)

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

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

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

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

resource

value ( Value format)

リクエストが実行される前に永続ストレージに表示されるオプションのリソース値。

リソースの種類はrequest.path値によって異なります。

functionMocks[]

object ( FunctionMock )

サービス定義関数のオプションのルール関数モック。設定されていない場合、サービス定義のルール関数はエラーを返すことが想定されており、テスト結果に影響を与える場合とそうでない場合があります。

pathEncoding

enum ( PathEncoding )

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

expressionReportLevel

enum ( ExpressionReportLevel )

応答に何を含める必要があるかを指定します。

期待

サポートされているテスト ケースの期待値のセット。

列挙型
EXPECTATION_UNSPECIFIED不特定の期待。
ALLOW許容される結果が期待されます。
DENY拒否される結果が予想されます。

関数モック

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

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

Argマッチャーが異なる限り、特定の関数名に対して複数のFunctionMockを提供できます。すべてのArg値がArg.any_valueである特定のオーバーロードには関数が 1 つだけ存在する場合があります。

「セキュリティ ルール言語の関数」も参照してください。

JSON表現
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
田畑
function

string

関数の名前。

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

args[]

object ( Arg )

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

result

object ( Result )

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

引数

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

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次のいずれか 1 つだけです。
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次のいずれか 1 つだけです。
value

value ( Value format)

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

undefined

object

結果は未定義です。これは、結果を計算できなかったことを意味します。

パスエンコーディング

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

列挙型
ENCODING_UNSPECIFIEDエンコーディングが指定されていません。デフォルトは「URL_ENCODED」動作です。
URL_ENCODEDパスセグメントを URL エンコードされたものとして扱いますが、エンコードされていない区切り文字 (「/」) が使用されます。これはデフォルトの動作です。
PLAIN合計パスを URL エンコードされていないもの (生など) として扱います。

式レポートレベル

式レポート応答に含めるデータの量。

列挙型
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一致しない中括弧や変数の再定義などのエラー。

テスト結果

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

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テストは失敗です。

関数呼び出し

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

JSON表現
{
  "function": string,
  "args": [
    value
  ]
}
田畑
function

string

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

args[]

value ( Value format)

関数に提供された引数。

訪問された式

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

JSON表現
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
田畑
sourcePosition

object ( SourcePosition )

式がアクセスされたSource内の位置。

value

value ( Value format)

訪問した式の評価値 (true/false など)

式レポート

ファイル内のどこで式が見つかったのか、またその式が使用中にどのように評価されたのかを説明します。

JSON表現
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
田畑
sourcePosition

object ( SourcePosition )

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

values[]

object ( ValueCount )

この式が見つかったときに評価される値。

children[]

object ( ExpressionReport )

部分式

値の数

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

JSON表現
{
  "value": value,
  "count": integer
}
田畑
value

value ( Value format)

式の戻り値

count

integer

式が返された回数。