Method: projects.test

Source를 테스트하여 구문 및 의미 체계가 정확한지 확인합니다. 문제가 있는 경우 설명, 심각도, 소스 위치와 함께 호출자에게 반환됩니다.

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

REST API를 사용하여 실행되는 테스트에는 프로덕션 데이터베이스, 스토리지 버킷, 관련 리소스 소스가 사용됩니다. 이러한 테스트에는 사용 요금이 부과될 수 있습니다. 사용 요금 없이 오프라인 비프로덕션 리소스에서 테스트를 실행할 수 있으므로 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 인스턴스 모음입니다. TestSuiteprojects.test 호출 내에서 인라인으로 참조되거나 출시 전 검사로 Release 객체의 일부로 참조될 수 있습니다.

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

object (TestCase)

TestSuite와 연결된 테스트 사례 모음입니다.

테스트 사례

TestCase 메시지는 요청 컨텍스트와 지정된 컨텍스트의 허용 또는 거부 여부에 대한 기대치를 제공합니다. 테스트 사례에서는 request, resosurce, functionMocks를 지정하여 서비스에서 제공하는 함수의 함수 호출을 모의 처리할 수 있습니다.

request 객체는 요청 시 존재하는 컨텍스트를 나타냅니다.

resource는 요청이 실행되기 전에 영구 스토리지에 표시되는 대상 리소스 (예: GCS 객체 또는 Firestore 문서의 메타데이터) 값입니다.

Cloud Firestore ( 요청, 리소스) 및 Firebase용 Cloud Storage (요청, 리소스) 관련 참조 문서도 확인하세요.

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
params 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인 특정 오버로드에는 함수가 하나만 있을 수 있습니다.

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

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은 다음 중 하나여야 합니다.
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

결과가 정의되지 않았습니다. 즉, 결과를 계산할 수 없습니다.

경로 인코딩

사용된 경로 인코딩 유형입니다.

열거형
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)

방문한 표현식에 대해 평가된 값입니다. 예: 참/거짓

표현식 보고서

파일에서 표현식이 있는 위치와 사용 과정에서 표현식이 평가된 대상을 설명합니다.

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

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