github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/builtin/providers/aws/resource_aws_ecs_service_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/ecs" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestParseTaskDefinition(t *testing.T) { 14 cases := map[string]map[string]interface{}{ 15 "invalid": map[string]interface{}{ 16 "family": "", 17 "revision": "", 18 "isValid": false, 19 }, 20 "invalidWithColon:": map[string]interface{}{ 21 "family": "", 22 "revision": "", 23 "isValid": false, 24 }, 25 "1234": map[string]interface{}{ 26 "family": "", 27 "revision": "", 28 "isValid": false, 29 }, 30 "invalid:aaa": map[string]interface{}{ 31 "family": "", 32 "revision": "", 33 "isValid": false, 34 }, 35 "invalid=family:1": map[string]interface{}{ 36 "family": "", 37 "revision": "", 38 "isValid": false, 39 }, 40 "invalid:name:1": map[string]interface{}{ 41 "family": "", 42 "revision": "", 43 "isValid": false, 44 }, 45 "valid:1": map[string]interface{}{ 46 "family": "valid", 47 "revision": "1", 48 "isValid": true, 49 }, 50 "abc12-def:54": map[string]interface{}{ 51 "family": "abc12-def", 52 "revision": "54", 53 "isValid": true, 54 }, 55 "lorem_ip-sum:123": map[string]interface{}{ 56 "family": "lorem_ip-sum", 57 "revision": "123", 58 "isValid": true, 59 }, 60 "lorem-ipsum:1": map[string]interface{}{ 61 "family": "lorem-ipsum", 62 "revision": "1", 63 "isValid": true, 64 }, 65 } 66 67 for input, expectedOutput := range cases { 68 family, revision, err := parseTaskDefinition(input) 69 isValid := expectedOutput["isValid"].(bool) 70 if !isValid && err == nil { 71 t.Fatalf("Task definition %s should fail", input) 72 } 73 74 expectedFamily := expectedOutput["family"].(string) 75 if family != expectedFamily { 76 t.Fatalf("Unexpected family (%#v) for task definition %s\n%#v", family, input, err) 77 } 78 expectedRevision := expectedOutput["revision"].(string) 79 if revision != expectedRevision { 80 t.Fatalf("Unexpected revision (%#v) for task definition %s\n%#v", revision, input, err) 81 } 82 } 83 } 84 85 func TestAccAWSEcsServiceWithARN(t *testing.T) { 86 resource.Test(t, resource.TestCase{ 87 PreCheck: func() { testAccPreCheck(t) }, 88 Providers: testAccProviders, 89 CheckDestroy: testAccCheckAWSEcsServiceDestroy, 90 Steps: []resource.TestStep{ 91 resource.TestStep{ 92 Config: testAccAWSEcsService, 93 Check: resource.ComposeTestCheckFunc( 94 testAccCheckAWSEcsServiceExists("aws_ecs_service.mongo"), 95 ), 96 }, 97 98 resource.TestStep{ 99 Config: testAccAWSEcsServiceModified, 100 Check: resource.ComposeTestCheckFunc( 101 testAccCheckAWSEcsServiceExists("aws_ecs_service.mongo"), 102 ), 103 }, 104 }, 105 }) 106 } 107 108 func TestAccAWSEcsServiceWithFamilyAndRevision(t *testing.T) { 109 resource.Test(t, resource.TestCase{ 110 PreCheck: func() { testAccPreCheck(t) }, 111 Providers: testAccProviders, 112 CheckDestroy: testAccCheckAWSEcsServiceDestroy, 113 Steps: []resource.TestStep{ 114 resource.TestStep{ 115 Config: testAccAWSEcsServiceWithFamilyAndRevision, 116 Check: resource.ComposeTestCheckFunc( 117 testAccCheckAWSEcsServiceExists("aws_ecs_service.jenkins"), 118 ), 119 }, 120 121 resource.TestStep{ 122 Config: testAccAWSEcsServiceWithFamilyAndRevisionModified, 123 Check: resource.ComposeTestCheckFunc( 124 testAccCheckAWSEcsServiceExists("aws_ecs_service.jenkins"), 125 ), 126 }, 127 }, 128 }) 129 } 130 131 func testAccCheckAWSEcsServiceDestroy(s *terraform.State) error { 132 conn := testAccProvider.Meta().(*AWSClient).ecsconn 133 134 for _, rs := range s.RootModule().Resources { 135 if rs.Type != "aws_ecs_service" { 136 continue 137 } 138 139 out, err := conn.DescribeServices(&ecs.DescribeServicesInput{ 140 Services: []*string{aws.String(rs.Primary.ID)}, 141 }) 142 143 if err == nil { 144 if len(out.Services) > 0 { 145 return fmt.Errorf("ECS service still exists:\n%#v", out.Services) 146 } 147 } 148 149 return err 150 } 151 152 return nil 153 } 154 155 func testAccCheckAWSEcsServiceExists(name string) resource.TestCheckFunc { 156 return func(s *terraform.State) error { 157 _, ok := s.RootModule().Resources[name] 158 if !ok { 159 return fmt.Errorf("Not found: %s", name) 160 } 161 162 return nil 163 } 164 } 165 166 var testAccAWSEcsService = ` 167 resource "aws_ecs_cluster" "default" { 168 name = "terraformecstest1" 169 } 170 171 resource "aws_ecs_task_definition" "mongo" { 172 family = "mongodb" 173 container_definitions = <<DEFINITION 174 [ 175 { 176 "cpu": 128, 177 "essential": true, 178 "image": "mongo:latest", 179 "memory": 128, 180 "name": "mongodb" 181 } 182 ] 183 DEFINITION 184 } 185 186 resource "aws_ecs_service" "mongo" { 187 name = "mongodb" 188 cluster = "${aws_ecs_cluster.default.id}" 189 task_definition = "${aws_ecs_task_definition.mongo.arn}" 190 desired_count = 1 191 } 192 ` 193 194 var testAccAWSEcsServiceModified = ` 195 resource "aws_ecs_cluster" "default" { 196 name = "terraformecstest1" 197 } 198 199 resource "aws_ecs_task_definition" "mongo" { 200 family = "mongodb" 201 container_definitions = <<DEFINITION 202 [ 203 { 204 "cpu": 128, 205 "essential": true, 206 "image": "mongo:latest", 207 "memory": 128, 208 "name": "mongodb" 209 } 210 ] 211 DEFINITION 212 } 213 214 resource "aws_ecs_service" "mongo" { 215 name = "mongodb" 216 cluster = "${aws_ecs_cluster.default.id}" 217 task_definition = "${aws_ecs_task_definition.mongo.arn}" 218 desired_count = 2 219 } 220 ` 221 222 var testAccAWSEcsServiceWithFamilyAndRevision = ` 223 resource "aws_ecs_cluster" "default" { 224 name = "terraformecstest2" 225 } 226 227 resource "aws_ecs_task_definition" "jenkins" { 228 family = "jenkins" 229 container_definitions = <<DEFINITION 230 [ 231 { 232 "cpu": 128, 233 "essential": true, 234 "image": "jenkins:latest", 235 "memory": 128, 236 "name": "jenkins" 237 } 238 ] 239 DEFINITION 240 } 241 242 resource "aws_ecs_service" "jenkins" { 243 name = "jenkins" 244 cluster = "${aws_ecs_cluster.default.id}" 245 task_definition = "${aws_ecs_task_definition.jenkins.family}:${aws_ecs_task_definition.jenkins.revision}" 246 desired_count = 1 247 } 248 ` 249 250 var testAccAWSEcsServiceWithFamilyAndRevisionModified = ` 251 resource "aws_ecs_cluster" "default" { 252 name = "terraformecstest2" 253 } 254 255 resource "aws_ecs_task_definition" "jenkins" { 256 family = "jenkins" 257 container_definitions = <<DEFINITION 258 [ 259 { 260 "cpu": 128, 261 "essential": true, 262 "image": "jenkins:latest", 263 "memory": 128, 264 "name": "jenkins" 265 } 266 ] 267 DEFINITION 268 } 269 270 resource "aws_ecs_service" "jenkins" { 271 name = "jenkins" 272 cluster = "${aws_ecs_cluster.default.id}" 273 task_definition = "${aws_ecs_task_definition.jenkins.family}:${aws_ecs_task_definition.jenkins.revision}" 274 desired_count = 1 275 } 276 `