Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Terraform Test File Structure
📖 Scenario: You are working on a Terraform project to manage cloud infrastructure. To ensure your Terraform code is organized and testable, you want to create a proper test file structure.
🎯 Goal: Create a Terraform test file structure with a main configuration file and a test file that references it.
📋 What You'll Learn
Create a Terraform configuration file named main.tf with a simple resource
Create a test file named main_test.tf that references the resource from main.tf
Use valid Terraform syntax and best practices for file naming and structure
💡 Why This Matters
🌍 Real World
Organizing Terraform files properly helps teams manage infrastructure code clearly and test resources effectively.
💼 Career
Understanding Terraform file structure and testing is essential for cloud engineers and DevOps professionals managing infrastructure as code.
Progress0 / 4 steps
1
Create main.tf with a simple resource
Create a Terraform configuration file named main.tf that defines an AWS S3 bucket resource called example_bucket with the bucket name my-example-bucket.
Terraform
Hint
Use the resource block with type aws_s3_bucket and name example_bucket. Set the bucket attribute to "my-example-bucket".
2
Create main_test.tf with a test reference
Create a Terraform test file named main_test.tf that references the example_bucket resource from main.tf using a data block of type aws_s3_bucket and name test_bucket. Set the bucket attribute to aws_s3_bucket.example_bucket.bucket.
Terraform
Hint
Use a data block to reference the existing bucket resource by its bucket name.
3
Add a terraform block with required provider
Add a terraform block to main.tf specifying the required provider aws with version constraint "~> 4.0".
Terraform
Hint
The terraform block should include required_providers with aws provider and version constraint.
4
Add provider configuration for AWS
Add a provider block for aws in main.tf with the region set to us-east-1.
Terraform
Hint
Add a provider block for AWS with the region attribute set.
Practice
(1/5)
1. What is the main reason to keep Terraform test files separate from production code files?
easy
A. Because Terraform does not support test files inside the main folder
B. To avoid mixing test code with production code and keep the project organized
C. To reduce the size of the Terraform state file
D. Because test files must be written in a different language
Solution
Step 1: Understand file organization purpose
Separating test files helps keep the project clean and easier to manage by not mixing test and production code.
Step 2: Recognize Terraform best practices
Terraform encourages clear separation to avoid confusion and accidental deployment of test code.
Final Answer:
To avoid mixing test code with production code and keep the project organized -> Option B
Quick Check:
Separate test files = organized project [OK]
Hint: Keep test files separate to avoid confusion [OK]
Common Mistakes:
Thinking test files must be in main folder
Believing test files affect state size
Assuming test files require different language
2. Which of the following is the correct folder structure for organizing Terraform files including tests?
easy
A. /main.tf, /variables.tf, /outputs.tf, /test/main_test.tf
B. /main.tf, /variables.tf, /outputs.tf, /modules/tests/test_main.tf
C. /main.tf, /variables.tf, /outputs.tf, /tests/test_main.tf
D. /main.tf, /variables.tf, /outputs.tf, /tests/main_test.tf
Solution
Step 1: Identify standard test folder naming
Tests are usually placed in a separate folder named 'tests' at the root level for clarity.
Step 2: Check file naming conventions
Test files often have '_test' suffix to indicate their purpose, e.g., 'main_test.tf'.
Final Answer:
/main.tf, /variables.tf, /outputs.tf, /tests/main_test.tf -> Option D
Quick Check:
Tests folder with *_test.tf files = correct structure [OK]
Hint: Use 'tests' folder with *_test.tf files [OK]
Running terraform apply gives an error about duplicate resource definitions. What is the likely cause?
medium
A. Outputs are missing in outputs.tf
B. Variables are defined twice in variables.tf
C. Terraform is loading test_main.tf and main.tf causing duplicate resources
D. Terraform state file is corrupted
Solution
Step 1: Analyze error cause
Duplicate resource errors usually mean Terraform sees the same resource defined more than once.
Step 2: Check file loading
If test files are accidentally loaded (e.g., by running terraform in /tests), resources duplicate with main.tf definitions.
Final Answer:
Terraform is loading test_main.tf and main.tf causing duplicate resources -> Option C
Quick Check:
Duplicate resources = multiple files loaded [OK]
Hint: Run terraform only in root, not in tests folder [OK]
Common Mistakes:
Blaming variables or outputs for duplicate resource error
Ignoring that test files can cause duplicates if loaded
Assuming state file corruption without checking files
5. You want to reuse infrastructure code in multiple projects and keep tests separate. Which folder structure best supports this using Terraform modules and tests?
hard
A. /modules/network/main.tf, /modules/network/variables.tf, /tests/network_test.tf, /main.tf
B. /network/main.tf, /network/variables.tf, /tests/network_test.tf, /main.tf
C. /modules/network/main.tf, /tests/network/main_test.tf, /main.tf
D. /modules/network/main.tf, /modules/network/tests/network_test.tf, /main.tf
Solution
Step 1: Identify module folder best practice
Modules should be inside a 'modules' folder with their own files for reuse.
Step 2: Separate tests outside modules
Tests should be in a top-level 'tests' folder to avoid mixing with reusable module code.
Final Answer:
/modules/network/main.tf, /modules/network/variables.tf, /tests/network_test.tf, /main.tf -> Option A
Quick Check:
Modules in 'modules', tests in 'tests' folder [OK]
Hint: Keep modules and tests in separate top-level folders [OK]