/aws/resource_aws_media_convert_queue_test.go

https://github.com/terraform-providers/terraform-provider-aws · Go · 350 lines · 316 code · 34 blank · 0 comment · 22 complexity · e8c850a1fb380d8f7e84692baca0ca71 MD5 · raw file

  1. package aws
  2. import (
  3. "fmt"
  4. "regexp"
  5. "testing"
  6. "github.com/aws/aws-sdk-go/aws"
  7. "github.com/aws/aws-sdk-go/service/mediaconvert"
  8. "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
  9. "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
  10. "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
  11. )
  12. func TestAccAWSMediaConvertQueue_basic(t *testing.T) {
  13. var queue mediaconvert.Queue
  14. resourceName := "aws_media_convert_queue.test"
  15. rName := acctest.RandomWithPrefix("tf-acc-test")
  16. resource.ParallelTest(t, resource.TestCase{
  17. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  18. Providers: testAccProviders,
  19. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  20. Steps: []resource.TestStep{
  21. {
  22. Config: testAccMediaConvertQueueConfig_Basic(rName),
  23. Check: resource.ComposeTestCheckFunc(
  24. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  25. testAccMatchResourceAttrRegionalARN(resourceName, "arn", "mediaconvert", regexp.MustCompile(`queues/.+`)),
  26. resource.TestCheckResourceAttr(resourceName, "name", rName),
  27. resource.TestCheckResourceAttr(resourceName, "pricing_plan", mediaconvert.PricingPlanOnDemand),
  28. resource.TestCheckResourceAttr(resourceName, "status", mediaconvert.QueueStatusActive),
  29. ),
  30. },
  31. {
  32. ResourceName: resourceName,
  33. ImportState: true,
  34. ImportStateVerify: true,
  35. },
  36. },
  37. })
  38. }
  39. func TestAccAWSMediaConvertQueue_ReservationPlanSettings(t *testing.T) {
  40. TestAccSkip(t, "MediaConvert Reserved Queues are $400/month and cannot be deleted for 1 year.")
  41. var queue mediaconvert.Queue
  42. resourceName := "aws_media_convert_queue.test"
  43. rName := acctest.RandomWithPrefix("tf-acc-test")
  44. resource.ParallelTest(t, resource.TestCase{
  45. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  46. Providers: testAccProviders,
  47. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  48. Steps: []resource.TestStep{
  49. {
  50. Config: testAccMediaConvertQueueConfig_ReservedQueue(rName, mediaconvert.CommitmentOneYear, mediaconvert.RenewalTypeAutoRenew, 1),
  51. Check: resource.ComposeTestCheckFunc(
  52. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  53. resource.TestCheckResourceAttr(resourceName, "pricing_plan", mediaconvert.PricingPlanReserved),
  54. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.#", "1"),
  55. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.commitment", mediaconvert.CommitmentOneYear),
  56. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.renewal_type", mediaconvert.RenewalTypeAutoRenew),
  57. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.reserved_slots", "1"),
  58. ),
  59. },
  60. {
  61. Config: testAccMediaConvertQueueConfig_ReservedQueue(rName, mediaconvert.CommitmentOneYear, mediaconvert.RenewalTypeExpire, 2),
  62. Check: resource.ComposeTestCheckFunc(
  63. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  64. resource.TestCheckResourceAttr(resourceName, "pricing_plan", mediaconvert.PricingPlanReserved),
  65. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.#", "1"),
  66. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.commitment", mediaconvert.CommitmentOneYear),
  67. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.renewal_type", mediaconvert.RenewalTypeExpire),
  68. resource.TestCheckResourceAttr(resourceName, "reservation_plan_settings.0.reserved_slots", "1"),
  69. ),
  70. },
  71. {
  72. ResourceName: resourceName,
  73. ImportState: true,
  74. ImportStateVerify: true,
  75. },
  76. },
  77. })
  78. }
  79. func TestAccAWSMediaConvertQueue_withStatus(t *testing.T) {
  80. var queue mediaconvert.Queue
  81. resourceName := "aws_media_convert_queue.test"
  82. rName := acctest.RandomWithPrefix("tf-acc-test")
  83. resource.ParallelTest(t, resource.TestCase{
  84. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  85. Providers: testAccProviders,
  86. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  87. Steps: []resource.TestStep{
  88. {
  89. Config: testAccMediaConvertQueueConfig_withStatus(rName, mediaconvert.QueueStatusPaused),
  90. Check: resource.ComposeTestCheckFunc(
  91. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  92. resource.TestCheckResourceAttr(resourceName, "status", mediaconvert.QueueStatusPaused),
  93. ),
  94. },
  95. {
  96. Config: testAccMediaConvertQueueConfig_withStatus(rName, mediaconvert.QueueStatusActive),
  97. Check: resource.ComposeTestCheckFunc(
  98. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  99. resource.TestCheckResourceAttr(resourceName, "status", mediaconvert.QueueStatusActive),
  100. ),
  101. },
  102. {
  103. ResourceName: resourceName,
  104. ImportState: true,
  105. ImportStateVerify: true,
  106. },
  107. },
  108. })
  109. }
  110. func TestAccAWSMediaConvertQueue_withTags(t *testing.T) {
  111. var queue mediaconvert.Queue
  112. resourceName := "aws_media_convert_queue.test"
  113. rName := acctest.RandomWithPrefix("tf-acc-test")
  114. resource.ParallelTest(t, resource.TestCase{
  115. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  116. Providers: testAccProviders,
  117. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  118. Steps: []resource.TestStep{
  119. {
  120. Config: testAccMediaConvertQueueConfig_withTags(rName, "foo", "bar", "fizz", "buzz"),
  121. Check: resource.ComposeTestCheckFunc(
  122. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  123. resource.TestCheckResourceAttr(resourceName, "tags.%", "2"),
  124. resource.TestCheckResourceAttr(resourceName, "tags.foo", "bar"),
  125. resource.TestCheckResourceAttr(resourceName, "tags.fizz", "buzz"),
  126. ),
  127. },
  128. {
  129. Config: testAccMediaConvertQueueConfig_withTags(rName, "foo", "bar2", "fizz2", "buzz2"),
  130. Check: resource.ComposeTestCheckFunc(
  131. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  132. resource.TestCheckResourceAttr(resourceName, "tags.%", "2"),
  133. resource.TestCheckResourceAttr(resourceName, "tags.foo", "bar2"),
  134. resource.TestCheckResourceAttr(resourceName, "tags.fizz2", "buzz2"),
  135. ),
  136. },
  137. {
  138. ResourceName: resourceName,
  139. ImportState: true,
  140. ImportStateVerify: true,
  141. },
  142. {
  143. Config: testAccMediaConvertQueueConfig_Basic(rName),
  144. Check: resource.ComposeTestCheckFunc(
  145. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  146. resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
  147. ),
  148. },
  149. },
  150. })
  151. }
  152. func TestAccAWSMediaConvertQueue_disappears(t *testing.T) {
  153. var queue mediaconvert.Queue
  154. resourceName := "aws_media_convert_queue.test"
  155. rName := acctest.RandomWithPrefix("tf-acc-test")
  156. resource.ParallelTest(t, resource.TestCase{
  157. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  158. Providers: testAccProviders,
  159. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  160. Steps: []resource.TestStep{
  161. {
  162. Config: testAccMediaConvertQueueConfig_Basic(rName),
  163. Check: resource.ComposeTestCheckFunc(
  164. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  165. testAccCheckAwsMediaConvertQueueDisappears(&queue),
  166. ),
  167. ExpectNonEmptyPlan: true,
  168. },
  169. },
  170. })
  171. }
  172. func TestAccAWSMediaConvertQueue_withDescription(t *testing.T) {
  173. var queue mediaconvert.Queue
  174. resourceName := "aws_media_convert_queue.test"
  175. rName := acctest.RandomWithPrefix("tf-acc-test")
  176. description1 := acctest.RandomWithPrefix("Description: ")
  177. description2 := acctest.RandomWithPrefix("Description: ")
  178. resource.ParallelTest(t, resource.TestCase{
  179. PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSMediaConvert(t) },
  180. Providers: testAccProviders,
  181. CheckDestroy: testAccCheckAwsMediaConvertQueueDestroy,
  182. Steps: []resource.TestStep{
  183. {
  184. Config: testAccMediaConvertQueueConfig_withDescription(rName, description1),
  185. Check: resource.ComposeTestCheckFunc(
  186. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  187. resource.TestCheckResourceAttr(resourceName, "description", description1),
  188. ),
  189. },
  190. {
  191. Config: testAccMediaConvertQueueConfig_withDescription(rName, description2),
  192. Check: resource.ComposeTestCheckFunc(
  193. testAccCheckAwsMediaConvertQueueExists(resourceName, &queue),
  194. resource.TestCheckResourceAttr(resourceName, "description", description2),
  195. ),
  196. },
  197. },
  198. })
  199. }
  200. func testAccCheckAwsMediaConvertQueueDestroy(s *terraform.State) error {
  201. for _, rs := range s.RootModule().Resources {
  202. if rs.Type != "aws_media_convert_queue" {
  203. continue
  204. }
  205. conn, err := getAwsMediaConvertAccountClient(testAccProvider.Meta().(*AWSClient))
  206. if err != nil {
  207. return fmt.Errorf("Error getting Media Convert Account Client: %s", err)
  208. }
  209. _, err = conn.GetQueue(&mediaconvert.GetQueueInput{
  210. Name: aws.String(rs.Primary.ID),
  211. })
  212. if err != nil {
  213. if isAWSErr(err, mediaconvert.ErrCodeNotFoundException, "") {
  214. continue
  215. }
  216. return err
  217. }
  218. }
  219. return nil
  220. }
  221. func testAccCheckAwsMediaConvertQueueDisappears(queue *mediaconvert.Queue) resource.TestCheckFunc {
  222. return func(s *terraform.State) error {
  223. conn, err := getAwsMediaConvertAccountClient(testAccProvider.Meta().(*AWSClient))
  224. if err != nil {
  225. return fmt.Errorf("Error getting Media Convert Account Client: %s", err)
  226. }
  227. _, err = conn.DeleteQueue(&mediaconvert.DeleteQueueInput{
  228. Name: queue.Name,
  229. })
  230. if err != nil {
  231. return fmt.Errorf("Deleting Media Convert Queue: %s", err)
  232. }
  233. return nil
  234. }
  235. }
  236. func testAccCheckAwsMediaConvertQueueExists(n string, queue *mediaconvert.Queue) resource.TestCheckFunc {
  237. return func(s *terraform.State) error {
  238. rs, ok := s.RootModule().Resources[n]
  239. if !ok {
  240. return fmt.Errorf("Not found: %s", n)
  241. }
  242. if rs.Primary.ID == "" {
  243. return fmt.Errorf("No Queue id is set")
  244. }
  245. conn, err := getAwsMediaConvertAccountClient(testAccProvider.Meta().(*AWSClient))
  246. if err != nil {
  247. return fmt.Errorf("Error getting Media Convert Account Client: %s", err)
  248. }
  249. resp, err := conn.GetQueue(&mediaconvert.GetQueueInput{
  250. Name: aws.String(rs.Primary.ID),
  251. })
  252. if err != nil {
  253. return fmt.Errorf("Error getting queue: %s", err)
  254. }
  255. *queue = *resp.Queue
  256. return nil
  257. }
  258. }
  259. func testAccPreCheckAWSMediaConvert(t *testing.T) {
  260. _, err := getAwsMediaConvertAccountClient(testAccProvider.Meta().(*AWSClient))
  261. if testAccPreCheckSkipError(err) {
  262. t.Skipf("skipping acceptance testing: %s", err)
  263. }
  264. if err != nil {
  265. t.Fatalf("unexpected PreCheck error: %s", err)
  266. }
  267. }
  268. func testAccMediaConvertQueueConfig_Basic(rName string) string {
  269. return fmt.Sprintf(`
  270. resource "aws_media_convert_queue" "test" {
  271. name = %[1]q
  272. }
  273. `, rName)
  274. }
  275. func testAccMediaConvertQueueConfig_withStatus(rName, status string) string {
  276. return fmt.Sprintf(`
  277. resource "aws_media_convert_queue" "test" {
  278. name = %[1]q
  279. status = %[2]q
  280. }
  281. `, rName, status)
  282. }
  283. func testAccMediaConvertQueueConfig_withDescription(rName, description string) string {
  284. return fmt.Sprintf(`
  285. resource "aws_media_convert_queue" "test" {
  286. name = %[1]q
  287. description = %[2]q
  288. }
  289. `, rName, description)
  290. }
  291. func testAccMediaConvertQueueConfig_withTags(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string {
  292. return fmt.Sprintf(`
  293. resource "aws_media_convert_queue" "test" {
  294. name = %[1]q
  295. tags = {
  296. %[2]s = %[3]q
  297. %[4]s = %[5]q
  298. }
  299. }
  300. `, rName, tagKey1, tagValue1, tagKey2, tagValue2)
  301. }
  302. func testAccMediaConvertQueueConfig_ReservedQueue(rName, commitment, renewalType string, reservedSlots int) string {
  303. return fmt.Sprintf(`
  304. resource "aws_media_convert_queue" "test" {
  305. name = %[1]q
  306. pricing_plan = %[2]q
  307. reservation_plan_settings {
  308. commitment = %[3]q
  309. renewal_type = %[4]q
  310. reserved_slots = %[5]d
  311. }
  312. }
  313. `, rName, mediaconvert.PricingPlanReserved, commitment, renewalType, reservedSlots)
  314. }