/azurerm/internal/services/monitor/tests/monitor_activity_log_alert_resource_test.go

https://github.com/terraform-providers/terraform-provider-azurerm · Go · 383 lines · 353 code · 29 blank · 1 comment · 13 complexity · c69a6666cedfb99f52ac5b6aaa36379d MD5 · raw file

  1. package tests
  2. import (
  3. "fmt"
  4. "net/http"
  5. "testing"
  6. "github.com/hashicorp/terraform-plugin-sdk/helper/resource"
  7. "github.com/hashicorp/terraform-plugin-sdk/terraform"
  8. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance"
  9. "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
  10. )
  11. func TestAccAzureRMMonitorActivityLogAlert_basic(t *testing.T) {
  12. data := acceptance.BuildTestData(t, "azurerm_monitor_activity_log_alert", "test")
  13. resource.ParallelTest(t, resource.TestCase{
  14. PreCheck: func() { acceptance.PreCheck(t) },
  15. Providers: acceptance.SupportedProviders,
  16. CheckDestroy: testCheckAzureRMMonitorActivityLogAlertDestroy,
  17. Steps: []resource.TestStep{
  18. {
  19. Config: testAccAzureRMMonitorActivityLogAlert_basic(data),
  20. Check: resource.ComposeTestCheckFunc(
  21. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  22. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  23. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "1"),
  24. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  25. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  26. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "0"),
  27. ),
  28. },
  29. data.ImportStep(),
  30. },
  31. })
  32. }
  33. func TestAccAzureRMMonitorActivityLogAlert_requiresImport(t *testing.T) {
  34. data := acceptance.BuildTestData(t, "azurerm_monitor_activity_log_alert", "test")
  35. resource.ParallelTest(t, resource.TestCase{
  36. PreCheck: func() { acceptance.PreCheck(t) },
  37. Providers: acceptance.SupportedProviders,
  38. CheckDestroy: testCheckAzureRMMonitorActivityLogAlertDestroy,
  39. Steps: []resource.TestStep{
  40. {
  41. Config: testAccAzureRMMonitorActivityLogAlert_basic(data),
  42. Check: resource.ComposeTestCheckFunc(
  43. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  44. ),
  45. },
  46. {
  47. Config: testAccAzureRMMonitorActivityLogAlert_requiresImport(data),
  48. ExpectError: acceptance.RequiresImportError("azurerm_monitor_activity_log_alert"),
  49. },
  50. },
  51. })
  52. }
  53. func TestAccAzureRMMonitorActivityLogAlert_singleResource(t *testing.T) {
  54. data := acceptance.BuildTestData(t, "azurerm_monitor_activity_log_alert", "test")
  55. resource.ParallelTest(t, resource.TestCase{
  56. PreCheck: func() { acceptance.PreCheck(t) },
  57. Providers: acceptance.SupportedProviders,
  58. CheckDestroy: testCheckAzureRMMonitorActivityLogAlertDestroy,
  59. Steps: []resource.TestStep{
  60. {
  61. Config: testAccAzureRMMonitorActivityLogAlert_singleResource(data),
  62. Check: resource.ComposeTestCheckFunc(
  63. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  64. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  65. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "1"),
  66. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  67. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.operation_name", "Microsoft.Storage/storageAccounts/write"),
  68. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  69. resource.TestCheckResourceAttrSet(data.ResourceName, "criteria.0.resource_id"),
  70. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "1"),
  71. ),
  72. },
  73. data.ImportStep(),
  74. },
  75. })
  76. }
  77. func TestAccAzureRMMonitorActivityLogAlert_complete(t *testing.T) {
  78. data := acceptance.BuildTestData(t, "azurerm_monitor_activity_log_alert", "test")
  79. resource.ParallelTest(t, resource.TestCase{
  80. PreCheck: func() { acceptance.PreCheck(t) },
  81. Providers: acceptance.SupportedProviders,
  82. CheckDestroy: testCheckAzureRMMonitorActivityLogAlertDestroy,
  83. Steps: []resource.TestStep{
  84. {
  85. Config: testAccAzureRMMonitorActivityLogAlert_complete(data),
  86. Check: resource.ComposeTestCheckFunc(
  87. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  88. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  89. resource.TestCheckResourceAttr(data.ResourceName, "description", "This is just a test resource."),
  90. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "2"),
  91. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  92. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.operation_name", "Microsoft.Storage/storageAccounts/write"),
  93. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  94. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_provider", "Microsoft.Storage"),
  95. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_type", "Microsoft.Storage/storageAccounts"),
  96. resource.TestCheckResourceAttrSet(data.ResourceName, "criteria.0.resource_group"),
  97. resource.TestCheckResourceAttrSet(data.ResourceName, "criteria.0.resource_id"),
  98. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "2"),
  99. ),
  100. },
  101. data.ImportStep(),
  102. },
  103. })
  104. }
  105. func TestAccAzureRMMonitorActivityLogAlert_basicAndCompleteUpdate(t *testing.T) {
  106. data := acceptance.BuildTestData(t, "azurerm_monitor_activity_log_alert", "test")
  107. resource.ParallelTest(t, resource.TestCase{
  108. PreCheck: func() { acceptance.PreCheck(t) },
  109. Providers: acceptance.SupportedProviders,
  110. CheckDestroy: testCheckAzureRMMonitorActionGroupDestroy,
  111. Steps: []resource.TestStep{
  112. {
  113. Config: testAccAzureRMMonitorActivityLogAlert_basic(data),
  114. Check: resource.ComposeTestCheckFunc(
  115. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  116. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  117. resource.TestCheckResourceAttr(data.ResourceName, "description", ""),
  118. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "1"),
  119. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  120. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  121. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_id", ""),
  122. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.caller", ""),
  123. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.level", ""),
  124. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.status", ""),
  125. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "0"),
  126. ),
  127. },
  128. {
  129. Config: testAccAzureRMMonitorActivityLogAlert_complete(data),
  130. Check: resource.ComposeTestCheckFunc(
  131. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  132. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  133. resource.TestCheckResourceAttr(data.ResourceName, "description", "This is just a test resource."),
  134. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "2"),
  135. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  136. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.operation_name", "Microsoft.Storage/storageAccounts/write"),
  137. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  138. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_provider", "Microsoft.Storage"),
  139. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_type", "Microsoft.Storage/storageAccounts"),
  140. resource.TestCheckResourceAttrSet(data.ResourceName, "criteria.0.resource_group"),
  141. resource.TestCheckResourceAttrSet(data.ResourceName, "criteria.0.resource_id"),
  142. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "2"),
  143. ),
  144. },
  145. {
  146. Config: testAccAzureRMMonitorActivityLogAlert_basic(data),
  147. Check: resource.ComposeTestCheckFunc(
  148. testCheckAzureRMMonitorActivityLogAlertExists(data.ResourceName),
  149. resource.TestCheckResourceAttr(data.ResourceName, "enabled", "true"),
  150. resource.TestCheckResourceAttr(data.ResourceName, "description", ""),
  151. resource.TestCheckResourceAttr(data.ResourceName, "scopes.#", "1"),
  152. resource.TestCheckResourceAttr(data.ResourceName, "criteria.#", "1"),
  153. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.category", "Recommendation"),
  154. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.resource_id", ""),
  155. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.caller", ""),
  156. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.level", ""),
  157. resource.TestCheckResourceAttr(data.ResourceName, "criteria.0.status", ""),
  158. resource.TestCheckResourceAttr(data.ResourceName, "action.#", "0"),
  159. ),
  160. },
  161. },
  162. })
  163. }
  164. func testAccAzureRMMonitorActivityLogAlert_basic(data acceptance.TestData) string {
  165. return fmt.Sprintf(`
  166. provider "azurerm" {
  167. features {}
  168. }
  169. resource "azurerm_resource_group" "test" {
  170. name = "acctestRG-%d"
  171. location = "%s"
  172. }
  173. resource "azurerm_monitor_activity_log_alert" "test" {
  174. name = "acctestActivityLogAlert-%d"
  175. resource_group_name = azurerm_resource_group.test.name
  176. scopes = [azurerm_resource_group.test.id]
  177. criteria {
  178. category = "Recommendation"
  179. }
  180. }
  181. `, data.RandomInteger, data.Locations.Primary, data.RandomInteger)
  182. }
  183. func testAccAzureRMMonitorActivityLogAlert_requiresImport(data acceptance.TestData) string {
  184. template := testAccAzureRMMonitorActivityLogAlert_basic(data)
  185. return fmt.Sprintf(`
  186. %s
  187. resource "azurerm_monitor_activity_log_alert" "import" {
  188. name = azurerm_monitor_activity_log_alert.test.name
  189. resource_group_name = azurerm_monitor_activity_log_alert.test.resource_group_name
  190. scopes = [azurerm_resource_group.test.id]
  191. criteria {
  192. category = "Recommendation"
  193. }
  194. }
  195. `, template)
  196. }
  197. func testAccAzureRMMonitorActivityLogAlert_singleResource(data acceptance.TestData) string {
  198. return fmt.Sprintf(`
  199. provider "azurerm" {
  200. features {}
  201. }
  202. resource "azurerm_resource_group" "test" {
  203. name = "acctestRG-%d"
  204. location = "%s"
  205. }
  206. resource "azurerm_monitor_action_group" "test" {
  207. name = "acctestActionGroup-%d"
  208. resource_group_name = azurerm_resource_group.test.name
  209. short_name = "acctestag"
  210. }
  211. resource "azurerm_storage_account" "test" {
  212. name = "acctestsa%s"
  213. resource_group_name = azurerm_resource_group.test.name
  214. location = azurerm_resource_group.test.location
  215. account_tier = "Standard"
  216. account_replication_type = "LRS"
  217. }
  218. resource "azurerm_monitor_activity_log_alert" "test" {
  219. name = "acctestActivityLogAlert-%d"
  220. resource_group_name = azurerm_resource_group.test.name
  221. scopes = [azurerm_resource_group.test.id]
  222. criteria {
  223. operation_name = "Microsoft.Storage/storageAccounts/write"
  224. category = "Recommendation"
  225. resource_id = azurerm_storage_account.test.id
  226. }
  227. action {
  228. action_group_id = azurerm_monitor_action_group.test.id
  229. }
  230. }
  231. `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomString, data.RandomInteger)
  232. }
  233. func testAccAzureRMMonitorActivityLogAlert_complete(data acceptance.TestData) string {
  234. return fmt.Sprintf(`
  235. provider "azurerm" {
  236. features {}
  237. }
  238. resource "azurerm_resource_group" "test" {
  239. name = "acctestRG-%d"
  240. location = "%s"
  241. }
  242. resource "azurerm_monitor_action_group" "test1" {
  243. name = "acctestActionGroup1-%d"
  244. resource_group_name = azurerm_resource_group.test.name
  245. short_name = "acctestag1"
  246. }
  247. resource "azurerm_monitor_action_group" "test2" {
  248. name = "acctestActionGroup2-%d"
  249. resource_group_name = azurerm_resource_group.test.name
  250. short_name = "acctestag2"
  251. }
  252. resource "azurerm_storage_account" "test" {
  253. name = "acctestsa%s"
  254. resource_group_name = azurerm_resource_group.test.name
  255. location = azurerm_resource_group.test.location
  256. account_tier = "Standard"
  257. account_replication_type = "LRS"
  258. }
  259. resource "azurerm_monitor_activity_log_alert" "test" {
  260. name = "acctestActivityLogAlert-%d"
  261. resource_group_name = azurerm_resource_group.test.name
  262. enabled = true
  263. description = "This is just a test resource."
  264. scopes = [
  265. azurerm_resource_group.test.id,
  266. azurerm_storage_account.test.id,
  267. ]
  268. criteria {
  269. operation_name = "Microsoft.Storage/storageAccounts/write"
  270. category = "Recommendation"
  271. resource_provider = "Microsoft.Storage"
  272. resource_type = "Microsoft.Storage/storageAccounts"
  273. resource_group = azurerm_resource_group.test.name
  274. resource_id = azurerm_storage_account.test.id
  275. recommendation_category = "OperationalExcellence"
  276. recommendation_impact = "High"
  277. }
  278. action {
  279. action_group_id = azurerm_monitor_action_group.test1.id
  280. }
  281. action {
  282. action_group_id = azurerm_monitor_action_group.test2.id
  283. webhook_properties = {
  284. from = "terraform test"
  285. to = "microsoft azure"
  286. }
  287. }
  288. }
  289. `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomString, data.RandomInteger)
  290. }
  291. func testCheckAzureRMMonitorActivityLogAlertDestroy(s *terraform.State) error {
  292. conn := acceptance.AzureProvider.Meta().(*clients.Client).Monitor.ActivityLogAlertsClient
  293. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  294. for _, rs := range s.RootModule().Resources {
  295. if rs.Type != "azurerm_monitor_activity_log_alert" {
  296. continue
  297. }
  298. name := rs.Primary.Attributes["name"]
  299. resourceGroup := rs.Primary.Attributes["resource_group_name"]
  300. resp, err := conn.Get(ctx, resourceGroup, name)
  301. if err != nil {
  302. return nil
  303. }
  304. if resp.StatusCode != http.StatusNotFound {
  305. return fmt.Errorf("Activity log alert still exists:\n%#v", resp)
  306. }
  307. }
  308. return nil
  309. }
  310. func testCheckAzureRMMonitorActivityLogAlertExists(resourceName string) resource.TestCheckFunc {
  311. return func(s *terraform.State) error {
  312. conn := acceptance.AzureProvider.Meta().(*clients.Client).Monitor.ActivityLogAlertsClient
  313. ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
  314. // Ensure we have enough information in state to look up in API
  315. rs, ok := s.RootModule().Resources[resourceName]
  316. if !ok {
  317. return fmt.Errorf("Not found: %s", resourceName)
  318. }
  319. name := rs.Primary.Attributes["name"]
  320. resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
  321. if !hasResourceGroup {
  322. return fmt.Errorf("Bad: no resource group found in state for Activity Log Alert Instance: %s", name)
  323. }
  324. resp, err := conn.Get(ctx, resourceGroup, name)
  325. if err != nil {
  326. return fmt.Errorf("Bad: Get on monitorActivityLogAlertsClient: %+v", err)
  327. }
  328. if resp.StatusCode == http.StatusNotFound {
  329. return fmt.Errorf("Bad: Activity Log Alert Instance %q (resource group: %q) does not exist", name, resourceGroup)
  330. }
  331. return nil
  332. }
  333. }