규칙 테스트

규칙 작성에 설명된 대로 template 명령을 사용하여 규칙을 생성했다면, SDK와 생성된 규칙과 함께 제공되는 테스트 기능을 활용할 수 있습니다.

circle-info

원하는 경우 자신만의 테스트 기능을 작성하거나 SDK에서 생성된 기능을 수정할 수도 있습니다. 그러나 이 페이지의 지침은 적용되지 않습니다.

이전 페이지를 기반으로 규칙을 작성했다고 가정하고, SDK의 템플릿 기능으로 생성된 main_test.rego 파일을 열고 rules/MY_RULE/fixtures/ 폴더 내의 파일 이름으로 fixture 필드를 구성합니다. 템플릿 기능은 지원되는 형식당 하나의 파일을 생성하고 모든 파일에 대해 테스트를 실행하도록 구성했지만, 원하는 대로 픽스처 파일을 제거할 수 있습니다.

rules/MY_RULE/fixtures 아래에 리소스를 저장할 픽스처 파일을 생성하거나 수정합니다. 이 파일은 어떤 이름이든 가질 수 있습니다. 예를 들어 denied.tfallowed.tf를 살펴보십시오:

circle-info

파일은 어떤 이름이든 가질 수 있지만, 파일 확장자에 특히 주의하십시오. Terraform Plan JSON 출력이 포함된 픽스처 파일을 테스트하려는 경우 특히 주의하십시오. Snyk 테스트 라이브러리가 일반 JSON과 Terraform Plan JSON 출력을 구별할 수 있도록 파일 이름에 .json.tfplan 파일 확장자가 있는지 확인하십시오.

rules/MY_RULE/fixtures/denied.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"
}
rules/MY_RULE/fixtures/allowed.tf
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 필드에는 ["input.resource.aws_redshift_cluster[denied].tags"]와 같이 거부 규칙이 평가하고 반환할 것으로 예상되는 리소스의 msg 필드에 해당하는 메시지 필드를 추가해야 합니다.

circle-info

want_msgs 필드는 해당 Rego 규칙의 계산된 msg 필드에 해당하는 하드코딩된 값을 포함하는 배열이어야 합니다.

모든 테스트를 실행하려면 다음 명령을 실행하십시오:

rules/ 폴더에 세 가지 다른 규칙이 있다고 가정하면 테스트가 성공적으로 통과하면 다음과 같은 출력이 표시됩니다:

그러나 테스트 중 하나라도 실패하면 다음과 같은 출력이 표시됩니다:

rule/ 폴더에 둘 이상의 규칙이 있는 경우 다음 명령을 실행하여 특정 테스트를 대상으로 지정할 수 있습니다:

출력은 다음과 같습니다:

출력에 대한 자세한 내용이 필요하면 --explain notes 옵션을 추가하십시오:

이것은 실패한 테스트를 디버깅하는 데 사용할 더 많은 세부 정보를 보여주는 출력을 제공합니다.

circle-info

현재 폴더에 생성된 규칙 외의 파일이 있는 경우, --ignore 옵션을 사용하여 테스트와 관련 없는 폴더와 파일을 제외하는 것을 고려하십시오. template 명령을 사용한 경우 lib/rules를 제외하지 마십시오. 이는 테스트 속도를 높이고 Rego가 Rego가 아닌 파일을 평가하려고 할 때 발생하는 문제를 피할 수 있습니다.

Last updated