/azurerm/internal/services/kusto/tests/kusto_database_principal_assignment_resource_test.go

https://github.com/terraform-providers/terraform-provider-azurerm · Go · 183 lines · 159 code · 23 blank · 1 comment · 13 complexity · a6632229ea4f270eed774a5092b017b4 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/utils"
  10. )
  11. func TestAccAzureRMKustoDatabasePrincipalAssignment_basic(t *testing.T) {
  12. data := acceptance.BuildTestData(t, "azurerm_kusto_database_principal_assignment", "test")
  13. resource.ParallelTest(t, resource.TestCase{
  14. PreCheck: func() { acceptance.PreCheck(t) },
  15. Providers: acceptance.SupportedProviders,
  16. CheckDestroy: testCheckAzureRMKustoDatabasePrincipalAssignmentDestroy,
  17. Steps: []resource.TestStep{
  18. {
  19. Config: testAccAzureRMKustoDatabasePrincipalAssignment_basic(data),
  20. Check: resource.ComposeTestCheckFunc(
  21. testCheckAzureRMKustoDatabasePrincipalAssignmentExists(data.ResourceName),
  22. ),
  23. },
  24. data.ImportStep(),
  25. },
  26. })
  27. }
  28. func TestAccAzureRMKustoDatabasePrincipalAssignment_requiresImport(t *testing.T) {
  29. data := acceptance.BuildTestData(t, "azurerm_kusto_database_principal_assignment", "test")
  30. resource.ParallelTest(t, resource.TestCase{
  31. PreCheck: func() { acceptance.PreCheck(t) },
  32. Providers: acceptance.SupportedProviders,
  33. CheckDestroy: testCheckAzureRMKustoDatabasePrincipalAssignmentDestroy,
  34. Steps: []resource.TestStep{
  35. {
  36. Config: testAccAzureRMKustoDatabasePrincipalAssignment_basic(data),
  37. Check: resource.ComposeTestCheckFunc(
  38. testCheckAzureRMKustoDatabasePrincipalAssignmentExists(data.ResourceName),
  39. ),
  40. },
  41. data.RequiresImportErrorStep(testAccAzureRMKustoDatabasePrincipalAssignment_requiresImport),
  42. },
  43. })
  44. }
  45. func testCheckAzureRMKustoDatabasePrincipalAssignmentDestroy(s *terraform.State) error {
  46. client := acceptance.AzureProvider.Meta().(*clients.Client).Kusto.DatabasePrincipalAssignmentsClient
  47. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  48. for _, rs := range s.RootModule().Resources {
  49. if rs.Type != "azurerm_kusto_database_principal_assignment" {
  50. continue
  51. }
  52. resourceGroup := rs.Primary.Attributes["resource_group_name"]
  53. clusterName := rs.Primary.Attributes["cluster_name"]
  54. databaseName := rs.Primary.Attributes["database_name"]
  55. name := rs.Primary.Attributes["name"]
  56. resp, err := client.Get(ctx, resourceGroup, clusterName, databaseName, name)
  57. if err != nil {
  58. if utils.ResponseWasNotFound(resp.Response) {
  59. return nil
  60. }
  61. return err
  62. }
  63. return nil
  64. }
  65. return nil
  66. }
  67. func testCheckAzureRMKustoDatabasePrincipalAssignmentExists(resourceName string) resource.TestCheckFunc {
  68. return func(s *terraform.State) error {
  69. client := acceptance.AzureProvider.Meta().(*clients.Client).Kusto.DatabasePrincipalAssignmentsClient
  70. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  71. // Ensure we have enough information in state to look up in API
  72. rs, ok := s.RootModule().Resources[resourceName]
  73. if !ok {
  74. return fmt.Errorf("Not found: %s", resourceName)
  75. }
  76. name := rs.Primary.Attributes["name"]
  77. resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
  78. if !hasResourceGroup {
  79. return fmt.Errorf("Bad: no resource group found in state for Kusto Database Principal Assignment: %s", name)
  80. }
  81. clusterName, hasClusterName := rs.Primary.Attributes["cluster_name"]
  82. if !hasClusterName {
  83. return fmt.Errorf("Bad: no cluster found in state for Kusto Database Principal Assignment: %s", name)
  84. }
  85. databaseName, hasDatabaseName := rs.Primary.Attributes["database_name"]
  86. if !hasDatabaseName {
  87. return fmt.Errorf("Bad: no database found in state for Kusto Database Principal Assignment: %s", name)
  88. }
  89. resp, err := client.Get(ctx, resourceGroup, clusterName, databaseName, name)
  90. if err != nil {
  91. if utils.ResponseWasNotFound(resp.Response) {
  92. return fmt.Errorf("Bad: Kusto Database Principal Assignment %q (Resource Group %q, Cluster %q, Database %q) does not exist", name, resourceGroup, clusterName, databaseName)
  93. }
  94. return fmt.Errorf("Bad: Get on DatabasePrincipalAssignmentsClient: %+v", err)
  95. }
  96. return nil
  97. }
  98. }
  99. func testAccAzureRMKustoDatabasePrincipalAssignment_basic(data acceptance.TestData) string {
  100. return fmt.Sprintf(`
  101. provider "azurerm" {
  102. features {}
  103. }
  104. data "azurerm_client_config" "current" {}
  105. resource "azurerm_resource_group" "rg" {
  106. name = "acctestRG-kusto-%d"
  107. location = "%s"
  108. }
  109. resource "azurerm_kusto_cluster" "test" {
  110. name = "acctestkc%s"
  111. location = azurerm_resource_group.rg.location
  112. resource_group_name = azurerm_resource_group.rg.name
  113. sku {
  114. name = "Dev(No SLA)_Standard_D11_v2"
  115. capacity = 1
  116. }
  117. }
  118. resource "azurerm_kusto_database" "test" {
  119. name = "acctestkd-%d"
  120. resource_group_name = azurerm_resource_group.rg.name
  121. location = azurerm_resource_group.rg.location
  122. cluster_name = azurerm_kusto_cluster.test.name
  123. }
  124. resource "azurerm_kusto_database_principal_assignment" "test" {
  125. name = "acctestkdpa%d"
  126. resource_group_name = azurerm_resource_group.rg.name
  127. cluster_name = azurerm_kusto_cluster.test.name
  128. database_name = azurerm_kusto_database.test.name
  129. tenant_id = data.azurerm_client_config.current.tenant_id
  130. principal_id = data.azurerm_client_config.current.client_id
  131. principal_type = "App"
  132. role = "Viewer"
  133. }
  134. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger)
  135. }
  136. func testAccAzureRMKustoDatabasePrincipalAssignment_requiresImport(data acceptance.TestData) string {
  137. template := testAccAzureRMKustoDatabasePrincipalAssignment_basic(data)
  138. return fmt.Sprintf(`
  139. %s
  140. resource "azurerm_kusto_database_principal_assignment" "import" {
  141. name = azurerm_kusto_database_principal_assignment.test.name
  142. resource_group_name = azurerm_kusto_database_principal_assignment.test.resource_group_name
  143. cluster_name = azurerm_kusto_database_principal_assignment.test.cluster_name
  144. database_name = azurerm_kusto_database_principal_assignment.test.database_name
  145. tenant_id = azurerm_kusto_database_principal_assignment.test.tenant_id
  146. principal_id = azurerm_kusto_database_principal_assignment.test.principal_id
  147. principal_type = azurerm_kusto_database_principal_assignment.test.principal_type
  148. role = azurerm_kusto_database_principal_assignment.test.role
  149. }
  150. `, template)
  151. }