github.com/swisspost/terratest@v0.0.0-20230214120104-7ec6de2e1ae0/test/azure/terraform_azure_loadbalancer_example_test.go (about) 1 //go:build azure 2 // +build azure 3 4 // NOTE: We use build tags to differentiate azure testing because we currently do not have azure access setup for 5 // CircleCI. 6 7 package test 8 9 import ( 10 "testing" 11 12 "github.com/gruntwork-io/terratest/modules/azure" 13 "github.com/gruntwork-io/terratest/modules/random" 14 "github.com/gruntwork-io/terratest/modules/terraform" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestTerraformAzureLoadBalancerExample(t *testing.T) { 19 t.Parallel() 20 21 // subscriptionID is overridden by the environment variable "ARM_SUBSCRIPTION_ID" 22 subscriptionID := "" 23 uniquePostfix := random.UniqueId() 24 privateIPForLB02 := "10.200.2.10" 25 26 // Configure Terraform setting up a path to Terraform code. 27 terraformOptions := &terraform.Options{ 28 // The path to where our Terraform code is located 29 TerraformDir: "../../examples/azure/terraform-azure-loadbalancer-example", 30 31 // Variables to pass to our Terraform code using -var options 32 Vars: map[string]interface{}{ 33 "postfix": uniquePostfix, 34 "lb_private_ip": privateIPForLB02, 35 // "location": "East US", 36 }, 37 } 38 39 // At the end of the test, run `terraform destroy` to clean up any resources that were created. 40 defer terraform.Destroy(t, terraformOptions) 41 42 // Run `terraform init` and `terraform apply`. Fail the test if there are any errors. 43 terraform.InitAndApply(t, terraformOptions) 44 45 // Run `terraform output` to get the values of output variables 46 resourceGroupName := terraform.Output(t, terraformOptions, "resource_group_name") 47 expectedLBPublicName := terraform.Output(t, terraformOptions, "lb_public_name") 48 expectedLBPrivateName := terraform.Output(t, terraformOptions, "lb_private_name") 49 expectedLBNoFEConfigName := terraform.Output(t, terraformOptions, "lb_default_name") 50 expectedLBPublicFeConfigName := terraform.Output(t, terraformOptions, "lb_public_fe_config_name") 51 expectedLBPrivateFeConfigName := terraform.Output(t, terraformOptions, "lb_private_fe_config_static_name") 52 expectedLBPrivateIP := terraform.Output(t, terraformOptions, "lb_private_ip_static") 53 54 actualLBDoesNotExist := azure.LoadBalancerExists(t, "negative-test", resourceGroupName, subscriptionID) 55 assert.False(t, actualLBDoesNotExist) 56 57 t.Run("LoadBalancer_Public", func(t *testing.T) { 58 // Check Public Load Balancer exists. 59 actualLBPublicExists := azure.LoadBalancerExists(t, expectedLBPublicName, resourceGroupName, subscriptionID) 60 assert.True(t, actualLBPublicExists) 61 62 // Check Frontend Configuration for Load Balancer. 63 actualLBPublicFeConfigNames := azure.GetLoadBalancerFrontendIPConfigNames(t, expectedLBPublicName, resourceGroupName, subscriptionID) 64 assert.Contains(t, actualLBPublicFeConfigNames, expectedLBPublicFeConfigName) 65 66 // Check Frontend Configuration Public Address and Public IP assignment 67 actualLBPublicIPAddress, actualLBPublicIPType := azure.GetIPOfLoadBalancerFrontendIPConfig(t, expectedLBPublicFeConfigName, expectedLBPublicName, resourceGroupName, subscriptionID) 68 assert.NotEmpty(t, actualLBPublicIPAddress) 69 assert.Equal(t, azure.PublicIP, actualLBPublicIPType) 70 }) 71 72 t.Run("LoadBalancer_Private", func(t *testing.T) { 73 // Check Private Load Balancer exists. 74 actualLBPrivateExists := azure.LoadBalancerExists(t, expectedLBPrivateName, resourceGroupName, subscriptionID) 75 assert.True(t, actualLBPrivateExists) 76 77 // Check Frontend Configuration for Load Balancer. 78 actualLBPrivateFeConfigNames := azure.GetLoadBalancerFrontendIPConfigNames(t, expectedLBPrivateName, resourceGroupName, subscriptionID) 79 assert.Equal(t, 2, len(actualLBPrivateFeConfigNames)) 80 assert.Contains(t, actualLBPrivateFeConfigNames, expectedLBPrivateFeConfigName) 81 82 // Check Frontend Configuration Private IP Type and Address. 83 actualLBPrivateIPAddress, actualLBPrivateIPType := azure.GetIPOfLoadBalancerFrontendIPConfig(t, expectedLBPrivateFeConfigName, expectedLBPrivateName, resourceGroupName, subscriptionID) 84 assert.NotEmpty(t, actualLBPrivateIPAddress) 85 assert.Equal(t, expectedLBPrivateIP, actualLBPrivateIPAddress) 86 assert.Equal(t, azure.PrivateIP, actualLBPrivateIPType) 87 }) 88 89 t.Run("LoadBalancer_Default", func(t *testing.T) { 90 // Check No Frontend Config Load Balancer exists. 91 actualLBNoFEConfigExists := azure.LoadBalancerExists(t, expectedLBNoFEConfigName, resourceGroupName, subscriptionID) 92 assert.True(t, actualLBNoFEConfigExists) 93 94 // Check for No Frontend Configuration for Load Balancer. 95 actualLBNoFEConfigFeConfigNames := azure.GetLoadBalancerFrontendIPConfigNames(t, expectedLBNoFEConfigName, resourceGroupName, subscriptionID) 96 assert.Equal(t, 0, len(actualLBNoFEConfigFeConfigNames)) 97 }) 98 }