/aws/resource_aws_dx_transit_virtual_interface_test.go

https://github.com/terraform-providers/terraform-provider-aws · Go · 261 lines · 242 code · 17 blank · 2 comment · 5 complexity · eef92101e30f60872a5db9b244cb7d5b MD5 · raw file

  1. package aws
  2. import (
  3. "fmt"
  4. "os"
  5. "regexp"
  6. "strconv"
  7. "testing"
  8. "github.com/aws/aws-sdk-go/aws"
  9. "github.com/aws/aws-sdk-go/service/directconnect"
  10. "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
  11. "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
  12. "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
  13. )
  14. func TestAccAwsDxTransitVirtualInterface_serial(t *testing.T) {
  15. testCases := map[string]func(t *testing.T){
  16. "basic": testAccAwsDxTransitVirtualInterface_basic,
  17. "tags": testAccAwsDxTransitVirtualInterface_Tags,
  18. }
  19. for name, tc := range testCases {
  20. tc := tc
  21. t.Run(name, func(t *testing.T) {
  22. tc(t)
  23. })
  24. }
  25. }
  26. func testAccAwsDxTransitVirtualInterface_basic(t *testing.T) {
  27. key := "DX_CONNECTION_ID"
  28. connectionId := os.Getenv(key)
  29. if connectionId == "" {
  30. t.Skipf("Environment variable %s is not set", key)
  31. }
  32. var vif directconnect.VirtualInterface
  33. resourceName := "aws_dx_transit_virtual_interface.test"
  34. dxGatewayResourceName := "aws_dx_gateway.test"
  35. rName := fmt.Sprintf("tf-testacc-transit-vif-%s", acctest.RandString(9))
  36. amzAsn := acctest.RandIntRange(64512, 65534)
  37. bgpAsn := acctest.RandIntRange(64512, 65534)
  38. vlan := acctest.RandIntRange(2049, 4094)
  39. resource.Test(t, resource.TestCase{
  40. PreCheck: func() { testAccPreCheck(t) },
  41. Providers: testAccProviders,
  42. CheckDestroy: testAccCheckAwsDxTransitVirtualInterfaceDestroy,
  43. Steps: []resource.TestStep{
  44. {
  45. Config: testAccDxTransitVirtualInterfaceConfig_basic(connectionId, rName, amzAsn, bgpAsn, vlan),
  46. Check: resource.ComposeTestCheckFunc(
  47. testAccCheckAwsDxTransitVirtualInterfaceExists(resourceName, &vif),
  48. resource.TestCheckResourceAttr(resourceName, "address_family", "ipv4"),
  49. resource.TestCheckResourceAttrSet(resourceName, "amazon_address"),
  50. resource.TestCheckResourceAttrSet(resourceName, "amazon_side_asn"),
  51. testAccMatchResourceAttrRegionalARN(resourceName, "arn", "directconnect", regexp.MustCompile(fmt.Sprintf("dxvif/%s", aws.StringValue(vif.VirtualInterfaceId)))),
  52. resource.TestCheckResourceAttrSet(resourceName, "aws_device"),
  53. resource.TestCheckResourceAttr(resourceName, "bgp_asn", strconv.Itoa(bgpAsn)),
  54. resource.TestCheckResourceAttrSet(resourceName, "bgp_auth_key"),
  55. resource.TestCheckResourceAttr(resourceName, "connection_id", connectionId),
  56. resource.TestCheckResourceAttrSet(resourceName, "customer_address"),
  57. resource.TestCheckResourceAttrPair(resourceName, "dx_gateway_id", dxGatewayResourceName, "id"),
  58. resource.TestCheckResourceAttr(resourceName, "jumbo_frame_capable", "true"),
  59. resource.TestCheckResourceAttr(resourceName, "mtu", "1500"),
  60. resource.TestCheckResourceAttr(resourceName, "name", rName),
  61. resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
  62. resource.TestCheckResourceAttr(resourceName, "vlan", strconv.Itoa(vlan)),
  63. ),
  64. },
  65. {
  66. Config: testAccDxTransitVirtualInterfaceConfig_updated(connectionId, rName, amzAsn, bgpAsn, vlan),
  67. Check: resource.ComposeTestCheckFunc(
  68. testAccCheckAwsDxTransitVirtualInterfaceExists(resourceName, &vif),
  69. resource.TestCheckResourceAttr(resourceName, "address_family", "ipv4"),
  70. resource.TestCheckResourceAttrSet(resourceName, "amazon_address"),
  71. resource.TestCheckResourceAttrSet(resourceName, "amazon_side_asn"),
  72. testAccMatchResourceAttrRegionalARN(resourceName, "arn", "directconnect", regexp.MustCompile(fmt.Sprintf("dxvif/%s", aws.StringValue(vif.VirtualInterfaceId)))),
  73. resource.TestCheckResourceAttrSet(resourceName, "aws_device"),
  74. resource.TestCheckResourceAttr(resourceName, "bgp_asn", strconv.Itoa(bgpAsn)),
  75. resource.TestCheckResourceAttrSet(resourceName, "bgp_auth_key"),
  76. resource.TestCheckResourceAttr(resourceName, "connection_id", connectionId),
  77. resource.TestCheckResourceAttrSet(resourceName, "customer_address"),
  78. resource.TestCheckResourceAttrPair(resourceName, "dx_gateway_id", dxGatewayResourceName, "id"),
  79. resource.TestCheckResourceAttr(resourceName, "jumbo_frame_capable", "true"),
  80. resource.TestCheckResourceAttr(resourceName, "mtu", "8500"),
  81. resource.TestCheckResourceAttr(resourceName, "name", rName),
  82. resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
  83. resource.TestCheckResourceAttr(resourceName, "vlan", strconv.Itoa(vlan)),
  84. ),
  85. },
  86. // Test import.
  87. {
  88. ResourceName: resourceName,
  89. ImportState: true,
  90. ImportStateVerify: true,
  91. },
  92. },
  93. })
  94. }
  95. func testAccAwsDxTransitVirtualInterface_Tags(t *testing.T) {
  96. key := "DX_CONNECTION_ID"
  97. connectionId := os.Getenv(key)
  98. if connectionId == "" {
  99. t.Skipf("Environment variable %s is not set", key)
  100. }
  101. var vif directconnect.VirtualInterface
  102. resourceName := "aws_dx_transit_virtual_interface.test"
  103. dxGatewayResourceName := "aws_dx_gateway.test"
  104. rName := fmt.Sprintf("tf-testacc-transit-vif-%s", acctest.RandString(9))
  105. amzAsn := acctest.RandIntRange(64512, 65534)
  106. bgpAsn := acctest.RandIntRange(64512, 65534)
  107. vlan := acctest.RandIntRange(2049, 4094)
  108. resource.Test(t, resource.TestCase{
  109. PreCheck: func() { testAccPreCheck(t) },
  110. Providers: testAccProviders,
  111. CheckDestroy: testAccCheckAwsDxTransitVirtualInterfaceDestroy,
  112. Steps: []resource.TestStep{
  113. {
  114. Config: testAccDxTransitVirtualInterfaceConfig_tags(connectionId, rName, amzAsn, bgpAsn, vlan),
  115. Check: resource.ComposeTestCheckFunc(
  116. testAccCheckAwsDxTransitVirtualInterfaceExists(resourceName, &vif),
  117. resource.TestCheckResourceAttr(resourceName, "address_family", "ipv4"),
  118. resource.TestCheckResourceAttrSet(resourceName, "amazon_address"),
  119. resource.TestCheckResourceAttrSet(resourceName, "amazon_side_asn"),
  120. testAccMatchResourceAttrRegionalARN(resourceName, "arn", "directconnect", regexp.MustCompile(fmt.Sprintf("dxvif/%s", aws.StringValue(vif.VirtualInterfaceId)))),
  121. resource.TestCheckResourceAttrSet(resourceName, "aws_device"),
  122. resource.TestCheckResourceAttr(resourceName, "bgp_asn", strconv.Itoa(bgpAsn)),
  123. resource.TestCheckResourceAttrSet(resourceName, "bgp_auth_key"),
  124. resource.TestCheckResourceAttr(resourceName, "connection_id", connectionId),
  125. resource.TestCheckResourceAttrSet(resourceName, "customer_address"),
  126. resource.TestCheckResourceAttrPair(resourceName, "dx_gateway_id", dxGatewayResourceName, "id"),
  127. resource.TestCheckResourceAttr(resourceName, "jumbo_frame_capable", "true"),
  128. resource.TestCheckResourceAttr(resourceName, "mtu", "1500"),
  129. resource.TestCheckResourceAttr(resourceName, "name", rName),
  130. resource.TestCheckResourceAttr(resourceName, "tags.%", "3"),
  131. resource.TestCheckResourceAttr(resourceName, "tags.Name", rName),
  132. resource.TestCheckResourceAttr(resourceName, "tags.Key1", "Value1"),
  133. resource.TestCheckResourceAttr(resourceName, "tags.Key2", "Value2a"),
  134. resource.TestCheckResourceAttr(resourceName, "vlan", strconv.Itoa(vlan)),
  135. ),
  136. },
  137. {
  138. Config: testAccDxTransitVirtualInterfaceConfig_tagsUpdated(connectionId, rName, amzAsn, bgpAsn, vlan),
  139. Check: resource.ComposeTestCheckFunc(
  140. testAccCheckAwsDxTransitVirtualInterfaceExists(resourceName, &vif),
  141. resource.TestCheckResourceAttr(resourceName, "address_family", "ipv4"),
  142. resource.TestCheckResourceAttrSet(resourceName, "amazon_address"),
  143. resource.TestCheckResourceAttrSet(resourceName, "amazon_side_asn"),
  144. testAccMatchResourceAttrRegionalARN(resourceName, "arn", "directconnect", regexp.MustCompile(fmt.Sprintf("dxvif/%s", aws.StringValue(vif.VirtualInterfaceId)))),
  145. resource.TestCheckResourceAttrSet(resourceName, "aws_device"),
  146. resource.TestCheckResourceAttr(resourceName, "bgp_asn", strconv.Itoa(bgpAsn)),
  147. resource.TestCheckResourceAttrSet(resourceName, "bgp_auth_key"),
  148. resource.TestCheckResourceAttr(resourceName, "connection_id", connectionId),
  149. resource.TestCheckResourceAttrSet(resourceName, "customer_address"),
  150. resource.TestCheckResourceAttrPair(resourceName, "dx_gateway_id", dxGatewayResourceName, "id"),
  151. resource.TestCheckResourceAttr(resourceName, "jumbo_frame_capable", "true"),
  152. resource.TestCheckResourceAttr(resourceName, "mtu", "1500"),
  153. resource.TestCheckResourceAttr(resourceName, "name", rName),
  154. resource.TestCheckResourceAttr(resourceName, "tags.%", "3"),
  155. resource.TestCheckResourceAttr(resourceName, "tags.Name", rName),
  156. resource.TestCheckResourceAttr(resourceName, "tags.Key2", "Value2b"),
  157. resource.TestCheckResourceAttr(resourceName, "tags.Key3", "Value3"),
  158. resource.TestCheckResourceAttr(resourceName, "vlan", strconv.Itoa(vlan)),
  159. ),
  160. },
  161. // Test import.
  162. {
  163. ResourceName: resourceName,
  164. ImportState: true,
  165. ImportStateVerify: true,
  166. },
  167. },
  168. })
  169. }
  170. func testAccCheckAwsDxTransitVirtualInterfaceExists(name string, vif *directconnect.VirtualInterface) resource.TestCheckFunc {
  171. return testAccCheckDxVirtualInterfaceExists(name, vif)
  172. }
  173. func testAccCheckAwsDxTransitVirtualInterfaceDestroy(s *terraform.State) error {
  174. return testAccCheckDxVirtualInterfaceDestroy(s, "aws_dx_transit_virtual_interface")
  175. }
  176. func testAccDxTransitVirtualInterfaceConfig_base(rName string, amzAsn int) string {
  177. return fmt.Sprintf(`
  178. resource "aws_dx_gateway" "test" {
  179. name = %[1]q
  180. amazon_side_asn = %[2]d
  181. }
  182. `, rName, amzAsn)
  183. }
  184. func testAccDxTransitVirtualInterfaceConfig_basic(cid, rName string, amzAsn, bgpAsn, vlan int) string {
  185. return testAccDxTransitVirtualInterfaceConfig_base(rName, amzAsn) + fmt.Sprintf(`
  186. resource "aws_dx_transit_virtual_interface" "test" {
  187. address_family = "ipv4"
  188. bgp_asn = %[3]d
  189. dx_gateway_id = aws_dx_gateway.test.id
  190. connection_id = %[1]q
  191. name = %[2]q
  192. vlan = %[4]d
  193. }
  194. `, cid, rName, bgpAsn, vlan)
  195. }
  196. func testAccDxTransitVirtualInterfaceConfig_updated(cid, rName string, amzAsn, bgpAsn, vlan int) string {
  197. return testAccDxTransitVirtualInterfaceConfig_base(rName, amzAsn) + fmt.Sprintf(`
  198. resource "aws_dx_transit_virtual_interface" "test" {
  199. address_family = "ipv4"
  200. bgp_asn = %[3]d
  201. dx_gateway_id = aws_dx_gateway.test.id
  202. connection_id = %[1]q
  203. mtu = 8500
  204. name = %[2]q
  205. vlan = %[4]d
  206. }
  207. `, cid, rName, bgpAsn, vlan)
  208. }
  209. func testAccDxTransitVirtualInterfaceConfig_tags(cid, rName string, amzAsn, bgpAsn, vlan int) string {
  210. return testAccDxTransitVirtualInterfaceConfig_base(rName, amzAsn) + fmt.Sprintf(`
  211. resource "aws_dx_transit_virtual_interface" "test" {
  212. address_family = "ipv4"
  213. bgp_asn = %[3]d
  214. dx_gateway_id = aws_dx_gateway.test.id
  215. connection_id = %[1]q
  216. name = %[2]q
  217. vlan = %[4]d
  218. tags = {
  219. Name = %[2]q
  220. Key1 = "Value1"
  221. Key2 = "Value2a"
  222. }
  223. }
  224. `, cid, rName, bgpAsn, vlan)
  225. }
  226. func testAccDxTransitVirtualInterfaceConfig_tagsUpdated(cid, rName string, amzAsn, bgpAsn, vlan int) string {
  227. return testAccDxTransitVirtualInterfaceConfig_base(rName, amzAsn) + fmt.Sprintf(`
  228. resource "aws_dx_transit_virtual_interface" "test" {
  229. address_family = "ipv4"
  230. bgp_asn = %[3]d
  231. dx_gateway_id = aws_dx_gateway.test.id
  232. connection_id = %[1]q
  233. name = %[2]q
  234. vlan = %[4]d
  235. tags = {
  236. Name = %[2]q
  237. Key2 = "Value2b"
  238. Key3 = "Value3"
  239. }
  240. }
  241. `, cid, rName, bgpAsn, vlan)
  242. }