/azurerm/internal/services/hsm/tests/resource_arm_dedicated_hardware_security_module_test.go

https://github.com/terraform-providers/terraform-provider-azurerm · Go · 287 lines · 270 code · 17 blank · 0 comment · 14 complexity · 78d612c29814d53de3125ffb24bae277 MD5 · raw file

  1. package tests
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/hashicorp/terraform-plugin-sdk/helper/resource"
  6. "github.com/hashicorp/terraform-plugin-sdk/terraform"
  7. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance"
  8. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
  9. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/hsm/parse"
  10. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
  11. )
  12. func TestAccAzureRMDedicatedHardwareSecurityModule_basic(t *testing.T) {
  13. data := acceptance.BuildTestData(t, "azurerm_dedicated_hardware_security_module", "test")
  14. resource.ParallelTest(t, resource.TestCase{
  15. PreCheck: func() { acceptance.PreCheck(t) },
  16. Providers: acceptance.SupportedProviders,
  17. CheckDestroy: testCheckAzureRMDedicatedHardwareSecurityModuleDestroy,
  18. Steps: []resource.TestStep{
  19. {
  20. Config: testAccAzureRMDedicatedHardwareSecurityModule_basic(data),
  21. Check: resource.ComposeTestCheckFunc(
  22. testCheckAzureRMDedicatedHardwareSecurityModuleExists(data.ResourceName),
  23. ),
  24. },
  25. data.ImportStep(),
  26. },
  27. })
  28. }
  29. func TestAccAzureRMDedicatedHardwareSecurityModule_requiresImport(t *testing.T) {
  30. data := acceptance.BuildTestData(t, "azurerm_dedicated_hardware_security_module", "test")
  31. resource.ParallelTest(t, resource.TestCase{
  32. PreCheck: func() { acceptance.PreCheck(t) },
  33. Providers: acceptance.SupportedProviders,
  34. CheckDestroy: testCheckAzureRMDedicatedHardwareSecurityModuleDestroy,
  35. Steps: []resource.TestStep{
  36. {
  37. Config: testAccAzureRMDedicatedHardwareSecurityModule_basic(data),
  38. Check: resource.ComposeTestCheckFunc(
  39. testCheckAzureRMDedicatedHardwareSecurityModuleExists(data.ResourceName),
  40. ),
  41. },
  42. data.RequiresImportErrorStep(testAccAzureRMDedicatedHardwareSecurityModule_requiresImport),
  43. },
  44. })
  45. }
  46. func TestAccAzureRMDedicatedHardwareSecurityModule_complete(t *testing.T) {
  47. data := acceptance.BuildTestData(t, "azurerm_dedicated_hardware_security_module", "test")
  48. resource.ParallelTest(t, resource.TestCase{
  49. PreCheck: func() { acceptance.PreCheck(t) },
  50. Providers: acceptance.SupportedProviders,
  51. CheckDestroy: testCheckAzureRMDedicatedHardwareSecurityModuleDestroy,
  52. Steps: []resource.TestStep{
  53. {
  54. Config: testAccAzureRMDedicatedHardwareSecurityModule_complete(data),
  55. Check: resource.ComposeTestCheckFunc(
  56. testCheckAzureRMDedicatedHardwareSecurityModuleExists(data.ResourceName),
  57. ),
  58. },
  59. data.ImportStep(),
  60. },
  61. })
  62. }
  63. func TestAccAzureRMDedicatedHardwareSecurityModule_update(t *testing.T) {
  64. data := acceptance.BuildTestData(t, "azurerm_dedicated_hardware_security_module", "test")
  65. resource.ParallelTest(t, resource.TestCase{
  66. PreCheck: func() { acceptance.PreCheck(t) },
  67. Providers: acceptance.SupportedProviders,
  68. CheckDestroy: testCheckAzureRMDedicatedHardwareSecurityModuleDestroy,
  69. Steps: []resource.TestStep{
  70. {
  71. Config: testAccAzureRMDedicatedHardwareSecurityModule_basic(data),
  72. Check: resource.ComposeTestCheckFunc(
  73. testCheckAzureRMDedicatedHardwareSecurityModuleExists(data.ResourceName),
  74. ),
  75. },
  76. data.ImportStep(),
  77. {
  78. Config: testAccAzureRMDedicatedHardwareSecurityModule_complete(data),
  79. Check: resource.ComposeTestCheckFunc(
  80. testCheckAzureRMDedicatedHardwareSecurityModuleExists(data.ResourceName),
  81. ),
  82. },
  83. data.ImportStep(),
  84. },
  85. })
  86. }
  87. func testAccAzureRMDedicatedHardwareSecurityModule_requiresImport(data acceptance.TestData) string {
  88. config := testAccAzureRMDedicatedHardwareSecurityModule_basic(data)
  89. return fmt.Sprintf(`
  90. %s
  91. resource "azurerm_dedicated_hardware_security_module" "import" {
  92. name = azurerm_dedicated_hardware_security_module.test.name
  93. resource_group_name = azurerm_dedicated_hardware_security_module.test.resource_group_name
  94. location = azurerm_dedicated_hardware_security_module.test.location
  95. sku_name = azurerm_dedicated_hardware_security_module.test.sku_name
  96. stamp_id = azurerm_dedicated_hardware_security_module.test.stamp_id
  97. network_profile {
  98. network_interface_private_ip_addresses = azurerm_dedicated_hardware_security_module.test.network_profile[0].network_interface_private_ip_addresses
  99. subnet_id = azurerm_dedicated_hardware_security_module.test.network_profile[0].subnet_id
  100. }
  101. }
  102. `, config)
  103. }
  104. func testCheckAzureRMDedicatedHardwareSecurityModuleExists(resourceName string) resource.TestCheckFunc {
  105. return func(s *terraform.State) error {
  106. client := acceptance.AzureProvider.Meta().(*clients.Client).HSM.DedicatedHsmClient
  107. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  108. rs, ok := s.RootModule().Resources[resourceName]
  109. if !ok {
  110. return fmt.Errorf("dedicated hardware security module not found: %s", resourceName)
  111. }
  112. id, err := parse.DedicatedHardwareSecurityModuleID(rs.Primary.ID)
  113. if err != nil {
  114. return err
  115. }
  116. if resp, err := client.Get(ctx, id.ResourceGroup, id.Name); err != nil {
  117. if !utils.ResponseWasNotFound(resp.Response) {
  118. return fmt.Errorf("bad: Dedicated HardwareSecurityModule %q does not exist", id.Name)
  119. }
  120. return fmt.Errorf("bad: Get on HardwareSecurityModules.DedicatedHsmClient: %+v", err)
  121. }
  122. return nil
  123. }
  124. }
  125. func testCheckAzureRMDedicatedHardwareSecurityModuleDestroy(s *terraform.State) error {
  126. client := acceptance.AzureProvider.Meta().(*clients.Client).HSM.DedicatedHsmClient
  127. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  128. for _, rs := range s.RootModule().Resources {
  129. if rs.Type != "azurerm_dedicated_hardware_security_module" {
  130. continue
  131. }
  132. id, err := parse.DedicatedHardwareSecurityModuleID(rs.Primary.ID)
  133. if err != nil {
  134. return err
  135. }
  136. if resp, err := client.Get(ctx, id.ResourceGroup, id.Name); err != nil {
  137. if !utils.ResponseWasNotFound(resp.Response) {
  138. return fmt.Errorf("bad: Get on HardwareSecurityModules.DedicatedHsmClient: %+v", err)
  139. }
  140. }
  141. return nil
  142. }
  143. return nil
  144. }
  145. func testAccAzureRMDedicatedHardwareSecurityModule_template(data acceptance.TestData) string {
  146. return fmt.Sprintf(`
  147. provider "azurerm" {
  148. features {}
  149. }
  150. resource "azurerm_resource_group" "test" {
  151. name = "acctestRG-hsm-%d"
  152. location = "%s"
  153. }
  154. resource "azurerm_virtual_network" "test" {
  155. name = "acctest-vnet-%d"
  156. address_space = ["10.2.0.0/16"]
  157. location = azurerm_resource_group.test.location
  158. resource_group_name = azurerm_resource_group.test.name
  159. }
  160. resource "azurerm_subnet" "test" {
  161. name = "acctest-computesubnet-%d"
  162. resource_group_name = azurerm_resource_group.test.name
  163. virtual_network_name = azurerm_virtual_network.test.name
  164. address_prefixes = ["10.2.0.0/24"]
  165. }
  166. resource "azurerm_subnet" "test2" {
  167. name = "acctest-hsmsubnet-%d"
  168. resource_group_name = azurerm_resource_group.test.name
  169. virtual_network_name = azurerm_virtual_network.test.name
  170. address_prefixes = ["10.2.1.0/24"]
  171. delegation {
  172. name = "first"
  173. service_delegation {
  174. name = "Microsoft.HardwareSecurityModules/dedicatedHSMs"
  175. actions = [
  176. "Microsoft.Network/networkinterfaces/*",
  177. "Microsoft.Network/virtualNetworks/subnets/join/action",
  178. ]
  179. }
  180. }
  181. }
  182. resource "azurerm_subnet" "test3" {
  183. name = "gatewaysubnet"
  184. resource_group_name = azurerm_resource_group.test.name
  185. virtual_network_name = azurerm_virtual_network.test.name
  186. address_prefixes = ["10.2.255.0/26"]
  187. }
  188. resource "azurerm_public_ip" "test" {
  189. name = "acctest-pip-%d"
  190. location = azurerm_resource_group.test.location
  191. resource_group_name = azurerm_resource_group.test.name
  192. allocation_method = "Dynamic"
  193. }
  194. resource "azurerm_virtual_network_gateway" "test" {
  195. name = "acctest-vnetgateway-%d"
  196. location = azurerm_resource_group.test.location
  197. resource_group_name = azurerm_resource_group.test.name
  198. type = "ExpressRoute"
  199. vpn_type = "PolicyBased"
  200. sku = "Standard"
  201. ip_configuration {
  202. public_ip_address_id = azurerm_public_ip.test.id
  203. private_ip_address_allocation = "Dynamic"
  204. subnet_id = azurerm_subnet.test3.id
  205. }
  206. }
  207. `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger)
  208. }
  209. func testAccAzureRMDedicatedHardwareSecurityModule_basic(data acceptance.TestData) string {
  210. template := testAccAzureRMDedicatedHardwareSecurityModule_template(data)
  211. return fmt.Sprintf(`
  212. %s
  213. resource "azurerm_dedicated_hardware_security_module" "test" {
  214. name = "acctest-hsm-%s"
  215. location = azurerm_resource_group.test.location
  216. resource_group_name = azurerm_resource_group.test.name
  217. sku_name = "SafeNet Luna Network HSM A790"
  218. network_profile {
  219. network_interface_private_ip_addresses = ["10.2.1.8"]
  220. subnet_id = azurerm_subnet.test2.id
  221. }
  222. stamp_id = "stamp2"
  223. depends_on = [azurerm_virtual_network_gateway.test]
  224. }
  225. `, template, data.RandomString)
  226. }
  227. func testAccAzureRMDedicatedHardwareSecurityModule_complete(data acceptance.TestData) string {
  228. template := testAccAzureRMDedicatedHardwareSecurityModule_template(data)
  229. return fmt.Sprintf(`
  230. %s
  231. resource "azurerm_dedicated_hardware_security_module" "test" {
  232. name = "acctest-hsm-%s"
  233. location = azurerm_resource_group.test.location
  234. resource_group_name = azurerm_resource_group.test.name
  235. sku_name = "SafeNet Luna Network HSM A790"
  236. network_profile {
  237. network_interface_private_ip_addresses = ["10.2.1.8"]
  238. subnet_id = azurerm_subnet.test2.id
  239. }
  240. stamp_id = "stamp2"
  241. tags = {
  242. env = "Test"
  243. }
  244. depends_on = [azurerm_virtual_network_gateway.test]
  245. }
  246. `, template, data.RandomString)
  247. }