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.
 
 
 

807 lines
27 KiB

  1. package ecs
  2. import (
  3. "testing"
  4. . "gopkg.in/check.v1"
  5. "github.com/goamz/goamz/aws"
  6. "github.com/goamz/goamz/testutil"
  7. )
  8. func Test(t *testing.T) {
  9. TestingT(t)
  10. }
  11. var _ = Suite(&S{})
  12. type S struct {
  13. ecs *ECS
  14. }
  15. var testServer = testutil.NewHTTPServer()
  16. var mockTest bool
  17. func (s *S) SetUpSuite(c *C) {
  18. testServer.Start()
  19. auth := aws.Auth{AccessKey: "abc", SecretKey: "123"}
  20. s.ecs = New(auth, aws.Region{ECSEndpoint: testServer.URL})
  21. }
  22. func (s *S) TearDownTest(c *C) {
  23. testServer.Flush()
  24. }
  25. // --------------------------------------------------------------------------
  26. // Detailed Unit Tests
  27. func (s *S) TestCreateCluster(c *C) {
  28. testServer.Response(200, nil, CreateClusterResponse)
  29. req := &CreateClusterReq{
  30. ClusterName: "default",
  31. }
  32. resp, err := s.ecs.CreateCluster(req)
  33. c.Assert(err, IsNil)
  34. values := testServer.WaitRequest().PostForm
  35. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  36. c.Assert(values.Get("Action"), Equals, "CreateCluster")
  37. c.Assert(values.Get("clusterName"), Equals, "default")
  38. c.Assert(resp.Cluster.ClusterArn, Equals, "arn:aws:ecs:region:aws_account_id:cluster/default")
  39. c.Assert(resp.Cluster.ClusterName, Equals, "default")
  40. c.Assert(resp.Cluster.Status, Equals, "ACTIVE")
  41. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  42. }
  43. func (s *S) TestDeregisterContainerInstance(c *C) {
  44. testServer.Response(200, nil, DeregisterContainerInstanceResponse)
  45. req := &DeregisterContainerInstanceReq{
  46. Cluster: "default",
  47. ContainerInstance: "uuid",
  48. Force: true,
  49. }
  50. resp, err := s.ecs.DeregisterContainerInstance(req)
  51. c.Assert(err, IsNil)
  52. values := testServer.WaitRequest().PostForm
  53. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  54. c.Assert(values.Get("Action"), Equals, "DeregisterContainerInstance")
  55. c.Assert(values.Get("cluster"), Equals, "default")
  56. c.Assert(values.Get("containerInstance"), Equals, "uuid")
  57. c.Assert(values.Get("force"), Equals, "true")
  58. expectedResource := []Resource{
  59. {
  60. DoubleValue: 0.0,
  61. IntegerValue: 2048,
  62. LongValue: 0,
  63. Name: "CPU",
  64. Type: "INTEGER",
  65. },
  66. {
  67. DoubleValue: 0.0,
  68. IntegerValue: 3955,
  69. LongValue: 0,
  70. Name: "MEMORY",
  71. Type: "INTEGER",
  72. },
  73. {
  74. DoubleValue: 0.0,
  75. IntegerValue: 0,
  76. LongValue: 0,
  77. Name: "PORTS",
  78. StringSetValue: []string{"2376", "22", "51678", "2375"},
  79. Type: "STRINGSET",
  80. },
  81. }
  82. c.Assert(resp.ContainerInstance.AgentConnected, Equals, false)
  83. c.Assert(resp.ContainerInstance.ContainerInstanceArn, Equals, "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_UUID")
  84. c.Assert(resp.ContainerInstance.Status, Equals, "INACTIVE")
  85. c.Assert(resp.ContainerInstance.Ec2InstanceId, Equals, "instance_id")
  86. c.Assert(resp.ContainerInstance.RegisteredResources, DeepEquals, expectedResource)
  87. c.Assert(resp.ContainerInstance.RemainingResources, DeepEquals, expectedResource)
  88. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  89. }
  90. func (s *S) TestDeregisterTaskDefinition(c *C) {
  91. testServer.Response(200, nil, DeregisterTaskDefinitionResponse)
  92. req := &DeregisterTaskDefinitionReq{
  93. TaskDefinition: "sleep360:2",
  94. }
  95. resp, err := s.ecs.DeregisterTaskDefinition(req)
  96. c.Assert(err, IsNil)
  97. values := testServer.WaitRequest().PostForm
  98. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  99. c.Assert(values.Get("Action"), Equals, "DeregisterTaskDefinition")
  100. c.Assert(values.Get("taskDefinition"), Equals, "sleep360:2")
  101. expected := TaskDefinition{
  102. Family: "sleep360",
  103. Revision: 2,
  104. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  105. ContainerDefinitions: []ContainerDefinition{
  106. {
  107. Command: []string{"sleep", "360"},
  108. Cpu: 10,
  109. EntryPoint: []string{"/bin/sh"},
  110. Environment: []KeyValuePair{
  111. {
  112. Name: "envVar",
  113. Value: "foo",
  114. },
  115. },
  116. Essential: true,
  117. Image: "busybox",
  118. Memory: 10,
  119. Name: "sleep",
  120. },
  121. },
  122. }
  123. c.Assert(resp.TaskDefinition, DeepEquals, expected)
  124. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  125. }
  126. func (s *S) TestDescribeClusters(c *C) {
  127. testServer.Response(200, nil, DescribeClustersResponse)
  128. req := &DescribeClustersReq{
  129. Clusters: []string{"test", "default"},
  130. }
  131. resp, err := s.ecs.DescribeClusters(req)
  132. c.Assert(err, IsNil)
  133. values := testServer.WaitRequest().PostForm
  134. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  135. c.Assert(values.Get("Action"), Equals, "DescribeClusters")
  136. c.Assert(values.Get("clusters.member.1"), Equals, "test")
  137. c.Assert(values.Get("clusters.member.2"), Equals, "default")
  138. expected := []Cluster{
  139. {
  140. ClusterName: "test",
  141. ClusterArn: "arn:aws:ecs:us-east-1:aws_account_id:cluster/test",
  142. Status: "ACTIVE",
  143. },
  144. {
  145. ClusterName: "default",
  146. ClusterArn: "arn:aws:ecs:us-east-1:aws_account_id:cluster/default",
  147. Status: "ACTIVE",
  148. },
  149. }
  150. c.Assert(resp.Clusters, DeepEquals, expected)
  151. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  152. }
  153. func (s *S) TestDescribeContainerInstances(c *C) {
  154. testServer.Response(200, nil, DescribeContainerInstancesResponse)
  155. req := &DescribeContainerInstancesReq{
  156. Cluster: "test",
  157. ContainerInstances: []string{"arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_UUID"},
  158. }
  159. resp, err := s.ecs.DescribeContainerInstances(req)
  160. c.Assert(err, IsNil)
  161. values := testServer.WaitRequest().PostForm
  162. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  163. c.Assert(values.Get("Action"), Equals, "DescribeContainerInstances")
  164. c.Assert(values.Get("cluster"), Equals, "test")
  165. c.Assert(values.Get("containerInstances.member.1"),
  166. Equals, "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_UUID")
  167. expected := []ContainerInstance{
  168. ContainerInstance{
  169. AgentConnected: true,
  170. ContainerInstanceArn: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_UUID",
  171. Status: "ACTIVE",
  172. Ec2InstanceId: "instance_id",
  173. RegisteredResources: []Resource{
  174. {
  175. DoubleValue: 0.0,
  176. IntegerValue: 2048,
  177. LongValue: 0,
  178. Name: "CPU",
  179. Type: "INTEGER",
  180. },
  181. {
  182. DoubleValue: 0.0,
  183. IntegerValue: 3955,
  184. LongValue: 0,
  185. Name: "MEMORY",
  186. Type: "INTEGER",
  187. },
  188. {
  189. DoubleValue: 0.0,
  190. IntegerValue: 0,
  191. LongValue: 0,
  192. Name: "PORTS",
  193. StringSetValue: []string{"2376", "22", "51678", "2375"},
  194. Type: "STRINGSET",
  195. },
  196. },
  197. RemainingResources: []Resource{
  198. {
  199. DoubleValue: 0.0,
  200. IntegerValue: 2048,
  201. LongValue: 0,
  202. Name: "CPU",
  203. Type: "INTEGER",
  204. },
  205. {
  206. DoubleValue: 0.0,
  207. IntegerValue: 3955,
  208. LongValue: 0,
  209. Name: "MEMORY",
  210. Type: "INTEGER",
  211. },
  212. {
  213. DoubleValue: 0.0,
  214. IntegerValue: 0,
  215. LongValue: 0,
  216. Name: "PORTS",
  217. StringSetValue: []string{"2376", "22", "51678", "2375"},
  218. Type: "STRINGSET",
  219. },
  220. },
  221. },
  222. }
  223. c.Assert(resp.ContainerInstances, DeepEquals, expected)
  224. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  225. }
  226. func (s *S) TestDescribeTaskDefinition(c *C) {
  227. testServer.Response(200, nil, DescribeTaskDefinitionResponse)
  228. req := &DescribeTaskDefinitionReq{
  229. TaskDefinition: "sleep360:2",
  230. }
  231. resp, err := s.ecs.DescribeTaskDefinition(req)
  232. c.Assert(err, IsNil)
  233. values := testServer.WaitRequest().PostForm
  234. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  235. c.Assert(values.Get("Action"), Equals, "DescribeTaskDefinition")
  236. c.Assert(values.Get("taskDefinition"), Equals, "sleep360:2")
  237. expected := TaskDefinition{
  238. Family: "sleep360",
  239. Revision: 2,
  240. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  241. ContainerDefinitions: []ContainerDefinition{
  242. {
  243. Command: []string{"sleep", "360"},
  244. Cpu: 10,
  245. EntryPoint: []string{"/bin/sh"},
  246. Environment: []KeyValuePair{
  247. {
  248. Name: "envVar",
  249. Value: "foo",
  250. },
  251. },
  252. Essential: true,
  253. Image: "busybox",
  254. Memory: 10,
  255. Name: "sleep",
  256. },
  257. },
  258. }
  259. c.Assert(resp.TaskDefinition, DeepEquals, expected)
  260. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  261. }
  262. func (s *S) TestDescribeTasks(c *C) {
  263. testServer.Response(200, nil, DescribeTasksResponse)
  264. req := &DescribeTasksReq{
  265. Cluster: "test",
  266. Tasks: []string{"arn:aws:ecs:us-east-1:aws_account_id:task/UUID"},
  267. }
  268. resp, err := s.ecs.DescribeTasks(req)
  269. c.Assert(err, IsNil)
  270. values := testServer.WaitRequest().PostForm
  271. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  272. c.Assert(values.Get("Action"), Equals, "DescribeTasks")
  273. c.Assert(values.Get("cluster"), Equals, "test")
  274. c.Assert(values.Get("tasks.member.1"),
  275. Equals, "arn:aws:ecs:us-east-1:aws_account_id:task/UUID")
  276. expected := []Task{
  277. Task{
  278. Containers: []Container{
  279. {
  280. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  281. Name: "sleep",
  282. ContainerArn: "arn:aws:ecs:us-east-1:aws_account_id:container/UUID",
  283. LastStatus: "RUNNING",
  284. },
  285. },
  286. Overrides: TaskOverride{
  287. ContainerOverrides: []ContainerOverride{
  288. {
  289. Name: "sleep",
  290. },
  291. },
  292. },
  293. DesiredStatus: "RUNNING",
  294. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  295. ContainerInstanceArn: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID",
  296. LastStatus: "RUNNING",
  297. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  298. },
  299. }
  300. c.Assert(resp.Tasks, DeepEquals, expected)
  301. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  302. }
  303. func (s *S) TestDiscoverPollEndpoint(c *C) {
  304. testServer.Response(200, nil, DiscoverPollEndpointResponse)
  305. req := &DiscoverPollEndpointReq{
  306. ContainerInstance: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID",
  307. }
  308. resp, err := s.ecs.DiscoverPollEndpoint(req)
  309. c.Assert(err, IsNil)
  310. values := testServer.WaitRequest().PostForm
  311. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  312. c.Assert(values.Get("Action"), Equals, "DiscoverPollEndpoint")
  313. c.Assert(values.Get("containerInstance"),
  314. Equals, "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID")
  315. c.Assert(resp.Endpoint, Equals, "https://ecs-x-1.us-east-1.amazonaws.com/")
  316. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  317. }
  318. func (s *S) TestListClusters(c *C) {
  319. testServer.Response(200, nil, ListClustersResponse)
  320. req := &ListClustersReq{
  321. MaxResults: 2,
  322. NextToken: "Token_UUID",
  323. }
  324. resp, err := s.ecs.ListClusters(req)
  325. c.Assert(err, IsNil)
  326. values := testServer.WaitRequest().PostForm
  327. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  328. c.Assert(values.Get("Action"), Equals, "ListClusters")
  329. c.Assert(values.Get("maxResults"), Equals, "2")
  330. c.Assert(values.Get("nextToken"), Equals, "Token_UUID")
  331. c.Assert(resp.ClusterArns, DeepEquals, []string{"arn:aws:ecs:us-east-1:aws_account_id:cluster/default",
  332. "arn:aws:ecs:us-east-1:aws_account_id:cluster/test"})
  333. c.Assert(resp.NextToken, Equals, "token_UUID")
  334. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  335. }
  336. func (s *S) TestListContainerInstances(c *C) {
  337. testServer.Response(200, nil, ListContainerInstancesResponse)
  338. req := &ListContainerInstancesReq{
  339. MaxResults: 2,
  340. NextToken: "Token_UUID",
  341. Cluster: "test",
  342. }
  343. resp, err := s.ecs.ListContainerInstances(req)
  344. c.Assert(err, IsNil)
  345. values := testServer.WaitRequest().PostForm
  346. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  347. c.Assert(values.Get("Action"), Equals, "ListContainerInstances")
  348. c.Assert(values.Get("maxResults"), Equals, "2")
  349. c.Assert(values.Get("cluster"), Equals, "test")
  350. c.Assert(values.Get("nextToken"), Equals, "Token_UUID")
  351. c.Assert(resp.ContainerInstanceArns, DeepEquals, []string{
  352. "arn:aws:ecs:us-east-1:aws_account_id:container-instance/uuid-1",
  353. "arn:aws:ecs:us-east-1:aws_account_id:container-instance/uuid-2"})
  354. c.Assert(resp.NextToken, Equals, "token_UUID")
  355. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  356. }
  357. func (s *S) TestListTaskDefinitions(c *C) {
  358. testServer.Response(200, nil, ListTaskDefinitionsResponse)
  359. req := &ListTaskDefinitionsReq{
  360. MaxResults: 2,
  361. NextToken: "Token_UUID",
  362. FamilyPrefix: "sleep360",
  363. }
  364. resp, err := s.ecs.ListTaskDefinitions(req)
  365. c.Assert(err, IsNil)
  366. values := testServer.WaitRequest().PostForm
  367. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  368. c.Assert(values.Get("Action"), Equals, "ListTaskDefinitions")
  369. c.Assert(values.Get("maxResults"), Equals, "2")
  370. c.Assert(values.Get("familyPrefix"), Equals, "sleep360")
  371. c.Assert(values.Get("nextToken"), Equals, "Token_UUID")
  372. c.Assert(resp.TaskDefinitionArns, DeepEquals, []string{
  373. "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:1",
  374. "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2"})
  375. c.Assert(resp.NextToken, Equals, "token_UUID")
  376. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  377. }
  378. func (s *S) TestListTasks(c *C) {
  379. testServer.Response(200, nil, ListTasksResponse)
  380. req := &ListTasksReq{
  381. MaxResults: 2,
  382. NextToken: "Token_UUID",
  383. Family: "sleep360",
  384. Cluster: "test",
  385. ContainerInstance: "container_uuid",
  386. }
  387. resp, err := s.ecs.ListTasks(req)
  388. c.Assert(err, IsNil)
  389. values := testServer.WaitRequest().PostForm
  390. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  391. c.Assert(values.Get("Action"), Equals, "ListTasks")
  392. c.Assert(values.Get("maxResults"), Equals, "2")
  393. c.Assert(values.Get("family"), Equals, "sleep360")
  394. c.Assert(values.Get("containerInstance"), Equals, "container_uuid")
  395. c.Assert(values.Get("cluster"), Equals, "test")
  396. c.Assert(values.Get("nextToken"), Equals, "Token_UUID")
  397. c.Assert(resp.TaskArns, DeepEquals, []string{
  398. "arn:aws:ecs:us-east-1:aws_account_id:task/uuid_1",
  399. "arn:aws:ecs:us-east-1:aws_account_id:task/uuid_2"})
  400. c.Assert(resp.NextToken, Equals, "token_UUID")
  401. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  402. }
  403. func (s *S) TestRegisterContainerInstance(c *C) {
  404. testServer.Response(200, nil, RegisterContainerInstanceResponse)
  405. resources := []Resource{
  406. {
  407. DoubleValue: 0.0,
  408. IntegerValue: 2048,
  409. LongValue: 0,
  410. Name: "CPU",
  411. Type: "INTEGER",
  412. },
  413. {
  414. DoubleValue: 0.0,
  415. IntegerValue: 3955,
  416. LongValue: 0,
  417. Name: "MEMORY",
  418. Type: "INTEGER",
  419. },
  420. {
  421. DoubleValue: 0.0,
  422. IntegerValue: 0,
  423. LongValue: 0,
  424. Name: "PORTS",
  425. StringSetValue: []string{"2376", "22", "51678", "2375"},
  426. Type: "STRINGSET",
  427. },
  428. }
  429. req := &RegisterContainerInstanceReq{
  430. Cluster: "default",
  431. InstanceIdentityDocument: "foo",
  432. InstanceIdentityDocumentSignature: "baz",
  433. TotalResources: resources,
  434. }
  435. resp, err := s.ecs.RegisterContainerInstance(req)
  436. c.Assert(err, IsNil)
  437. values := testServer.WaitRequest().PostForm
  438. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  439. c.Assert(values.Get("Action"), Equals, "RegisterContainerInstance")
  440. c.Assert(values.Get("cluster"), Equals, "default")
  441. c.Assert(values.Get("instanceIdentityDocument"), Equals, "foo")
  442. c.Assert(values.Get("instanceIdentityDocumentSignature"), Equals, "baz")
  443. c.Assert(values.Get("totalResources.member.1.doubleValue"), Equals, "0.0")
  444. c.Assert(values.Get("totalResources.member.1.integerValue"), Equals, "2048")
  445. c.Assert(values.Get("totalResources.member.1.longValue"), Equals, "0")
  446. c.Assert(values.Get("totalResources.member.1.name"), Equals, "CPU")
  447. c.Assert(values.Get("totalResources.member.1.type"), Equals, "INTEGER")
  448. c.Assert(values.Get("totalResources.member.2.doubleValue"), Equals, "0.0")
  449. c.Assert(values.Get("totalResources.member.2.integerValue"), Equals, "3955")
  450. c.Assert(values.Get("totalResources.member.2.longValue"), Equals, "0")
  451. c.Assert(values.Get("totalResources.member.2.name"), Equals, "MEMORY")
  452. c.Assert(values.Get("totalResources.member.2.type"), Equals, "INTEGER")
  453. c.Assert(values.Get("totalResources.member.3.doubleValue"), Equals, "0.0")
  454. c.Assert(values.Get("totalResources.member.3.integerValue"), Equals, "0")
  455. c.Assert(values.Get("totalResources.member.3.longValue"), Equals, "0")
  456. c.Assert(values.Get("totalResources.member.3.name"), Equals, "PORTS")
  457. c.Assert(values.Get("totalResources.member.3.stringSetValue.member.1"), Equals, "2376")
  458. c.Assert(values.Get("totalResources.member.3.stringSetValue.member.2"), Equals, "22")
  459. c.Assert(values.Get("totalResources.member.3.stringSetValue.member.3"), Equals, "51678")
  460. c.Assert(values.Get("totalResources.member.3.stringSetValue.member.4"), Equals, "2375")
  461. c.Assert(values.Get("totalResources.member.3.type"), Equals, "STRINGSET")
  462. c.Assert(resp.ContainerInstance.AgentConnected, Equals, true)
  463. c.Assert(resp.ContainerInstance.ContainerInstanceArn, Equals, "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_UUID")
  464. c.Assert(resp.ContainerInstance.Status, Equals, "ACTIVE")
  465. c.Assert(resp.ContainerInstance.Ec2InstanceId, Equals, "instance_id")
  466. c.Assert(resp.ContainerInstance.RegisteredResources, DeepEquals, resources)
  467. c.Assert(resp.ContainerInstance.RemainingResources, DeepEquals, resources)
  468. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  469. }
  470. func (s *S) TestRegisterTaskDefinition(c *C) {
  471. testServer.Response(200, nil, RegisterTaskDefinitionResponse)
  472. CDefinitions := []ContainerDefinition{
  473. {
  474. Command: []string{"sleep", "360"},
  475. Cpu: 10,
  476. EntryPoint: []string{"/bin/sh"},
  477. Environment: []KeyValuePair{
  478. {
  479. Name: "envVar",
  480. Value: "foo",
  481. },
  482. },
  483. Essential: true,
  484. Image: "busybox",
  485. Memory: 10,
  486. Name: "sleep",
  487. MountPoints: []MountPoint{
  488. {
  489. ContainerPath: "/tmp/myfile",
  490. ReadOnly: false,
  491. SourceVolume: "/srv/myfile",
  492. },
  493. {
  494. ContainerPath: "/tmp/myfile2",
  495. ReadOnly: true,
  496. SourceVolume: "/srv/myfile2",
  497. },
  498. },
  499. VolumesFrom: []VolumeFrom{
  500. {
  501. ReadOnly: true,
  502. SourceContainer: "foo",
  503. },
  504. },
  505. },
  506. }
  507. req := &RegisterTaskDefinitionReq{
  508. Family: "sleep360",
  509. ContainerDefinitions: CDefinitions,
  510. Volumes: []Volume{
  511. {
  512. Name: "/srv/myfile",
  513. Host: HostVolumeProperties{
  514. SourcePath: "/srv/myfile",
  515. },
  516. },
  517. },
  518. }
  519. resp, err := s.ecs.RegisterTaskDefinition(req)
  520. c.Assert(err, IsNil)
  521. values := testServer.WaitRequest().PostForm
  522. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  523. c.Assert(values.Get("Action"), Equals, "RegisterTaskDefinition")
  524. c.Assert(values.Get("containerDefinitions.member.1.command.member.1"), Equals, "sleep")
  525. c.Assert(values.Get("containerDefinitions.member.1.command.member.2"), Equals, "360")
  526. c.Assert(values.Get("containerDefinitions.member.1.cpu"), Equals, "10")
  527. c.Assert(values.Get("containerDefinitions.member.1.memory"), Equals, "10")
  528. c.Assert(values.Get("containerDefinitions.member.1.entryPoint.member.1"), Equals, "/bin/sh")
  529. c.Assert(values.Get("containerDefinitions.member.1.environment.member.1.name"), Equals, "envVar")
  530. c.Assert(values.Get("containerDefinitions.member.1.environment.member.1.value"), Equals, "foo")
  531. c.Assert(values.Get("containerDefinitions.member.1.essential"), Equals, "true")
  532. c.Assert(values.Get("containerDefinitions.member.1.image"), Equals, "busybox")
  533. c.Assert(values.Get("containerDefinitions.member.1.memory"), Equals, "10")
  534. c.Assert(values.Get("containerDefinitions.member.1.name"), Equals, "sleep")
  535. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.1.containerPath"), Equals, "/tmp/myfile")
  536. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.1.readOnly"), Equals, "false")
  537. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.1.sourceVolume"), Equals, "/srv/myfile")
  538. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.2.containerPath"), Equals, "/tmp/myfile2")
  539. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.2.readOnly"), Equals, "true")
  540. c.Assert(values.Get("containerDefinitions.member.1.mountPoints.member.2.sourceVolume"), Equals, "/srv/myfile2")
  541. c.Assert(values.Get("containerDefinitions.member.1.volumesFrom.member.1.readOnly"), Equals, "true")
  542. c.Assert(values.Get("containerDefinitions.member.1.volumesFrom.member.1.sourceContainer"), Equals, "foo")
  543. c.Assert(values.Get("family"), Equals, "sleep360")
  544. c.Assert(values.Get("volumes.member.1.name"), Equals, "/srv/myfile")
  545. c.Assert(values.Get("volumes.member.1.host.sourcePath"), Equals, "/srv/myfile")
  546. expected := TaskDefinition{
  547. Family: "sleep360",
  548. Revision: 2,
  549. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  550. ContainerDefinitions: CDefinitions,
  551. Volumes: []Volume{
  552. {
  553. Name: "/srv/myfile",
  554. Host: HostVolumeProperties{
  555. SourcePath: "/srv/myfile",
  556. },
  557. },
  558. },
  559. }
  560. c.Assert(resp.TaskDefinition, DeepEquals, expected)
  561. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  562. }
  563. func (s *S) TestRunTask(c *C) {
  564. testServer.Response(200, nil, RunTaskResponse)
  565. req := &RunTaskReq{
  566. Cluster: "test",
  567. Count: 1,
  568. TaskDefinition: "sleep360:2",
  569. }
  570. resp, err := s.ecs.RunTask(req)
  571. c.Assert(err, IsNil)
  572. values := testServer.WaitRequest().PostForm
  573. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  574. c.Assert(values.Get("Action"), Equals, "RunTask")
  575. c.Assert(values.Get("cluster"), Equals, "test")
  576. c.Assert(values.Get("count"), Equals, "1")
  577. c.Assert(values.Get("taskDefinition"), Equals, "sleep360:2")
  578. expected := []Task{
  579. Task{
  580. Containers: []Container{
  581. {
  582. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  583. Name: "sleep",
  584. ContainerArn: "arn:aws:ecs:us-east-1:aws_account_id:container/UUID",
  585. LastStatus: "RUNNING",
  586. },
  587. },
  588. Overrides: TaskOverride{
  589. ContainerOverrides: []ContainerOverride{
  590. {
  591. Name: "sleep",
  592. },
  593. },
  594. },
  595. DesiredStatus: "RUNNING",
  596. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  597. ContainerInstanceArn: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID",
  598. LastStatus: "PENDING",
  599. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  600. },
  601. }
  602. c.Assert(resp.Tasks, DeepEquals, expected)
  603. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  604. }
  605. func (s *S) TestStartTask(c *C) {
  606. testServer.Response(200, nil, StartTaskResponse)
  607. req := &StartTaskReq{
  608. Cluster: "test",
  609. ContainerInstances: []string{"containerUUID"},
  610. TaskDefinition: "sleep360:2",
  611. }
  612. resp, err := s.ecs.StartTask(req)
  613. c.Assert(err, IsNil)
  614. values := testServer.WaitRequest().PostForm
  615. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  616. c.Assert(values.Get("Action"), Equals, "StartTask")
  617. c.Assert(values.Get("cluster"), Equals, "test")
  618. c.Assert(values.Get("taskDefinition"), Equals, "sleep360:2")
  619. c.Assert(values.Get("containerInstances.member.1"), Equals, "containerUUID")
  620. expected := []Task{
  621. Task{
  622. Containers: []Container{
  623. {
  624. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  625. Name: "sleep",
  626. ContainerArn: "arn:aws:ecs:us-east-1:aws_account_id:container/UUID",
  627. LastStatus: "RUNNING",
  628. },
  629. },
  630. Overrides: TaskOverride{
  631. ContainerOverrides: []ContainerOverride{
  632. {
  633. Name: "sleep",
  634. },
  635. },
  636. },
  637. DesiredStatus: "RUNNING",
  638. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  639. ContainerInstanceArn: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID",
  640. LastStatus: "PENDING",
  641. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  642. },
  643. }
  644. c.Assert(resp.Tasks, DeepEquals, expected)
  645. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  646. }
  647. func (s *S) TestStopTask(c *C) {
  648. testServer.Response(200, nil, StopTaskResponse)
  649. req := &StopTaskReq{
  650. Cluster: "test",
  651. Task: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  652. }
  653. resp, err := s.ecs.StopTask(req)
  654. c.Assert(err, IsNil)
  655. values := testServer.WaitRequest().PostForm
  656. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  657. c.Assert(values.Get("Action"), Equals, "StopTask")
  658. c.Assert(values.Get("cluster"), Equals, "test")
  659. c.Assert(values.Get("task"), Equals, "arn:aws:ecs:us-east-1:aws_account_id:task/UUID")
  660. expected := Task{
  661. Containers: []Container{
  662. {
  663. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  664. Name: "sleep",
  665. ContainerArn: "arn:aws:ecs:us-east-1:aws_account_id:container/UUID",
  666. LastStatus: "RUNNING",
  667. },
  668. },
  669. Overrides: TaskOverride{
  670. ContainerOverrides: []ContainerOverride{
  671. {
  672. Name: "sleep",
  673. },
  674. },
  675. },
  676. DesiredStatus: "STOPPED",
  677. TaskArn: "arn:aws:ecs:us-east-1:aws_account_id:task/UUID",
  678. ContainerInstanceArn: "arn:aws:ecs:us-east-1:aws_account_id:container-instance/UUID",
  679. LastStatus: "RUNNING",
  680. TaskDefinitionArn: "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:2",
  681. }
  682. c.Assert(resp.Task, DeepEquals, expected)
  683. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  684. }
  685. func (s *S) TestSubmitContainerStateChange(c *C) {
  686. testServer.Response(200, nil, SubmitContainerStateChangeResponse)
  687. networkBindings := []NetworkBinding{
  688. {
  689. BindIp: "127.0.0.1",
  690. ContainerPort: 80,
  691. HostPort: 80,
  692. },
  693. }
  694. req := &SubmitContainerStateChangeReq{
  695. Cluster: "test",
  696. ContainerName: "container",
  697. ExitCode: 0,
  698. Reason: "reason",
  699. Status: "status",
  700. Task: "taskUUID",
  701. NetworkBindings: networkBindings,
  702. }
  703. resp, err := s.ecs.SubmitContainerStateChange(req)
  704. c.Assert(err, IsNil)
  705. values := testServer.WaitRequest().PostForm
  706. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  707. c.Assert(values.Get("Action"), Equals, "SubmitContainerStateChange")
  708. c.Assert(values.Get("cluster"), Equals, "test")
  709. c.Assert(values.Get("containerName"), Equals, "container")
  710. c.Assert(values.Get("exitCode"), Equals, "0")
  711. c.Assert(values.Get("reason"), Equals, "reason")
  712. c.Assert(values.Get("status"), Equals, "status")
  713. c.Assert(values.Get("task"), Equals, "taskUUID")
  714. c.Assert(values.Get("networkBindings.member.1.bindIp"), Equals, "127.0.0.1")
  715. c.Assert(values.Get("networkBindings.member.1.containerPort"), Equals, "80")
  716. c.Assert(values.Get("networkBindings.member.1.hostPort"), Equals, "80")
  717. c.Assert(resp.Acknowledgment, Equals, "ACK")
  718. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  719. }
  720. func (s *S) TestSubmitTaskStateChange(c *C) {
  721. testServer.Response(200, nil, SubmitTaskStateChangeResponse)
  722. req := &SubmitTaskStateChangeReq{
  723. Cluster: "test",
  724. Reason: "reason",
  725. Status: "status",
  726. Task: "taskUUID",
  727. }
  728. resp, err := s.ecs.SubmitTaskStateChange(req)
  729. c.Assert(err, IsNil)
  730. values := testServer.WaitRequest().PostForm
  731. c.Assert(values.Get("Version"), Equals, "2014-11-13")
  732. c.Assert(values.Get("Action"), Equals, "SubmitTaskStateChange")
  733. c.Assert(values.Get("cluster"), Equals, "test")
  734. c.Assert(values.Get("reason"), Equals, "reason")
  735. c.Assert(values.Get("status"), Equals, "status")
  736. c.Assert(values.Get("task"), Equals, "taskUUID")
  737. c.Assert(resp.Acknowledgment, Equals, "ACK")
  738. c.Assert(resp.RequestId, Equals, "8d798a29-f083-11e1-bdfb-cb223EXAMPLE")
  739. }