Some checks failed
Code Quality & Security Scan / TFLint (push) Successful in 24s
Code Quality & Security Scan / Terraform Destroy (push) Has been skipped
Code Quality & Security Scan / Tfsec Security Scan (push) Successful in 29s
Code Quality & Security Scan / Checkov Security Scan (push) Successful in 44s
Code Quality & Security Scan / Terraform Tests (push) Failing after 35s
Code Quality & Security Scan / SonarQube Trigger (push) Has been skipped
Code Quality & Security Scan / Terraform Init (push) Has been skipped
Code Quality & Security Scan / Terraform Apply (push) Has been skipped
- Implemented 21 test cases across 3 test suites: * resource_groups.tftest.hcl (7 tests): Default behavior and validation * custom_configuration.tftest.hcl (6 tests): Custom configurations * variable_validation.tftest.hcl (8 tests): Input validation and edge cases - Updated CI/CD pipeline (.gitea/workflows/sonarqube.yaml): * Added terraform-test job with format check and test execution * Generates and uploads test reports (30-day retention) * Runs after security scanning, before deployment - Added comprehensive documentation: * TESTING.md: Complete testing guide with best practices * TEST_SUMMARY.md: Implementation summary and statistics * TESTING_QUICK_START.md: Quick reference for developers * TESTING_WORKFLOW.md: Visual workflow diagrams - Updated existing documentation: * README.md: Added testing section with examples * CLAUDE.md: Added test commands to workflow - Test coverage includes: * Resource creation and configuration validation * Tag category and tag management * Variable validation and defaults * Custom configurations and overrides * Edge cases and error handling * Output generation verification Tests use mock credentials for infrastructure-independent execution. Requires Terraform >= 1.6.0 for native testing framework.
126 lines
2.9 KiB
Markdown
126 lines
2.9 KiB
Markdown
# Terraform Testing Quick Start
|
|
|
|
## Quick Commands
|
|
|
|
```bash
|
|
# Run all tests
|
|
terraform test
|
|
|
|
# Run tests with verbose output
|
|
terraform test -verbose
|
|
|
|
# Check formatting
|
|
terraform fmt -check -recursive
|
|
|
|
# Auto-format all files
|
|
terraform fmt -recursive
|
|
|
|
# Validate configuration
|
|
terraform validate
|
|
```
|
|
|
|
## Pre-Commit Checklist
|
|
|
|
Before committing changes, ensure:
|
|
|
|
- [ ] Code is formatted: `terraform fmt -recursive`
|
|
- [ ] Configuration is valid: `terraform validate`
|
|
- [ ] All tests pass: `terraform test`
|
|
- [ ] No sensitive data is hardcoded
|
|
|
|
## Test File Locations
|
|
|
|
- `tests/resource_groups.tftest.hcl` - Default resource group tests
|
|
- `tests/custom_configuration.tftest.hcl` - Custom configuration tests
|
|
- `tests/variable_validation.tftest.hcl` - Variable validation tests
|
|
|
|
## Common Test Scenarios
|
|
|
|
### Adding a New Test
|
|
|
|
1. Choose the appropriate test file based on what you're testing
|
|
2. Add a new `run` block with a descriptive name
|
|
3. Use `command = plan` for most tests
|
|
4. Add assertions with clear error messages
|
|
5. Run the specific test to verify it works
|
|
|
|
Example:
|
|
```hcl
|
|
run "my_new_test" {
|
|
command = plan
|
|
|
|
variables {
|
|
resource_groups = {
|
|
test = { name = "Test" }
|
|
}
|
|
}
|
|
|
|
assert {
|
|
condition = <your_condition>
|
|
error_message = "Clear description of what failed"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Testing a Specific Feature
|
|
|
|
```bash
|
|
# Run specific test file
|
|
terraform test -filter=tests/custom_configuration.tftest.hcl
|
|
|
|
# Run with verbose output for debugging
|
|
terraform test -verbose -filter=tests/variable_validation.tftest.hcl
|
|
```
|
|
|
|
## CI/CD Pipeline
|
|
|
|
Tests run automatically on:
|
|
- Every push to master
|
|
- Every pull request
|
|
|
|
Pipeline order:
|
|
1. TFLint
|
|
2. Tfsec
|
|
3. Checkov
|
|
4. **Terraform Test** ⬅ Your tests
|
|
5. SonarQube
|
|
6. Terraform Init/Plan/Apply
|
|
|
|
## Troubleshooting
|
|
|
|
### Test Fails Locally But Not in CI
|
|
|
|
- Check Terraform version: `terraform version` (need >= 1.6.0)
|
|
- Ensure environment variables are not interfering
|
|
- Check for local `terraform.tfvars` overriding test values
|
|
|
|
### Test Fails in CI But Not Locally
|
|
|
|
- Review CI job output for environment-specific issues
|
|
- Verify mock credentials are properly set in CI
|
|
- Check for provider version mismatches
|
|
|
|
### Format Check Fails
|
|
|
|
```bash
|
|
# Fix automatically
|
|
terraform fmt -recursive
|
|
|
|
# Verify
|
|
terraform fmt -check -recursive
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Write tests for new features**: Every new feature should have corresponding tests
|
|
2. **Test edge cases**: Include tests for empty values, minimum/maximum values, etc.
|
|
3. **Use descriptive names**: Test names should clearly indicate what they test
|
|
4. **Clear error messages**: Help future developers understand failures quickly
|
|
5. **Keep tests focused**: One test should verify one specific behavior
|
|
|
|
## Need Help?
|
|
|
|
- Full documentation: [TESTING.md](../TESTING.md)
|
|
- Terraform test docs: https://developer.hashicorp.com/terraform/language/tests
|
|
- Module README: [README.md](../README.md)
|