You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1181 regels
45 KiB

  1. package autoscaling
  2. import (
  3. "testing"
  4. "time"
  5. . "gopkg.in/check.v1"
  6. "github.com/goamz/goamz/aws"
  7. "github.com/goamz/goamz/testutil"
  8. )
  9. func Test(t *testing.T) {
  10. TestingT(t)
  11. }
  12. var _ = Suite(&S{})
  13. type S struct {
  14. as *AutoScaling
  15. }
  16. var testServer = testutil.NewHTTPServer()
  17. var mockTest bool
  18. func (s *S) SetUpSuite(c *C) {
  19. testServer.Start()
  20. auth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  21. s.as = New(auth, aws.Region{AutoScalingEndpoint: testServer.URL})
  22. }
  23. func (s *S) TearDownTest(c *C) {
  24. testServer.Flush()
  25. }
  26. func TestBasicGroupRequest(t *testing.T) {
  27. var as *AutoScaling
  28. awsAuth, err := aws.EnvAuth()
  29. if err != nil {
  30. mockTest = true
  31. t.Log("Running mock tests as AWS environment variables are not set")
  32. awsAuth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  33. as = New(awsAuth, aws.Region{AutoScalingEndpoint: testServer.URL})
  34. testServer.Start()
  35. go testServer.WaitRequest()
  36. testServer.Response(200, nil, BasicGroupResponse)
  37. } else {
  38. as = New(awsAuth, aws.USWest2)
  39. }
  40. groupResp, err := as.DescribeAutoScalingGroups(nil, 10, "")
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. if len(groupResp.AutoScalingGroups) > 0 {
  45. firstGroup := groupResp.AutoScalingGroups[0]
  46. if len(firstGroup.AutoScalingGroupName) > 0 {
  47. t.Logf("Found AutoScaling group %s\n",
  48. firstGroup.AutoScalingGroupName)
  49. }
  50. }
  51. testServer.Flush()
  52. }
  53. func TestAutoScalingGroup(t *testing.T) {
  54. var as *AutoScaling
  55. // Launch configuration test config
  56. lc := new(LaunchConfiguration)
  57. lc.LaunchConfigurationName = "LConf1"
  58. lc.ImageId = "ami-03e47533" // Octave debian ami
  59. lc.KernelId = "aki-98e26fa8"
  60. lc.KeyName = "testAWS" // Replace with valid key for your account
  61. lc.InstanceType = "m1.small"
  62. // CreateAutoScalingGroup params test config
  63. asgReq := new(CreateAutoScalingGroupParams)
  64. asgReq.AutoScalingGroupName = "ASGTest1"
  65. asgReq.LaunchConfigurationName = lc.LaunchConfigurationName
  66. asgReq.DefaultCooldown = 300
  67. asgReq.HealthCheckGracePeriod = 300
  68. asgReq.DesiredCapacity = 1
  69. asgReq.MinSize = 1
  70. asgReq.MaxSize = 5
  71. asgReq.AvailabilityZones = []string{"us-west-2a"}
  72. asg := new(AutoScalingGroup)
  73. asg.AutoScalingGroupName = "ASGTest1"
  74. asg.LaunchConfigurationName = lc.LaunchConfigurationName
  75. asg.DefaultCooldown = 300
  76. asg.HealthCheckGracePeriod = 300
  77. asg.DesiredCapacity = 1
  78. asg.MinSize = 1
  79. asg.MaxSize = 5
  80. asg.AvailabilityZones = []string{"us-west-2a"}
  81. awsAuth, err := aws.EnvAuth()
  82. if err != nil {
  83. mockTest = true
  84. t.Log("Running mock tests as AWS environment variables are not set")
  85. awsAuth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  86. as = New(awsAuth, aws.Region{AutoScalingEndpoint: testServer.URL})
  87. } else {
  88. as = New(awsAuth, aws.USWest2)
  89. }
  90. // Create the launch configuration
  91. if mockTest {
  92. testServer.Response(200, nil, CreateLaunchConfigurationResponse)
  93. }
  94. _, err = as.CreateLaunchConfiguration(lc)
  95. if err != nil {
  96. t.Fatal(err)
  97. }
  98. // Check that we can get the launch configuration details
  99. if mockTest {
  100. testServer.Response(200, nil, DescribeLaunchConfigurationsResponse)
  101. }
  102. _, err = as.DescribeLaunchConfigurations([]string{lc.LaunchConfigurationName}, 10, "")
  103. if err != nil {
  104. t.Fatal(err)
  105. }
  106. // Create the AutoScalingGroup
  107. if mockTest {
  108. testServer.Response(200, nil, CreateAutoScalingGroupResponse)
  109. }
  110. _, err = as.CreateAutoScalingGroup(asgReq)
  111. if err != nil {
  112. t.Fatal(err)
  113. }
  114. // Check that we can get the autoscaling group details
  115. if mockTest {
  116. testServer.Response(200, nil, DescribeAutoScalingGroupsResponse)
  117. }
  118. _, err = as.DescribeAutoScalingGroups(nil, 10, "")
  119. if err != nil {
  120. t.Fatal(err)
  121. }
  122. // Suspend the scaling processes for the test AutoScalingGroup
  123. if mockTest {
  124. testServer.Response(200, nil, SuspendProcessesResponse)
  125. }
  126. _, err = as.SuspendProcesses(asg.AutoScalingGroupName, nil)
  127. if err != nil {
  128. t.Fatal(err)
  129. }
  130. // Resume scaling processes for the test AutoScalingGroup
  131. if mockTest {
  132. testServer.Response(200, nil, ResumeProcessesResponse)
  133. }
  134. _, err = as.ResumeProcesses(asg.AutoScalingGroupName, nil)
  135. if err != nil {
  136. t.Fatal(err)
  137. }
  138. // Change the desired capacity from 1 to 2. This will launch a second instance
  139. if mockTest {
  140. testServer.Response(200, nil, SetDesiredCapacityResponse)
  141. }
  142. _, err = as.SetDesiredCapacity(asg.AutoScalingGroupName, 2, false)
  143. if err != nil {
  144. t.Fatal(err)
  145. }
  146. // Change the desired capacity from 2 to 1. This will terminate one of the instances
  147. if mockTest {
  148. testServer.Response(200, nil, SetDesiredCapacityResponse)
  149. }
  150. _, err = as.SetDesiredCapacity(asg.AutoScalingGroupName, 1, false)
  151. if err != nil {
  152. t.Fatal(err)
  153. }
  154. // Update the max capacity for the scaling group
  155. if mockTest {
  156. testServer.Response(200, nil, UpdateAutoScalingGroupResponse)
  157. }
  158. asg.MinSize = 1
  159. asg.MaxSize = 6
  160. asg.DesiredCapacity = 1
  161. _, err = as.UpdateAutoScalingGroup(asg)
  162. if err != nil {
  163. t.Fatal(err)
  164. }
  165. // Add a scheduled action to the group
  166. psar := new(PutScheduledUpdateGroupActionParams)
  167. psar.AutoScalingGroupName = asg.AutoScalingGroupName
  168. psar.MaxSize = 4
  169. psar.ScheduledActionName = "SATest1"
  170. psar.Recurrence = "30 0 1 1,6,12 *"
  171. if mockTest {
  172. testServer.Response(200, nil, PutScheduledUpdateGroupActionResponse)
  173. }
  174. _, err = as.PutScheduledUpdateGroupAction(psar)
  175. if err != nil {
  176. t.Fatal(err)
  177. }
  178. // List the scheduled actions for the group
  179. sar := new(DescribeScheduledActionsParams)
  180. sar.AutoScalingGroupName = asg.AutoScalingGroupName
  181. if mockTest {
  182. testServer.Response(200, nil, DescribeScheduledActionsResponse)
  183. }
  184. _, err = as.DescribeScheduledActions(sar)
  185. if err != nil {
  186. t.Fatal(err)
  187. }
  188. // Delete the test scheduled action from the group
  189. if mockTest {
  190. testServer.Response(200, nil, DeleteScheduledActionResponse)
  191. }
  192. _, err = as.DeleteScheduledAction(asg.AutoScalingGroupName, psar.ScheduledActionName)
  193. if err != nil {
  194. t.Fatal(err)
  195. }
  196. testServer.Flush()
  197. }
  198. // --------------------------------------------------------------------------
  199. // Detailed Unit Tests
  200. func (s *S) TestAttachInstances(c *C) {
  201. testServer.Response(200, nil, AttachInstancesResponse)
  202. resp, err := s.as.AttachInstances("my-test-asg", []string{"i-21321afs", "i-baaffg23"})
  203. c.Assert(err, IsNil)
  204. values := testServer.WaitRequest().PostForm
  205. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  206. c.Assert(values.Get("Action"), Equals, "AttachInstances")
  207. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  208. c.Assert(values.Get("InstanceIds.member.1"), Equals, "i-21321afs")
  209. c.Assert(values.Get("InstanceIds.member.2"), Equals, "i-baaffg23")
  210. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  211. }
  212. func (s *S) TestCreateAutoScalingGroup(c *C) {
  213. testServer.Response(200, nil, CreateAutoScalingGroupResponse)
  214. testServer.Response(200, nil, DeleteAutoScalingGroupResponse)
  215. createAS := &CreateAutoScalingGroupParams{
  216. AutoScalingGroupName: "my-test-asg",
  217. AvailabilityZones: []string{"us-east-1a", "us-east-1b"},
  218. MinSize: 3,
  219. MaxSize: 3,
  220. DefaultCooldown: 600,
  221. DesiredCapacity: 0,
  222. LaunchConfigurationName: "my-test-lc",
  223. LoadBalancerNames: []string{"elb-1", "elb-2"},
  224. Tags: []Tag{
  225. {
  226. Key: "foo",
  227. Value: "bar",
  228. },
  229. {
  230. Key: "baz",
  231. Value: "qux",
  232. },
  233. },
  234. VPCZoneIdentifier: "subnet-610acd08,subnet-530fc83a",
  235. }
  236. resp, err := s.as.CreateAutoScalingGroup(createAS)
  237. c.Assert(err, IsNil)
  238. defer s.as.DeleteAutoScalingGroup(createAS.AutoScalingGroupName, true)
  239. values := testServer.WaitRequest().PostForm
  240. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  241. c.Assert(values.Get("Action"), Equals, "CreateAutoScalingGroup")
  242. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  243. c.Assert(values.Get("AvailabilityZones.member.1"), Equals, "us-east-1a")
  244. c.Assert(values.Get("AvailabilityZones.member.2"), Equals, "us-east-1b")
  245. c.Assert(values.Get("MinSize"), Equals, "3")
  246. c.Assert(values.Get("MaxSize"), Equals, "3")
  247. c.Assert(values.Get("DefaultCooldown"), Equals, "600")
  248. c.Assert(values.Get("DesiredCapacity"), Equals, "0")
  249. c.Assert(values.Get("LaunchConfigurationName"), Equals, "my-test-lc")
  250. c.Assert(values.Get("LoadBalancerNames.member.1"), Equals, "elb-1")
  251. c.Assert(values.Get("LoadBalancerNames.member.2"), Equals, "elb-2")
  252. c.Assert(values.Get("Tags.member.1.Key"), Equals, "foo")
  253. c.Assert(values.Get("Tags.member.1.Value"), Equals, "bar")
  254. c.Assert(values.Get("Tags.member.2.Key"), Equals, "baz")
  255. c.Assert(values.Get("Tags.member.2.Value"), Equals, "qux")
  256. c.Assert(values.Get("VPCZoneIdentifier"), Equals, "subnet-610acd08,subnet-530fc83a")
  257. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  258. }
  259. func (s *S) TestCreateLaunchConfiguration(c *C) {
  260. testServer.Response(200, nil, CreateLaunchConfigurationResponse)
  261. testServer.Response(200, nil, DeleteLaunchConfigurationResponse)
  262. launchConfig := &LaunchConfiguration{
  263. LaunchConfigurationName: "my-test-lc",
  264. AssociatePublicIpAddress: true,
  265. EbsOptimized: true,
  266. SecurityGroups: []string{"sec-grp1", "sec-grp2"},
  267. UserData: "1234",
  268. KeyName: "secretKeyPair",
  269. ImageId: "ami-0078da69",
  270. InstanceType: "m1.small",
  271. SpotPrice: "0.03",
  272. BlockDeviceMappings: []BlockDeviceMapping{
  273. {
  274. DeviceName: "/dev/sda1",
  275. VirtualName: "ephemeral0",
  276. },
  277. {
  278. DeviceName: "/dev/sdb",
  279. VirtualName: "ephemeral1",
  280. },
  281. {
  282. DeviceName: "/dev/sdf",
  283. Ebs: EBS{
  284. DeleteOnTermination: true,
  285. SnapshotId: "snap-2a2b3c4d",
  286. VolumeSize: 100,
  287. },
  288. },
  289. },
  290. InstanceMonitoring: InstanceMonitoring{
  291. Enabled: true,
  292. },
  293. }
  294. resp, err := s.as.CreateLaunchConfiguration(launchConfig)
  295. c.Assert(err, IsNil)
  296. defer s.as.DeleteLaunchConfiguration(launchConfig.LaunchConfigurationName)
  297. values := testServer.WaitRequest().PostForm
  298. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  299. c.Assert(values.Get("Action"), Equals, "CreateLaunchConfiguration")
  300. c.Assert(values.Get("LaunchConfigurationName"), Equals, "my-test-lc")
  301. c.Assert(values.Get("AssociatePublicIpAddress"), Equals, "true")
  302. c.Assert(values.Get("EbsOptimized"), Equals, "true")
  303. c.Assert(values.Get("SecurityGroups.member.1"), Equals, "sec-grp1")
  304. c.Assert(values.Get("SecurityGroups.member.2"), Equals, "sec-grp2")
  305. c.Assert(values.Get("UserData"), Equals, "MTIzNA==")
  306. c.Assert(values.Get("KeyName"), Equals, "secretKeyPair")
  307. c.Assert(values.Get("ImageId"), Equals, "ami-0078da69")
  308. c.Assert(values.Get("InstanceType"), Equals, "m1.small")
  309. c.Assert(values.Get("SpotPrice"), Equals, "0.03")
  310. c.Assert(values.Get("BlockDeviceMappings.member.1.DeviceName"), Equals, "/dev/sda1")
  311. c.Assert(values.Get("BlockDeviceMappings.member.1.VirtualName"), Equals, "ephemeral0")
  312. c.Assert(values.Get("BlockDeviceMappings.member.2.DeviceName"), Equals, "/dev/sdb")
  313. c.Assert(values.Get("BlockDeviceMappings.member.2.VirtualName"), Equals, "ephemeral1")
  314. c.Assert(values.Get("BlockDeviceMappings.member.3.DeviceName"), Equals, "/dev/sdf")
  315. c.Assert(values.Get("BlockDeviceMappings.member.3.Ebs.DeleteOnTermination"), Equals, "true")
  316. c.Assert(values.Get("BlockDeviceMappings.member.3.Ebs.SnapshotId"), Equals, "snap-2a2b3c4d")
  317. c.Assert(values.Get("BlockDeviceMappings.member.3.Ebs.VolumeSize"), Equals, "100")
  318. c.Assert(values.Get("InstanceMonitoring.Enabled"), Equals, "true")
  319. c.Assert(resp.RequestId, Equals, "7c6e177f-f082-11e1-ac58-3714bEXAMPLE")
  320. }
  321. func (s *S) TestCreateOrUpdateTags(c *C) {
  322. testServer.Response(200, nil, CreateOrUpdateTagsResponse)
  323. tags := []Tag{
  324. {
  325. Key: "foo",
  326. Value: "bar",
  327. ResourceId: "my-test-asg",
  328. },
  329. {
  330. Key: "baz",
  331. Value: "qux",
  332. ResourceId: "my-test-asg",
  333. PropagateAtLaunch: true,
  334. },
  335. }
  336. resp, err := s.as.CreateOrUpdateTags(tags)
  337. c.Assert(err, IsNil)
  338. values := testServer.WaitRequest().PostForm
  339. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  340. c.Assert(values.Get("Action"), Equals, "CreateOrUpdateTags")
  341. c.Assert(values.Get("Tags.member.1.Key"), Equals, "foo")
  342. c.Assert(values.Get("Tags.member.1.Value"), Equals, "bar")
  343. c.Assert(values.Get("Tags.member.1.ResourceId"), Equals, "my-test-asg")
  344. c.Assert(values.Get("Tags.member.2.Key"), Equals, "baz")
  345. c.Assert(values.Get("Tags.member.2.Value"), Equals, "qux")
  346. c.Assert(values.Get("Tags.member.2.ResourceId"), Equals, "my-test-asg")
  347. c.Assert(values.Get("Tags.member.2.PropagateAtLaunch"), Equals, "true")
  348. c.Assert(resp.RequestId, Equals, "b0203919-bf1b-11e2-8a01-13263EXAMPLE")
  349. }
  350. func (s *S) TestDeleteAutoScalingGroup(c *C) {
  351. testServer.Response(200, nil, DeleteAutoScalingGroupResponse)
  352. resp, err := s.as.DeleteAutoScalingGroup("my-test-asg", true)
  353. c.Assert(err, IsNil)
  354. values := testServer.WaitRequest().PostForm
  355. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  356. c.Assert(values.Get("Action"), Equals, "DeleteAutoScalingGroup")
  357. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  358. c.Assert(resp.RequestId, Equals, "70a76d42-9665-11e2-9fdf-211deEXAMPLE")
  359. }
  360. func (s *S) TestDeleteAutoScalingGroupWithExistingInstances(c *C) {
  361. testServer.Response(400, nil, DeleteAutoScalingGroupErrorResponse)
  362. resp, err := s.as.DeleteAutoScalingGroup("my-test-asg", false)
  363. testServer.WaitRequest()
  364. c.Assert(resp, IsNil)
  365. c.Assert(err, NotNil)
  366. e, ok := err.(*Error)
  367. if !ok {
  368. c.Errorf("Unable to unmarshal error into AWS Autoscaling Error")
  369. }
  370. c.Assert(ok, Equals, true)
  371. c.Assert(e.Message, Equals, "You cannot delete an AutoScalingGroup while there are instances or pending Spot instance request(s) still in the group.")
  372. c.Assert(e.Code, Equals, "ResourceInUse")
  373. c.Assert(e.StatusCode, Equals, 400)
  374. c.Assert(e.RequestId, Equals, "70a76d42-9665-11e2-9fdf-211deEXAMPLE")
  375. }
  376. func (s *S) TestDeleteLaunchConfiguration(c *C) {
  377. testServer.Response(200, nil, DeleteLaunchConfigurationResponse)
  378. resp, err := s.as.DeleteLaunchConfiguration("my-test-lc")
  379. c.Assert(err, IsNil)
  380. values := testServer.WaitRequest().PostForm
  381. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  382. c.Assert(values.Get("Action"), Equals, "DeleteLaunchConfiguration")
  383. c.Assert(values.Get("LaunchConfigurationName"), Equals, "my-test-lc")
  384. c.Assert(resp.RequestId, Equals, "7347261f-97df-11e2-8756-35eEXAMPLE")
  385. }
  386. func (s *S) TestDeleteLaunchConfigurationInUse(c *C) {
  387. testServer.Response(400, nil, DeleteLaunchConfigurationInUseResponse)
  388. resp, err := s.as.DeleteLaunchConfiguration("my-test-lc")
  389. testServer.WaitRequest()
  390. c.Assert(resp, IsNil)
  391. c.Assert(err, NotNil)
  392. e, ok := err.(*Error)
  393. if !ok {
  394. c.Errorf("Unable to unmarshal error into AWS Autoscaling Error")
  395. }
  396. c.Logf("%v %v %v", e.Code, e.Message, e.RequestId)
  397. c.Assert(ok, Equals, true)
  398. c.Assert(e.Message, Equals, "Cannot delete launch configuration my-test-lc because it is attached to AutoScalingGroup test")
  399. c.Assert(e.Code, Equals, "ResourceInUse")
  400. c.Assert(e.StatusCode, Equals, 400)
  401. c.Assert(e.RequestId, Equals, "7347261f-97df-11e2-8756-35eEXAMPLE")
  402. }
  403. func (s *S) TestDeleteTags(c *C) {
  404. testServer.Response(200, nil, DeleteTagsResponse)
  405. tags := []Tag{
  406. {
  407. Key: "foo",
  408. Value: "bar",
  409. ResourceId: "my-test-asg",
  410. },
  411. {
  412. Key: "baz",
  413. Value: "qux",
  414. ResourceId: "my-test-asg",
  415. PropagateAtLaunch: true,
  416. },
  417. }
  418. resp, err := s.as.DeleteTags(tags)
  419. c.Assert(err, IsNil)
  420. values := testServer.WaitRequest().PostForm
  421. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  422. c.Assert(values.Get("Action"), Equals, "DeleteTags")
  423. c.Assert(values.Get("Tags.member.1.Key"), Equals, "foo")
  424. c.Assert(values.Get("Tags.member.1.Value"), Equals, "bar")
  425. c.Assert(values.Get("Tags.member.1.ResourceId"), Equals, "my-test-asg")
  426. c.Assert(values.Get("Tags.member.2.Key"), Equals, "baz")
  427. c.Assert(values.Get("Tags.member.2.Value"), Equals, "qux")
  428. c.Assert(values.Get("Tags.member.2.ResourceId"), Equals, "my-test-asg")
  429. c.Assert(values.Get("Tags.member.2.PropagateAtLaunch"), Equals, "true")
  430. c.Assert(resp.RequestId, Equals, "b0203919-bf1b-11e2-8a01-13263EXAMPLE")
  431. }
  432. func (s *S) TestDescribeAccountLimits(c *C) {
  433. testServer.Response(200, nil, DescribeAccountLimitsResponse)
  434. resp, err := s.as.DescribeAccountLimits()
  435. c.Assert(err, IsNil)
  436. values := testServer.WaitRequest().PostForm
  437. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  438. c.Assert(values.Get("Action"), Equals, "DescribeAccountLimits")
  439. c.Assert(resp.RequestId, Equals, "a32bd184-519d-11e3-a8a4-c1c467cbcc3b")
  440. c.Assert(resp.MaxNumberOfAutoScalingGroups, Equals, 20)
  441. c.Assert(resp.MaxNumberOfLaunchConfigurations, Equals, 100)
  442. }
  443. func (s *S) TestDescribeAdjustmentTypes(c *C) {
  444. testServer.Response(200, nil, DescribeAdjustmentTypesResponse)
  445. resp, err := s.as.DescribeAdjustmentTypes()
  446. c.Assert(err, IsNil)
  447. values := testServer.WaitRequest().PostForm
  448. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  449. c.Assert(values.Get("Action"), Equals, "DescribeAdjustmentTypes")
  450. c.Assert(resp.RequestId, Equals, "cc5f0337-b694-11e2-afc0-6544dEXAMPLE")
  451. c.Assert(resp.AdjustmentTypes, DeepEquals, []AdjustmentType{{"ChangeInCapacity"}, {"ExactCapacity"}, {"PercentChangeInCapacity"}})
  452. }
  453. func (s *S) TestDescribeAutoScalingGroups(c *C) {
  454. testServer.Response(200, nil, DescribeAutoScalingGroupsResponse)
  455. resp, err := s.as.DescribeAutoScalingGroups([]string{"my-test-asg-lbs"}, 0, "")
  456. c.Assert(err, IsNil)
  457. values := testServer.WaitRequest().PostForm
  458. t, _ := time.Parse(time.RFC3339, "2013-05-06T17:47:15.107Z")
  459. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  460. c.Assert(values.Get("Action"), Equals, "DescribeAutoScalingGroups")
  461. c.Assert(values.Get("AutoScalingGroupNames.member.1"), Equals, "my-test-asg-lbs")
  462. expected := &DescribeAutoScalingGroupsResp{
  463. AutoScalingGroups: []AutoScalingGroup{
  464. {
  465. AutoScalingGroupName: "my-test-asg-lbs",
  466. Tags: []Tag{
  467. {
  468. Key: "foo",
  469. Value: "bar",
  470. ResourceId: "my-test-asg-lbs",
  471. PropagateAtLaunch: true,
  472. ResourceType: "auto-scaling-group",
  473. },
  474. {
  475. Key: "baz",
  476. Value: "qux",
  477. ResourceId: "my-test-asg-lbs",
  478. PropagateAtLaunch: true,
  479. ResourceType: "auto-scaling-group",
  480. },
  481. },
  482. Instances: []Instance{
  483. {
  484. AvailabilityZone: "us-east-1b",
  485. HealthStatus: "Healthy",
  486. InstanceId: "i-zb1f313",
  487. LaunchConfigurationName: "my-test-lc",
  488. LifecycleState: "InService",
  489. },
  490. {
  491. AvailabilityZone: "us-east-1a",
  492. HealthStatus: "Healthy",
  493. InstanceId: "i-90123adv",
  494. LaunchConfigurationName: "my-test-lc",
  495. LifecycleState: "InService",
  496. },
  497. },
  498. HealthCheckType: "ELB",
  499. CreatedTime: t,
  500. LaunchConfigurationName: "my-test-lc",
  501. DesiredCapacity: 2,
  502. AvailabilityZones: []string{"us-east-1b", "us-east-1a"},
  503. LoadBalancerNames: []string{"my-test-asg-loadbalancer"},
  504. MinSize: 2,
  505. MaxSize: 10,
  506. VPCZoneIdentifier: "subnet-32131da1,subnet-1312dad2",
  507. HealthCheckGracePeriod: 120,
  508. DefaultCooldown: 300,
  509. AutoScalingGroupARN: "arn:aws:autoscaling:us-east-1:803981987763:autoScalingGroup:ca861182-c8f9-4ca7-b1eb-cd35505f5ebb:autoScalingGroupName/my-test-asg-lbs",
  510. TerminationPolicies: []string{"Default"},
  511. },
  512. },
  513. RequestId: "0f02a07d-b677-11e2-9eb0-dd50EXAMPLE",
  514. }
  515. c.Assert(resp, DeepEquals, expected)
  516. }
  517. func (s *S) TestDescribeAutoScalingInstances(c *C) {
  518. testServer.Response(200, nil, DescribeAutoScalingInstancesResponse)
  519. resp, err := s.as.DescribeAutoScalingInstances([]string{"i-78e0d40b"}, 0, "")
  520. c.Assert(err, IsNil)
  521. values := testServer.WaitRequest().PostForm
  522. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  523. c.Assert(values.Get("Action"), Equals, "DescribeAutoScalingInstances")
  524. c.Assert(resp.RequestId, Equals, "df992dc3-b72f-11e2-81e1-750aa6EXAMPLE")
  525. c.Assert(resp.AutoScalingInstances, DeepEquals, []Instance{
  526. {
  527. AutoScalingGroupName: "my-test-asg",
  528. AvailabilityZone: "us-east-1a",
  529. HealthStatus: "Healthy",
  530. InstanceId: "i-78e0d40b",
  531. LaunchConfigurationName: "my-test-lc",
  532. LifecycleState: "InService",
  533. },
  534. })
  535. }
  536. func (s *S) TestDescribeLaunchConfigurations(c *C) {
  537. testServer.Response(200, nil, DescribeLaunchConfigurationsResponse)
  538. resp, err := s.as.DescribeLaunchConfigurations([]string{"my-test-lc"}, 0, "")
  539. c.Assert(err, IsNil)
  540. values := testServer.WaitRequest().PostForm
  541. t, _ := time.Parse(time.RFC3339, "2013-01-21T23:04:42.200Z")
  542. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  543. c.Assert(values.Get("Action"), Equals, "DescribeLaunchConfigurations")
  544. c.Assert(values.Get("LaunchConfigurationNames.member.1"), Equals, "my-test-lc")
  545. expected := &DescribeLaunchConfigurationsResp{
  546. LaunchConfigurations: []LaunchConfiguration{
  547. {
  548. AssociatePublicIpAddress: true,
  549. BlockDeviceMappings: []BlockDeviceMapping{
  550. {
  551. DeviceName: "/dev/sdb",
  552. VirtualName: "ephemeral0",
  553. },
  554. {
  555. DeviceName: "/dev/sdf",
  556. Ebs: EBS{
  557. SnapshotId: "snap-XXXXYYY",
  558. VolumeSize: 100,
  559. Iops: 50,
  560. VolumeType: "io1",
  561. DeleteOnTermination: true,
  562. },
  563. },
  564. },
  565. EbsOptimized: false,
  566. CreatedTime: t,
  567. LaunchConfigurationName: "my-test-lc",
  568. InstanceType: "m1.small",
  569. ImageId: "ami-514ac838",
  570. InstanceMonitoring: InstanceMonitoring{Enabled: true},
  571. LaunchConfigurationARN: "arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/my-test-lc",
  572. },
  573. },
  574. RequestId: "d05a22f8-b690-11e2-bf8e-2113fEXAMPLE",
  575. }
  576. c.Assert(resp, DeepEquals, expected)
  577. }
  578. func (s *S) TestDescribeMetricCollectionTypes(c *C) {
  579. testServer.Response(200, nil, DescribeMetricCollectionTypesResponse)
  580. resp, err := s.as.DescribeMetricCollectionTypes()
  581. c.Assert(err, IsNil)
  582. values := testServer.WaitRequest().PostForm
  583. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  584. c.Assert(values.Get("Action"), Equals, "DescribeMetricCollectionTypes")
  585. c.Assert(resp.RequestId, Equals, "07f3fea2-bf3c-11e2-9b6f-f3cdbb80c073")
  586. c.Assert(resp.Metrics, DeepEquals, []MetricCollection{
  587. {
  588. Metric: "GroupMinSize",
  589. },
  590. {
  591. Metric: "GroupMaxSize",
  592. },
  593. {
  594. Metric: "GroupDesiredCapacity",
  595. },
  596. {
  597. Metric: "GroupInServiceInstances",
  598. },
  599. {
  600. Metric: "GroupPendingInstances",
  601. },
  602. {
  603. Metric: "GroupTerminatingInstances",
  604. },
  605. {
  606. Metric: "GroupTotalInstances",
  607. },
  608. })
  609. c.Assert(resp.Granularities, DeepEquals, []MetricGranularity{
  610. {
  611. Granularity: "1Minute",
  612. },
  613. })
  614. }
  615. func (s *S) TestDescribeNotificationConfigurations(c *C) {
  616. testServer.Response(200, nil, DescribeNotificationConfigurationsResponse)
  617. resp, err := s.as.DescribeNotificationConfigurations([]string{"i-78e0d40b"}, 0, "")
  618. c.Assert(err, IsNil)
  619. values := testServer.WaitRequest().PostForm
  620. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  621. c.Assert(values.Get("Action"), Equals, "DescribeNotificationConfigurations")
  622. c.Assert(resp.RequestId, Equals, "07f3fea2-bf3c-11e2-9b6f-f3cdbb80c073")
  623. c.Assert(resp.NotificationConfigurations, DeepEquals, []NotificationConfiguration{
  624. {
  625. AutoScalingGroupName: "my-test-asg",
  626. NotificationType: "autoscaling: EC2_INSTANCE_LAUNCH",
  627. TopicARN: "vajdoafj231j41231/topic",
  628. },
  629. })
  630. }
  631. func (s *S) TestDescribePolicies(c *C) {
  632. testServer.Response(200, nil, DescribePoliciesResponse)
  633. resp, err := s.as.DescribePolicies("my-test-asg", []string{}, 2, "")
  634. c.Assert(err, IsNil)
  635. values := testServer.WaitRequest().PostForm
  636. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  637. c.Assert(values.Get("Action"), Equals, "DescribePolicies")
  638. c.Assert(values.Get("MaxRecords"), Equals, "2")
  639. expected := &DescribePoliciesResp{
  640. RequestId: "ec3bffad-b739-11e2-b38d-15fbEXAMPLE",
  641. NextToken: "3ef417fe-9202-12-8ddd-d13e1313413",
  642. ScalingPolicies: []ScalingPolicy{
  643. {
  644. PolicyARN: "arn:aws:autoscaling:us-east-1:803981987763:scalingPolicy:c322761b-3172-4d56-9a21-0ed9d6161d67:autoScalingGroupName/my-test-asg:policyName/MyScaleDownPolicy",
  645. AdjustmentType: "ChangeInCapacity",
  646. ScalingAdjustment: -1,
  647. PolicyName: "MyScaleDownPolicy",
  648. AutoScalingGroupName: "my-test-asg",
  649. Cooldown: 60,
  650. Alarms: []Alarm{
  651. {
  652. AlarmName: "TestQueue",
  653. AlarmARN: "arn:aws:cloudwatch:us-east-1:803981987763:alarm:TestQueue",
  654. },
  655. },
  656. },
  657. {
  658. PolicyARN: "arn:aws:autoscaling:us-east-1:803981987763:scalingPolicy:c55a5cdd-9be0-435b-b60b-a8dd313159f5:autoScalingGroupName/my-test-asg:policyName/MyScaleUpPolicy",
  659. AdjustmentType: "ChangeInCapacity",
  660. ScalingAdjustment: 1,
  661. PolicyName: "MyScaleUpPolicy",
  662. AutoScalingGroupName: "my-test-asg",
  663. Cooldown: 60,
  664. Alarms: []Alarm{
  665. {
  666. AlarmName: "TestQueue",
  667. AlarmARN: "arn:aws:cloudwatch:us-east-1:803981987763:alarm:TestQueue",
  668. },
  669. },
  670. },
  671. },
  672. }
  673. c.Assert(resp, DeepEquals, expected)
  674. }
  675. func (s *S) TestDescribeScalingActivities(c *C) {
  676. testServer.Response(200, nil, DescribeScalingActivitiesResponse)
  677. resp, err := s.as.DescribeScalingActivities("my-test-asg", []string{}, 1, "")
  678. c.Assert(err, IsNil)
  679. values := testServer.WaitRequest().PostForm
  680. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  681. c.Assert(values.Get("Action"), Equals, "DescribeScalingActivities")
  682. c.Assert(values.Get("MaxRecords"), Equals, "1")
  683. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  684. st, _ := time.Parse(time.RFC3339, "2012-04-12T17:32:07.882Z")
  685. et, _ := time.Parse(time.RFC3339, "2012-04-12T17:32:08Z")
  686. expected := &DescribeScalingActivitiesResp{
  687. RequestId: "7a641adc-84c5-11e1-a8a5-217ebEXAMPLE",
  688. NextToken: "3ef417fe-9202-12-8ddd-d13e1313413",
  689. Activities: []Activity{
  690. {
  691. StatusCode: "Failed",
  692. Progress: 0,
  693. ActivityId: "063308ae-aa22-4a9b-94f4-9faeEXAMPLE",
  694. StartTime: st,
  695. AutoScalingGroupName: "my-test-asg",
  696. Details: "{}",
  697. Cause: "At 2012-04-12T17:31:30Z a user request created an AutoScalingGroup changing the desired capacity from 0 to 1. At 2012-04-12T17:32:07Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.",
  698. Description: "Launching a new EC2 instance. Status Reason: The image id 'ami-4edb0327' does not exist. Launching EC2 instance failed.",
  699. EndTime: et,
  700. StatusMessage: "The image id 'ami-4edb0327' does not exist. Launching EC2 instance failed.",
  701. },
  702. },
  703. }
  704. c.Assert(resp, DeepEquals, expected)
  705. }
  706. func (s *S) TestDescribeScalingProcessTypes(c *C) {
  707. testServer.Response(200, nil, DescribeScalingProcessTypesResponse)
  708. resp, err := s.as.DescribeScalingProcessTypes()
  709. c.Assert(err, IsNil)
  710. values := testServer.WaitRequest().PostForm
  711. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  712. c.Assert(values.Get("Action"), Equals, "DescribeScalingProcessTypes")
  713. c.Assert(resp.RequestId, Equals, "27f2eacc-b73f-11e2-ad99-c7aba3a9c963")
  714. c.Assert(resp.Processes, DeepEquals, []ProcessType{
  715. {"AZRebalance"},
  716. {"AddToLoadBalancer"},
  717. {"AlarmNotification"},
  718. {"HealthCheck"},
  719. {"Launch"},
  720. {"ReplaceUnhealthy"},
  721. {"ScheduledActions"},
  722. {"Terminate"},
  723. })
  724. }
  725. func (s *S) TestDescribeScheduledActions(c *C) {
  726. testServer.Response(200, nil, DescribeScheduledActionsResponse)
  727. st, _ := time.Parse(time.RFC3339, "2014-06-01T00:30:00Z")
  728. request := &DescribeScheduledActionsParams{
  729. AutoScalingGroupName: "ASGTest1",
  730. MaxRecords: 1,
  731. StartTime: st,
  732. }
  733. resp, err := s.as.DescribeScheduledActions(request)
  734. c.Assert(err, IsNil)
  735. values := testServer.WaitRequest().PostForm
  736. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  737. c.Assert(values.Get("Action"), Equals, "DescribeScheduledActions")
  738. c.Assert(resp.RequestId, Equals, "0eb4217f-8421-11e3-9233-7100ef811766")
  739. c.Assert(resp.ScheduledUpdateGroupActions, DeepEquals, []ScheduledUpdateGroupAction{
  740. {
  741. AutoScalingGroupName: "ASGTest1",
  742. ScheduledActionARN: "arn:aws:autoscaling:us-west-2:193024542802:scheduledUpdateGroupAction:61f68b2c-bde3-4316-9a81-eb95dc246509:autoScalingGroupName/ASGTest1:scheduledActionName/SATest1",
  743. ScheduledActionName: "SATest1",
  744. Recurrence: "30 0 1 1,6,12 *",
  745. MaxSize: 4,
  746. StartTime: st,
  747. Time: st,
  748. },
  749. })
  750. }
  751. func (s *S) TestDescribeTags(c *C) {
  752. testServer.Response(200, nil, DescribeTagsResponse)
  753. filter := NewFilter()
  754. filter.Add("auto-scaling-group", "my-test-asg")
  755. resp, err := s.as.DescribeTags(filter, 1, "")
  756. c.Assert(err, IsNil)
  757. values := testServer.WaitRequest().PostForm
  758. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  759. c.Assert(values.Get("Action"), Equals, "DescribeTags")
  760. c.Assert(values.Get("MaxRecords"), Equals, "1")
  761. c.Assert(values.Get("Filters.member.1.Name"), Equals, "auto-scaling-group")
  762. c.Assert(values.Get("Filters.member.1.Values.member.1"), Equals, "my-test-asg")
  763. c.Assert(resp.RequestId, Equals, "086265fd-bf3e-11e2-85fc-fbb1EXAMPLE")
  764. c.Assert(resp.Tags, DeepEquals, []Tag{
  765. {
  766. Key: "version",
  767. Value: "1.0",
  768. ResourceId: "my-test-asg",
  769. PropagateAtLaunch: true,
  770. ResourceType: "auto-scaling-group",
  771. },
  772. })
  773. }
  774. func (s *S) TestDescribeTerminationPolicyTypes(c *C) {
  775. testServer.Response(200, nil, DescribeTerminationPolicyTypesResponse)
  776. resp, err := s.as.DescribeTerminationPolicyTypes()
  777. c.Assert(err, IsNil)
  778. values := testServer.WaitRequest().PostForm
  779. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  780. c.Assert(values.Get("Action"), Equals, "DescribeTerminationPolicyTypes")
  781. c.Assert(resp.RequestId, Equals, "d9a05827-b735-11e2-a40c-c79a5EXAMPLE")
  782. c.Assert(resp.TerminationPolicyTypes, DeepEquals, []string{"ClosestToNextInstanceHour", "Default", "NewestInstance", "OldestInstance", "OldestLaunchConfiguration"})
  783. }
  784. func (s *S) TestDetachInstances(c *C) {
  785. testServer.Response(200, nil, DetachInstancesResponse)
  786. resp, err := s.as.DetachInstances("my-asg", []string{"i-5f2e8a0d"}, true)
  787. c.Assert(err, IsNil)
  788. values := testServer.WaitRequest().PostForm
  789. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  790. c.Assert(values.Get("Action"), Equals, "DetachInstances")
  791. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-asg")
  792. c.Assert(values.Get("ShouldDecrementDesiredCapacity"), Equals, "true")
  793. c.Assert(values.Get("InstanceIds.member.1"), Equals, "i-5f2e8a0d")
  794. st, _ := time.Parse(time.RFC3339, "2014-06-14T00:07:30.280Z")
  795. expected := &DetachInstancesResult{
  796. RequestId: "e04f3b11-f357-11e3-a434-7f10009d5849",
  797. Activities: []Activity{
  798. {
  799. StatusCode: "InProgress",
  800. Progress: 50,
  801. ActivityId: "e54ff599-bf05-4076-8b95-a0f090ed90bb",
  802. StartTime: st,
  803. AutoScalingGroupName: "my-asg",
  804. Details: "{\"Availability Zone\":\"us-east-1a\"}",
  805. Cause: "At 2014-06-14T00:07:30Z instance i-5f2e8a0d was detached in response to a user request, shrinking the capacity from 4 to 3.",
  806. Description: "Detaching EC2 instance: i-5f2e8a0d",
  807. },
  808. },
  809. }
  810. c.Assert(resp, DeepEquals, expected)
  811. }
  812. func (s *S) TestDisableMetricsCollection(c *C) {
  813. testServer.Response(200, nil, DisableMetricsCollectionResponse)
  814. resp, err := s.as.DisableMetricsCollection("my-test-asg", []string{"GroupMinSize"})
  815. c.Assert(err, IsNil)
  816. values := testServer.WaitRequest().PostForm
  817. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  818. c.Assert(values.Get("Action"), Equals, "DisableMetricsCollection")
  819. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  820. c.Assert(values.Get("Metrics.member.1"), Equals, "GroupMinSize")
  821. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  822. }
  823. func (s *S) TestEnableMetricsCollection(c *C) {
  824. testServer.Response(200, nil, DisableMetricsCollectionResponse)
  825. resp, err := s.as.EnableMetricsCollection("my-test-asg", []string{"GroupMinSize", "GroupMaxSize"}, "1Minute")
  826. c.Assert(err, IsNil)
  827. values := testServer.WaitRequest().PostForm
  828. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  829. c.Assert(values.Get("Action"), Equals, "EnableMetricsCollection")
  830. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  831. c.Assert(values.Get("Granularity"), Equals, "1Minute")
  832. c.Assert(values.Get("Metrics.member.1"), Equals, "GroupMinSize")
  833. c.Assert(values.Get("Metrics.member.2"), Equals, "GroupMaxSize")
  834. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  835. }
  836. func (s *S) TestEnterStandby(c *C) {
  837. testServer.Response(200, nil, EnterStandbyResponse)
  838. resp, err := s.as.EnterStandby("my-asg", []string{"i-5b73d709"}, true)
  839. c.Assert(err, IsNil)
  840. values := testServer.WaitRequest().PostForm
  841. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  842. c.Assert(values.Get("Action"), Equals, "EnterStandby")
  843. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-asg")
  844. c.Assert(values.Get("ShouldDecrementDesiredCapacity"), Equals, "true")
  845. c.Assert(values.Get("InstanceIds.member.1"), Equals, "i-5b73d709")
  846. st, _ := time.Parse(time.RFC3339, "2014-06-13T22:35:50.884Z")
  847. expected := &EnterStandbyResult{
  848. RequestId: "126f2f31-f34b-11e3-bc51-b35178f0274f",
  849. Activities: []Activity{
  850. {
  851. StatusCode: "InProgress",
  852. Progress: 50,
  853. ActivityId: "462b4bc3-ad3b-4e67-a58d-96cd00f02f9e",
  854. StartTime: st,
  855. AutoScalingGroupName: "my-asg",
  856. Details: "{\"Availability Zone\":\"us-east-1a\"}",
  857. Cause: "At 2014-06-13T22:35:50Z instance i-5b73d709 was moved to standby in response to a user request, shrinking the capacity from 4 to 3.",
  858. Description: "Moving EC2 instance to Standby: i-5b73d709",
  859. },
  860. },
  861. }
  862. c.Assert(resp, DeepEquals, expected)
  863. }
  864. func (s *S) TestExecutePolicy(c *C) {
  865. testServer.Response(200, nil, ExecutePolicyResponse)
  866. resp, err := s.as.ExecutePolicy("my-scaleout-policy", "my-test-asg", true)
  867. c.Assert(err, IsNil)
  868. values := testServer.WaitRequest().PostForm
  869. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  870. c.Assert(values.Get("Action"), Equals, "ExecutePolicy")
  871. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  872. c.Assert(values.Get("PolicyName"), Equals, "my-scaleout-policy")
  873. c.Assert(values.Get("HonorCooldown"), Equals, "true")
  874. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  875. }
  876. func (s *S) TestExitStandby(c *C) {
  877. testServer.Response(200, nil, ExitStandbyResponse)
  878. resp, err := s.as.ExitStandby("my-asg", []string{"i-5b73d709"})
  879. c.Assert(err, IsNil)
  880. values := testServer.WaitRequest().PostForm
  881. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  882. c.Assert(values.Get("Action"), Equals, "ExitStandby")
  883. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-asg")
  884. c.Assert(values.Get("InstanceIds.member.1"), Equals, "i-5b73d709")
  885. st, _ := time.Parse(time.RFC3339, "2014-06-13T22:43:53.523Z")
  886. expected := &ExitStandbyResult{
  887. RequestId: "321a11c8-f34c-11e3-a434-7f10009d5849",
  888. Activities: []Activity{
  889. {
  890. StatusCode: "PreInService",
  891. Progress: 30,
  892. ActivityId: "dca4efcf-eea6-4844-8064-cab1fecd1aa2",
  893. StartTime: st,
  894. AutoScalingGroupName: "my-asg",
  895. Details: "{\"Availability Zone\":\"us-east-1a\"}",
  896. Cause: "At 2014-06-13T22:43:53Z instance i-5b73d709 was moved out of standby in response to a user request, increasing the capacity from 3 to 4.",
  897. Description: "Moving EC2 instance out of Standby: i-5b73d709",
  898. },
  899. },
  900. }
  901. c.Assert(resp, DeepEquals, expected)
  902. }
  903. func (s *S) TestPutLifecycleHook(c *C) {
  904. testServer.Response(200, nil, PutLifecycleHookResponse)
  905. request := &PutLifecycleHookParams{
  906. AutoScalingGroupName: "my-asg",
  907. LifecycleHookName: "ReadyForSoftwareInstall",
  908. LifecycleTransition: "autoscaling:EC2_INSTANCE_LAUNCHING",
  909. NotificationTargetARN: "arn:aws:sqs:us-east-1:896650972448:lifecyclehookqueue",
  910. RoleARN: "arn:aws:iam::896650972448:role/AutoScaling",
  911. }
  912. resp, err := s.as.PutLifecycleHook(request)
  913. c.Assert(err, IsNil)
  914. values := testServer.WaitRequest().PostForm
  915. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  916. c.Assert(values.Get("Action"), Equals, "PutLifecycleHook")
  917. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-asg")
  918. c.Assert(values.Get("LifecycleHookName"), Equals, "ReadyForSoftwareInstall")
  919. c.Assert(values.Get("RoleARN"), Equals, "arn:aws:iam::896650972448:role/AutoScaling")
  920. c.Assert(values.Get("LifecycleTransition"), Equals, "autoscaling:EC2_INSTANCE_LAUNCHING")
  921. c.Assert(values.Get("NotificationTargetARN"), Equals, "arn:aws:sqs:us-east-1:896650972448:lifecyclehookqueue")
  922. c.Assert(values.Get("DefaultResult"), Equals, "")
  923. c.Assert(values.Get("HeartbeatTimeout"), Equals, "")
  924. c.Assert(values.Get("NotificationMetadata"), Equals, "")
  925. c.Assert(resp.RequestId, Equals, "1952f458-f645-11e3-bc51-b35178f0274f")
  926. }
  927. func (s *S) TestPutNotificationConfiguration(c *C) {
  928. testServer.Response(200, nil, PutNotificationConfigurationResponse)
  929. resp, err := s.as.PutNotificationConfiguration("my-test-asg", []string{"autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR"}, "myTopicARN")
  930. c.Assert(err, IsNil)
  931. values := testServer.WaitRequest().PostForm
  932. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  933. c.Assert(values.Get("Action"), Equals, "PutNotificationConfiguration")
  934. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  935. c.Assert(values.Get("TopicARN"), Equals, "myTopicARN")
  936. c.Assert(values.Get("NotificationTypes.member.1"), Equals, "autoscaling:EC2_INSTANCE_LAUNCH")
  937. c.Assert(values.Get("NotificationTypes.member.2"), Equals, "autoscaling:EC2_INSTANCE_LAUNCH_ERROR")
  938. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  939. }
  940. func (s *S) TestPutScalingPolicy(c *C) {
  941. testServer.Response(200, nil, PutScalingPolicyResponse)
  942. request := &PutScalingPolicyParams{
  943. AutoScalingGroupName: "my-test-asg",
  944. PolicyName: "my-scaleout-policy",
  945. ScalingAdjustment: 30,
  946. AdjustmentType: "PercentChangeInCapacity",
  947. Cooldown: 0,
  948. MinAdjustmentStep: 0,
  949. }
  950. resp, err := s.as.PutScalingPolicy(request)
  951. c.Assert(err, IsNil)
  952. values := testServer.WaitRequest().PostForm
  953. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  954. c.Assert(values.Get("Action"), Equals, "PutScalingPolicy")
  955. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  956. c.Assert(values.Get("PolicyName"), Equals, "my-scaleout-policy")
  957. c.Assert(values.Get("AdjustmentType"), Equals, "PercentChangeInCapacity")
  958. c.Assert(values.Get("ScalingAdjustment"), Equals, "30")
  959. c.Assert(resp.RequestId, Equals, "3cfc6fef-c08b-11e2-a697-2922EXAMPLE")
  960. c.Assert(resp.PolicyARN, Equals, "arn:aws:autoscaling:us-east-1:803981987763:scalingPolicy:b0dcf5e8-02e6-4e31-9719-0675d0dc31ae:autoScalingGroupName/my-test-asg:policyName/my-scaleout-policy")
  961. }
  962. func (s *S) TestPutScheduledUpdateGroupAction(c *C) {
  963. testServer.Response(200, nil, PutScheduledUpdateGroupActionResponse)
  964. st, _ := time.Parse(time.RFC3339, "2013-05-25T08:00:00Z")
  965. request := &PutScheduledUpdateGroupActionParams{
  966. AutoScalingGroupName: "my-test-asg",
  967. DesiredCapacity: 3,
  968. ScheduledActionName: "ScaleUp",
  969. StartTime: st,
  970. }
  971. resp, err := s.as.PutScheduledUpdateGroupAction(request)
  972. c.Assert(err, IsNil)
  973. values := testServer.WaitRequest().PostForm
  974. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  975. c.Assert(values.Get("Action"), Equals, "PutScheduledUpdateGroupAction")
  976. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  977. c.Assert(values.Get("ScheduledActionName"), Equals, "ScaleUp")
  978. c.Assert(values.Get("DesiredCapacity"), Equals, "3")
  979. c.Assert(values.Get("StartTime"), Equals, "2013-05-25T08:00:00Z")
  980. c.Assert(resp.RequestId, Equals, "3bc8c9bc-6a62-11e2-8a51-4b8a1EXAMPLE")
  981. }
  982. func (s *S) TestPutScheduledUpdateGroupActionCron(c *C) {
  983. testServer.Response(200, nil, PutScheduledUpdateGroupActionResponse)
  984. st, _ := time.Parse(time.RFC3339, "2013-05-25T08:00:00Z")
  985. request := &PutScheduledUpdateGroupActionParams{
  986. AutoScalingGroupName: "my-test-asg",
  987. DesiredCapacity: 3,
  988. ScheduledActionName: "scaleup-schedule-year",
  989. StartTime: st,
  990. Recurrence: "30 0 1 1,6,12 *",
  991. }
  992. resp, err := s.as.PutScheduledUpdateGroupAction(request)
  993. c.Assert(err, IsNil)
  994. values := testServer.WaitRequest().PostForm
  995. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  996. c.Assert(values.Get("Action"), Equals, "PutScheduledUpdateGroupAction")
  997. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  998. c.Assert(values.Get("ScheduledActionName"), Equals, "scaleup-schedule-year")
  999. c.Assert(values.Get("DesiredCapacity"), Equals, "3")
  1000. c.Assert(values.Get("Recurrence"), Equals, "30 0 1 1,6,12 *")
  1001. c.Assert(resp.RequestId, Equals, "3bc8c9bc-6a62-11e2-8a51-4b8a1EXAMPLE")
  1002. }
  1003. func (s *S) TestResumeProcesses(c *C) {
  1004. testServer.Response(200, nil, ResumeProcessesResponse)
  1005. resp, err := s.as.ResumeProcesses("my-test-asg", []string{"Launch", "Terminate"})
  1006. c.Assert(err, IsNil)
  1007. values := testServer.WaitRequest().PostForm
  1008. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1009. c.Assert(values.Get("Action"), Equals, "ResumeProcesses")
  1010. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  1011. c.Assert(values.Get("ScalingProcesses.member.1"), Equals, "Launch")
  1012. c.Assert(values.Get("ScalingProcesses.member.2"), Equals, "Terminate")
  1013. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  1014. }
  1015. func (s *S) TestSetDesiredCapacity(c *C) {
  1016. testServer.Response(200, nil, SetDesiredCapacityResponse)
  1017. resp, err := s.as.SetDesiredCapacity("my-test-asg", 3, true)
  1018. c.Assert(err, IsNil)
  1019. values := testServer.WaitRequest().PostForm
  1020. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1021. c.Assert(values.Get("Action"), Equals, "SetDesiredCapacity")
  1022. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  1023. c.Assert(values.Get("HonorCooldown"), Equals, "true")
  1024. c.Assert(values.Get("DesiredCapacity"), Equals, "3")
  1025. c.Assert(resp.RequestId, Equals, "9fb7e2db-6998-11e2-a985-57c82EXAMPLE")
  1026. }
  1027. func (s *S) TestSetInstanceHealth(c *C) {
  1028. testServer.Response(200, nil, SetInstanceHealthResponse)
  1029. resp, err := s.as.SetInstanceHealth("i-baha3121", "Unhealthy", false)
  1030. c.Assert(err, IsNil)
  1031. values := testServer.WaitRequest().PostForm
  1032. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1033. c.Assert(values.Get("Action"), Equals, "SetInstanceHealth")
  1034. c.Assert(values.Get("HealthStatus"), Equals, "Unhealthy")
  1035. c.Assert(values.Get("InstanceId"), Equals, "i-baha3121")
  1036. c.Assert(values.Get("ShouldRespectGracePeriod"), Equals, "false")
  1037. c.Assert(resp.RequestId, Equals, "9fb7e2db-6998-11e2-a985-57c82EXAMPLE")
  1038. }
  1039. func (s *S) TestSuspendProcesses(c *C) {
  1040. testServer.Response(200, nil, SuspendProcessesResponse)
  1041. resp, err := s.as.SuspendProcesses("my-test-asg", []string{"Launch", "Terminate"})
  1042. c.Assert(err, IsNil)
  1043. values := testServer.WaitRequest().PostForm
  1044. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1045. c.Assert(values.Get("Action"), Equals, "SuspendProcesses")
  1046. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  1047. c.Assert(values.Get("ScalingProcesses.member.1"), Equals, "Launch")
  1048. c.Assert(values.Get("ScalingProcesses.member.2"), Equals, "Terminate")
  1049. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  1050. }
  1051. func (s *S) TestTerminateInstanceInAutoScalingGroup(c *C) {
  1052. testServer.Response(200, nil, TerminateInstanceInAutoScalingGroupResponse)
  1053. st, _ := time.Parse(time.RFC3339, "2014-01-26T14:08:30.560Z")
  1054. resp, err := s.as.TerminateInstanceInAutoScalingGroup("i-br234123", false)
  1055. c.Assert(err, IsNil)
  1056. values := testServer.WaitRequest().PostForm
  1057. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1058. c.Assert(values.Get("Action"), Equals, "TerminateInstanceInAutoScalingGroup")
  1059. c.Assert(values.Get("InstanceId"), Equals, "i-br234123")
  1060. c.Assert(values.Get("ShouldDecrementDesiredCapacity"), Equals, "false")
  1061. expected := &TerminateInstanceInAutoScalingGroupResp{
  1062. Activity: Activity{
  1063. ActivityId: "cczc44a87-7d04-dsa15-31-d27c219864c5",
  1064. Cause: "At 2014-01-26T14:08:30Z instance i-br234123 was taken out of service in response to a user request.",
  1065. Description: "Terminating EC2 instance: i-br234123",
  1066. Details: "{\"Availability Zone\":\"us-east-1b\"}",
  1067. Progress: 0,
  1068. StartTime: st,
  1069. StatusCode: "InProgress",
  1070. },
  1071. RequestId: "8d798a29-f083-11e1-bdfb-cb223EXAMPLE",
  1072. }
  1073. c.Assert(resp, DeepEquals, expected)
  1074. }
  1075. func (s *S) TestUpdateAutoScalingGroup(c *C) {
  1076. testServer.Response(200, nil, UpdateAutoScalingGroupResponse)
  1077. asg := &AutoScalingGroup{
  1078. AutoScalingGroupName: "my-test-asg",
  1079. AvailabilityZones: []string{"us-east-1a", "us-east-1b"},
  1080. MinSize: 3,
  1081. MaxSize: 3,
  1082. DefaultCooldown: 600,
  1083. DesiredCapacity: 3,
  1084. LaunchConfigurationName: "my-test-lc",
  1085. VPCZoneIdentifier: "subnet-610acd08,subnet-530fc83a",
  1086. }
  1087. resp, err := s.as.UpdateAutoScalingGroup(asg)
  1088. c.Assert(err, IsNil)
  1089. values := testServer.WaitRequest().PostForm
  1090. c.Assert(values.Get("Version"), Equals, "2011-01-01")
  1091. c.Assert(values.Get("Action"), Equals, "UpdateAutoScalingGroup")
  1092. c.Assert(values.Get("AutoScalingGroupName"), Equals, "my-test-asg")
  1093. c.Assert(values.Get("AvailabilityZones.member.1"), Equals, "us-east-1a")
  1094. c.Assert(values.Get("AvailabilityZones.member.2"), Equals, "us-east-1b")
  1095. c.Assert(values.Get("MinSize"), Equals, "3")
  1096. c.Assert(values.Get("MaxSize"), Equals, "3")
  1097. c.Assert(values.Get("DefaultCooldown"), Equals, "600")
  1098. c.Assert(values.Get("DesiredCapacity"), Equals, "3")
  1099. c.Assert(values.Get("LaunchConfigurationName"), Equals, "my-test-lc")
  1100. c.Assert(values.Get("VPCZoneIdentifier"), Equals, "subnet-610acd08,subnet-530fc83a")
  1101. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  1102. }