규칙 작성에 설명된 대로 template 명령을 사용하여 규칙을 생성했다면, SDK와 생성된 규칙과 함께 제공되는 테스트 기능을 활용할 수 있습니다.
원하는 경우 자신만의 테스트 기능을 작성하거나 SDK에서 생성된 기능을 수정할 수도 있습니다. 그러나 이 페이지의 지침은 적용되지 않습니다.
이전 페이지를 기반으로 규칙을 작성했다고 가정하고, SDK의 템플릿 기능으로 생성된 main_test.rego 파일을 열고 rules/MY_RULE/fixtures/ 폴더 내의 파일 이름으로 fixture 필드를 구성합니다. 템플릿 기능은 지원되는 형식당 하나의 파일을 생성하고 모든 파일에 대해 테스트를 실행하도록 구성했지만, 원하는 대로 픽스처 파일을 제거할 수 있습니다.
rules/MY_RULE/fixtures 아래에 리소스를 저장할 픽스처 파일을 생성하거나 수정합니다. 이 파일은 어떤 이름이든 가질 수 있습니다. 예를 들어 denied.tf 및 allowed.tf를 살펴보십시오:
파일은 어떤 이름이든 가질 수 있지만, 파일 확장자에 특히 주의하십시오. Terraform Plan JSON 출력이 포함된 픽스처 파일을 테스트하려는 경우 특히 주의하십시오. Snyk 테스트 라이브러리가 일반 JSON과 Terraform Plan JSON 출력을 구별할 수 있도록 파일 이름에 .json.tfplan 파일 확장자가 있는지 확인하십시오.
테스트 케이스의 want_msgs 필드에는 ["input.resource.aws_redshift_cluster[denied].tags"]와 같이 거부 규칙이 평가하고 반환할 것으로 예상되는 리소스의 msg 필드에 해당하는 메시지 필드를 추가해야 합니다.
want_msgs 필드는 해당 Rego 규칙의 계산된 msg 필드에 해당하는 하드코딩된 값을 포함하는 배열이어야 합니다.
모든 테스트를 실행하려면 다음 명령을 실행하십시오:
rules/ 폴더에 세 가지 다른 규칙이 있다고 가정하면 테스트가 성공적으로 통과하면 다음과 같은 출력이 표시됩니다:
그러나 테스트 중 하나라도 실패하면 다음과 같은 출력이 표시됩니다:
rule/ 폴더에 둘 이상의 규칙이 있는 경우 다음 명령을 실행하여 특정 테스트를 대상으로 지정할 수 있습니다:
출력은 다음과 같습니다:
출력에 대한 자세한 내용이 필요하면 --explain notes 옵션을 추가하십시오:
이것은 실패한 테스트를 디버깅하는 데 사용할 더 많은 세부 정보를 보여주는 출력을 제공합니다.
현재 폴더에 생성된 규칙 외의 파일이 있는 경우, --ignore 옵션을 사용하여 테스트와 관련 없는 폴더와 파일을 제외하는 것을 고려하십시오. template 명령을 사용한 경우 lib/ 및 rules를 제외하지 마십시오. 이는 테스트 속도를 높이고 Rego가 Rego가 아닌 파일을 평가하려고 할 때 발생하는 문제를 피할 수 있습니다.