규칙 테스트
만약 규칙 작성에서 보여진대로 template
명령을 사용하여 규칙을 생성했다면, SDK 및 생성된 규칙과 함께 제공되는 테스팅 기능도 활용할 수 있습니다.
이전 페이지를 기반으로 규칙을 작성했다면, SDK의 템플릿 기능이 생성한 main_test.rego
파일을 열고, fixture
필드를 rules/MY_RULE/fixtures/
폴더 내 파일 이름으로 구성하세요. 템플릿 기능은 지원하는 각 형식에 대해 한 파일씩 생성하고 모든 형식에 대해 테스트를 실행하도록 구성했지만, 필요에 따라 fixture 파일을 제거할 수 있습니다.
규칙에 대한 자원을 저장하기 위해 rules/MY_RULE/fixtures
아래에 fixture 파일을 생성하거나 수정하세요. 이 파일들은 아무 이름이나 가질 수 있으며, denied.tf
와 allowed.tf
와 같은 파일을 예로 들 수 있습니다:
resource "aws_redshift_cluster" "denied" {
cluster_identifier = "tf-redshift-cluster"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
cluster_type = "single-node"
}
resource "aws_redshift_cluster" "allowed" {
cluster_identifier = "tf-redshift-cluster"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
cluster_type = "single-node"
tags {
owner = "snyk"
}
}
테스트 케이스의 want_msgs
필드에는, 거부 규칙이 평가하고 반환할 것으로 예상되는 자원의 msg
필드를 추가해야 합니다. 예를 들어 ["input.resource.aws_redshift_cluster[denied].tags"]
와 같습니다.
package rules
import data.lib
import data.lib.testing
test_MY_RULE {
# 규칙이 허용되는 경우의 테스트 케이스를 포함하는 배열
allowed_test_cases := [{
"want_msgs": [],
"fixture": "allowed.tf",
}]
# 규칙이 거부되는 경우의 테스트 케이스를 포함하는 배열
denied_test_cases := [{
"want_msgs": ["input.resource.aws_redshift_cluster[denied].tags"],
"fixture": "denied.tf",
}]
test_cases := array.concat(allowed_test_cases, denied_test_cases)
testing.evaluate_test_cases("MY_RULE", "./rules/MY_RULE/fixtures", test_cases)
}
모든 테스트를 실행하려면 다음 명령어를 실행하세요:
snyk-iac-rules test
테스트가 성공하면, rules/
폴더에 세 가지 다른 규칙이 있다고 가정하면 다음과 같은 출력을 볼 수 있습니다:
성공: 3/3
그러나 이 중 하나라도 실패하면 다음과 같은 출력을 확인할 수 있습니다:
data.rules.test_MY_RULE: 실패 (1.12234ms)
실패: 2/3
rules/
폴더에 규칙이 하나 이상 있는 경우 다음 명령어를 실행하여 특정 테스트를 대상으로 할 수 있습니다:
snyk-iac-rules test --run test_MY_RULE
다음과 같은 출력이 됩니다:
Rego 테스트 케이스 실행 중...
data.rules.test_MY_RULE: 실패 (1.040468ms)
--------------------------------------------------------------------------------
실패: 1/1
출력에 대해 더 많은 세부 정보가 필요하면 --explain notes
옵션을 추가하세요:
snyk-iac-rules test --run test_MY_RULE --explain notes
이렇게 하면 실패한 테스트의 디버그에 사용할 수 있는 추가 세부 정보가 출력됩니다.
Last updated