Method: projects.test

구문 및 의미의 정확성을 위한 테스트 Source . 존재하는 문제가 있는 경우 설명, 심각도 및 소스 위치와 함께 호출자에게 반환됩니다.

테스트 메소드는 Source 로 실행될 수 있습니다. 소스 전달 Source 새로운 규칙을 단위 테스트하는 데 유용합니다.

REST API를 사용하여 실행되는 테스트는 프로덕션 데이터베이스, 스토리지 버킷 및 관련 rsesource를 사용합니다. 이러한 테스트에는 사용 요금이 발생할 수 있습니다. 규칙 테스트를 수행하려면 Firebase 로컬 에뮬레이터 제품군을 사용하는 것이 좋습니다. 사용 요금 없이 오프라인, 비프로덕션 리소스에서 테스트를 실행할 수 있기 때문입니다.

다음은 사용자가 자신의 사용자 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 인스턴스 모음입니다. TestSuite projects.test 호출 내에서 인라인으로 참조되거나 사전 릴리스 검사로서 Release 개체의 일부로 참조될 수 있습니다.

JSON 표현
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
필드
testCases[]

object ( TestCase )

TestSuite 와 관련된 테스트 케이스 모음입니다.

테스트케이스

TestCase 메시지는 요청 컨텍스트와 해당 컨텍스트가 허용되는지 거부되는지에 대한 기대치를 제공합니다. 테스트 케이스는 서비스 제공 함수에 대한 함수 호출을 모의하기 위해 request , resosurcefunctionMocks 지정할 수 있습니다.

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)

요청 컨텍스트.

요청 컨텍스트의 정확한 형식은 서비스에 따라 다릅니다. 요청에서 지원되는 필드 및 유형에 대한 자세한 내용은 해당 서비스 설명서를 참조하세요. 최소한 모든 서비스는 다음 필드와 유형을 지원합니다.

요청 필드 유형
인증.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 거부된 결과를 예상합니다.

FunctionMock

모의 규칙 함수 정의.

Mock은 대상 서비스에서 선언한 함수를 참조해야 합니다. 함수 args 및 result의 유형은 테스트 시 추론됩니다. arg 또는 결과 값이 함수 유형 선언과 호환되지 않는 경우 요청은 유효하지 않은 것으로 간주됩니다.

Arg 일치자가 구별되는 한, 주어진 함수 이름에 대해 둘 이상의 FunctionMock 제공될 수 있습니다. 모든 Arg 값이 Arg.any_value 인 특정 오버로드에 대해 하나의 함수만 있을 수 있습니다.

보안 규칙 언어의 함수 도 참조하세요.

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.
}
필드
Union 필드 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.
}
필드
Union 필드 type . 지원되는 결과 값. type 다음 중 하나만 될 수 있습니다.
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 메시지의 File 인덱스를 포함하여 Source 콘텐츠의 위치입니다. 디버그 목적으로 사용됩니다.

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 )

하위 표현식

값 개수

표현식이 특정 ExpressionValue로 평가된 횟수에 대한 튜플입니다.

JSON 표현
{
  "value": value,
  "count": integer
}
필드
value

value ( Value format)

표현식의 반환 값

count

integer

해당 표현식이 반환된 횟수입니다.