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

https://github.com/terraform-providers/terraform-provider-azurerm · Go · 309 lines · 281 code · 27 blank · 1 comment · 12 complexity · 809ecfbc24e81ef0e95f979ab9e65cbe 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 TestAccAzureRMKustoDatabase_basic(t *testing.T) {
  12. data := acceptance.BuildTestData(t, "azurerm_kusto_database", "test")
  13. resource.ParallelTest(t, resource.TestCase{
  14. PreCheck: func() { acceptance.PreCheck(t) },
  15. Providers: acceptance.SupportedProviders,
  16. CheckDestroy: testCheckAzureRMKustoDatabaseDestroy,
  17. Steps: []resource.TestStep{
  18. {
  19. Config: testAccAzureRMKustoDatabase_basic(data),
  20. Check: resource.ComposeTestCheckFunc(
  21. testCheckAzureRMKustoDatabaseExists(data.ResourceName),
  22. ),
  23. },
  24. data.ImportStep(),
  25. },
  26. })
  27. }
  28. func TestAccAzureRMKustoDatabase_softDeletePeriod(t *testing.T) {
  29. data := acceptance.BuildTestData(t, "azurerm_kusto_database", "test")
  30. resource.ParallelTest(t, resource.TestCase{
  31. PreCheck: func() { acceptance.PreCheck(t) },
  32. Providers: acceptance.SupportedProviders,
  33. CheckDestroy: testCheckAzureRMKustoDatabaseDestroy,
  34. Steps: []resource.TestStep{
  35. {
  36. Config: testAccAzureRMKustoDatabase_softDeletePeriod(data),
  37. Check: resource.ComposeTestCheckFunc(
  38. testCheckAzureRMKustoDatabaseExists(data.ResourceName),
  39. resource.TestCheckResourceAttr(data.ResourceName, "soft_delete_period", "P7D"),
  40. ),
  41. },
  42. {
  43. Config: testAccAzureRMKustoDatabase_softDeletePeriodUpdate(data),
  44. Check: resource.ComposeTestCheckFunc(
  45. testCheckAzureRMKustoDatabaseExists(data.ResourceName),
  46. resource.TestCheckResourceAttr(data.ResourceName, "soft_delete_period", "P31D"),
  47. ),
  48. },
  49. },
  50. })
  51. }
  52. func TestAccAzureRMKustoDatabase_hotCachePeriod(t *testing.T) {
  53. data := acceptance.BuildTestData(t, "azurerm_kusto_database", "test")
  54. resource.ParallelTest(t, resource.TestCase{
  55. PreCheck: func() { acceptance.PreCheck(t) },
  56. Providers: acceptance.SupportedProviders,
  57. CheckDestroy: testCheckAzureRMKustoDatabaseDestroy,
  58. Steps: []resource.TestStep{
  59. {
  60. Config: testAccAzureRMKustoDatabase_hotCachePeriod(data),
  61. Check: resource.ComposeTestCheckFunc(
  62. testCheckAzureRMKustoDatabaseExists(data.ResourceName),
  63. resource.TestCheckResourceAttr(data.ResourceName, "hot_cache_period", "P7D"),
  64. ),
  65. },
  66. {
  67. Config: testAccAzureRMKustoDatabase_hotCachePeriodUpdate(data),
  68. Check: resource.ComposeTestCheckFunc(
  69. testCheckAzureRMKustoDatabaseExists(data.ResourceName),
  70. resource.TestCheckResourceAttr(data.ResourceName, "hot_cache_period", "P14DT12H"),
  71. ),
  72. },
  73. },
  74. })
  75. }
  76. func testAccAzureRMKustoDatabase_basic(data acceptance.TestData) string {
  77. return fmt.Sprintf(`
  78. provider "azurerm" {
  79. features {}
  80. }
  81. resource "azurerm_resource_group" "rg" {
  82. name = "acctestRG-%d"
  83. location = "%s"
  84. }
  85. resource "azurerm_kusto_cluster" "cluster" {
  86. name = "acctestkc%s"
  87. location = azurerm_resource_group.rg.location
  88. resource_group_name = azurerm_resource_group.rg.name
  89. sku {
  90. name = "Dev(No SLA)_Standard_D11_v2"
  91. capacity = 1
  92. }
  93. }
  94. resource "azurerm_kusto_database" "test" {
  95. name = "acctestkd-%d"
  96. resource_group_name = azurerm_resource_group.rg.name
  97. location = azurerm_resource_group.rg.location
  98. cluster_name = azurerm_kusto_cluster.cluster.name
  99. }
  100. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger)
  101. }
  102. func testAccAzureRMKustoDatabase_softDeletePeriod(data acceptance.TestData) string {
  103. return fmt.Sprintf(`
  104. provider "azurerm" {
  105. features {}
  106. }
  107. resource "azurerm_resource_group" "rg" {
  108. name = "acctestRG-%d"
  109. location = "%s"
  110. }
  111. resource "azurerm_kusto_cluster" "cluster" {
  112. name = "acctestkc%s"
  113. location = azurerm_resource_group.rg.location
  114. resource_group_name = azurerm_resource_group.rg.name
  115. sku {
  116. name = "Dev(No SLA)_Standard_D11_v2"
  117. capacity = 1
  118. }
  119. }
  120. resource "azurerm_kusto_database" "test" {
  121. name = "acctestkd-%d"
  122. resource_group_name = azurerm_resource_group.rg.name
  123. location = azurerm_resource_group.rg.location
  124. cluster_name = azurerm_kusto_cluster.cluster.name
  125. soft_delete_period = "P7D"
  126. }
  127. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger)
  128. }
  129. func testAccAzureRMKustoDatabase_softDeletePeriodUpdate(data acceptance.TestData) string {
  130. return fmt.Sprintf(`
  131. provider "azurerm" {
  132. features {}
  133. }
  134. resource "azurerm_resource_group" "rg" {
  135. name = "acctestRG-%d"
  136. location = "%s"
  137. }
  138. resource "azurerm_kusto_cluster" "cluster" {
  139. name = "acctestkc%s"
  140. location = azurerm_resource_group.rg.location
  141. resource_group_name = azurerm_resource_group.rg.name
  142. sku {
  143. name = "Dev(No SLA)_Standard_D11_v2"
  144. capacity = 1
  145. }
  146. }
  147. resource "azurerm_kusto_database" "test" {
  148. name = "acctestkd-%d"
  149. resource_group_name = azurerm_resource_group.rg.name
  150. location = azurerm_resource_group.rg.location
  151. cluster_name = azurerm_kusto_cluster.cluster.name
  152. soft_delete_period = "P31D"
  153. }
  154. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger)
  155. }
  156. func testAccAzureRMKustoDatabase_hotCachePeriod(data acceptance.TestData) string {
  157. return fmt.Sprintf(`
  158. provider "azurerm" {
  159. features {}
  160. }
  161. resource "azurerm_resource_group" "rg" {
  162. name = "acctestRG-%d"
  163. location = "%s"
  164. }
  165. resource "azurerm_kusto_cluster" "cluster" {
  166. name = "acctestkc%s"
  167. location = azurerm_resource_group.rg.location
  168. resource_group_name = azurerm_resource_group.rg.name
  169. sku {
  170. name = "Dev(No SLA)_Standard_D11_v2"
  171. capacity = 1
  172. }
  173. }
  174. resource "azurerm_kusto_database" "test" {
  175. name = "acctestkd-%d"
  176. resource_group_name = azurerm_resource_group.rg.name
  177. location = azurerm_resource_group.rg.location
  178. cluster_name = azurerm_kusto_cluster.cluster.name
  179. hot_cache_period = "P7D"
  180. }
  181. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger)
  182. }
  183. func testAccAzureRMKustoDatabase_hotCachePeriodUpdate(data acceptance.TestData) string {
  184. return fmt.Sprintf(`
  185. provider "azurerm" {
  186. features {}
  187. }
  188. resource "azurerm_resource_group" "rg" {
  189. name = "acctestRG-%d"
  190. location = "%s"
  191. }
  192. resource "azurerm_kusto_cluster" "cluster" {
  193. name = "acctestkc%s"
  194. location = azurerm_resource_group.rg.location
  195. resource_group_name = azurerm_resource_group.rg.name
  196. sku {
  197. name = "Dev(No SLA)_Standard_D11_v2"
  198. capacity = 1
  199. }
  200. }
  201. resource "azurerm_kusto_database" "test" {
  202. name = "acctestkd-%d"
  203. resource_group_name = azurerm_resource_group.rg.name
  204. location = azurerm_resource_group.rg.location
  205. cluster_name = azurerm_kusto_cluster.cluster.name
  206. hot_cache_period = "P14DT12H"
  207. }
  208. `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger)
  209. }
  210. func testCheckAzureRMKustoDatabaseDestroy(s *terraform.State) error {
  211. client := acceptance.AzureProvider.Meta().(*clients.Client).Kusto.DatabasesClient
  212. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  213. for _, rs := range s.RootModule().Resources {
  214. if rs.Type != "azurerm_kusto_database" {
  215. continue
  216. }
  217. resourceGroup := rs.Primary.Attributes["resource_group_name"]
  218. clusterName := rs.Primary.Attributes["cluster_name"]
  219. name := rs.Primary.Attributes["name"]
  220. resp, err := client.Get(ctx, resourceGroup, clusterName, name)
  221. if err != nil {
  222. if utils.ResponseWasNotFound(resp.Response) {
  223. return nil
  224. }
  225. return err
  226. }
  227. return nil
  228. }
  229. return nil
  230. }
  231. func testCheckAzureRMKustoDatabaseExists(resourceName string) resource.TestCheckFunc {
  232. return func(s *terraform.State) error {
  233. client := acceptance.AzureProvider.Meta().(*clients.Client).Kusto.DatabasesClient
  234. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  235. // Ensure we have enough information in state to look up in API
  236. rs, ok := s.RootModule().Resources[resourceName]
  237. if !ok {
  238. return fmt.Errorf("Not found: %s", resourceName)
  239. }
  240. kustoDatabase := rs.Primary.Attributes["name"]
  241. resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
  242. if !hasResourceGroup {
  243. return fmt.Errorf("Bad: no resource group found in state for Kusto Database: %s", kustoDatabase)
  244. }
  245. clusterName, hasClusterName := rs.Primary.Attributes["cluster_name"]
  246. if !hasClusterName {
  247. return fmt.Errorf("Bad: no resource group found in state for Kusto Database: %s", kustoDatabase)
  248. }
  249. resp, err := client.Get(ctx, resourceGroup, clusterName, kustoDatabase)
  250. if err != nil {
  251. if utils.ResponseWasNotFound(resp.Response) {
  252. return fmt.Errorf("Bad: Kusto Database %q (resource group: %q, cluster: %q) does not exist", kustoDatabase, resourceGroup, clusterName)
  253. }
  254. return fmt.Errorf("Bad: Get on DatabasesClient: %+v", err)
  255. }
  256. return nil
  257. }
  258. }