PageRenderTime 42ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/boto-2.5.2/tests/unit/emr/test_emr_responses.py

#
Python | 373 lines | 345 code | 6 blank | 22 comment | 0 complexity | be83a998fbfcdefa6fc2fd55dccd4172 MD5 | raw file
  1. # Copyright (c) 2010 Jeremy Thurgood <firxen+boto@gmail.com>
  2. #
  3. # Permission is hereby granted, free of charge, to any person obtaining a
  4. # copy of this software and associated documentation files (the
  5. # "Software"), to deal in the Software without restriction, including
  6. # without limitation the rights to use, copy, modify, merge, publish, dis-
  7. # tribute, sublicense, and/or sell copies of the Software, and to permit
  8. # persons to whom the Software is furnished to do so, subject to the fol-
  9. # lowing conditions:
  10. #
  11. # The above copyright notice and this permission notice shall be included
  12. # in all copies or substantial portions of the Software.
  13. #
  14. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15. # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
  16. # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
  17. # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  18. # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20. # IN THE SOFTWARE.
  21. # NOTE: These tests only cover the very simple cases I needed to test
  22. # for the InstanceGroup fix.
  23. import xml.sax
  24. import unittest
  25. from boto import handler
  26. from boto.emr import emrobject
  27. from boto.resultset import ResultSet
  28. JOB_FLOW_EXAMPLE = """
  29. <DescribeJobFlowsResponse
  30. xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-01-15">
  31. <DescribeJobFlowsResult>
  32. <JobFlows>
  33. <member>
  34. <ExecutionStatusDetail>
  35. <CreationDateTime>2009-01-28T21:49:16Z</CreationDateTime>
  36. <StartDateTime>2009-01-28T21:49:16Z</StartDateTime>
  37. <State>STARTING</State>
  38. </ExecutionStatusDetail>
  39. <Name>MyJobFlowName</Name>
  40. <LogUri>mybucket/subdir/</LogUri>
  41. <Steps>
  42. <member>
  43. <ExecutionStatusDetail>
  44. <CreationDateTime>2009-01-28T21:49:16Z</CreationDateTime>
  45. <State>PENDING</State>
  46. </ExecutionStatusDetail>
  47. <StepConfig>
  48. <HadoopJarStep>
  49. <Jar>MyJarFile</Jar>
  50. <MainClass>MyMailClass</MainClass>
  51. <Args>
  52. <member>arg1</member>
  53. <member>arg2</member>
  54. </Args>
  55. <Properties/>
  56. </HadoopJarStep>
  57. <Name>MyStepName</Name>
  58. <ActionOnFailure>CONTINUE</ActionOnFailure>
  59. </StepConfig>
  60. </member>
  61. </Steps>
  62. <JobFlowId>j-3UN6WX5RRO2AG</JobFlowId>
  63. <Instances>
  64. <Placement>
  65. <AvailabilityZone>us-east-1a</AvailabilityZone>
  66. </Placement>
  67. <SlaveInstanceType>m1.small</SlaveInstanceType>
  68. <MasterInstanceType>m1.small</MasterInstanceType>
  69. <Ec2KeyName>myec2keyname</Ec2KeyName>
  70. <InstanceCount>4</InstanceCount>
  71. <KeepJobFlowAliveWhenNoSteps>true</KeepJobFlowAliveWhenNoSteps>
  72. </Instances>
  73. </member>
  74. </JobFlows>
  75. </DescribeJobFlowsResult>
  76. <ResponseMetadata>
  77. <RequestId>9cea3229-ed85-11dd-9877-6fad448a8419</RequestId>
  78. </ResponseMetadata>
  79. </DescribeJobFlowsResponse>
  80. """
  81. JOB_FLOW_COMPLETED = """
  82. <DescribeJobFlowsResponse xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-03-31">
  83. <DescribeJobFlowsResult>
  84. <JobFlows>
  85. <member>
  86. <ExecutionStatusDetail>
  87. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  88. <LastStateChangeReason>Steps completed</LastStateChangeReason>
  89. <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
  90. <ReadyDateTime>2010-10-21T01:03:59Z</ReadyDateTime>
  91. <State>COMPLETED</State>
  92. <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
  93. </ExecutionStatusDetail>
  94. <BootstrapActions/>
  95. <Name>RealJobFlowName</Name>
  96. <LogUri>s3n://example.emrtest.scripts/jobflow_logs/</LogUri>
  97. <Steps>
  98. <member>
  99. <StepConfig>
  100. <HadoopJarStep>
  101. <Jar>s3n://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar</Jar>
  102. <Args>
  103. <member>s3n://us-east-1.elasticmapreduce/libs/state-pusher/0.1/fetch</member>
  104. </Args>
  105. <Properties/>
  106. </HadoopJarStep>
  107. <Name>Setup Hadoop Debugging</Name>
  108. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  109. </StepConfig>
  110. <ExecutionStatusDetail>
  111. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  112. <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
  113. <State>COMPLETED</State>
  114. <EndDateTime>2010-10-21T01:04:22Z</EndDateTime>
  115. </ExecutionStatusDetail>
  116. </member>
  117. <member>
  118. <StepConfig>
  119. <HadoopJarStep>
  120. <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
  121. <Args>
  122. <member>-mapper</member>
  123. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-InitialMapper.py</member>
  124. <member>-reducer</member>
  125. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-InitialReducer.py</member>
  126. <member>-input</member>
  127. <member>s3://example.emrtest.data/raw/2010/10/20/*</member>
  128. <member>-input</member>
  129. <member>s3://example.emrtest.data/raw/2010/10/19/*</member>
  130. <member>-input</member>
  131. <member>s3://example.emrtest.data/raw/2010/10/18/*</member>
  132. <member>-input</member>
  133. <member>s3://example.emrtest.data/raw/2010/10/17/*</member>
  134. <member>-input</member>
  135. <member>s3://example.emrtest.data/raw/2010/10/16/*</member>
  136. <member>-input</member>
  137. <member>s3://example.emrtest.data/raw/2010/10/15/*</member>
  138. <member>-input</member>
  139. <member>s3://example.emrtest.data/raw/2010/10/14/*</member>
  140. <member>-output</member>
  141. <member>s3://example.emrtest.crunched/</member>
  142. </Args>
  143. <Properties/>
  144. </HadoopJarStep>
  145. <Name>testjob_Initial</Name>
  146. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  147. </StepConfig>
  148. <ExecutionStatusDetail>
  149. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  150. <StartDateTime>2010-10-21T01:04:22Z</StartDateTime>
  151. <State>COMPLETED</State>
  152. <EndDateTime>2010-10-21T01:36:18Z</EndDateTime>
  153. </ExecutionStatusDetail>
  154. </member>
  155. <member>
  156. <StepConfig>
  157. <HadoopJarStep>
  158. <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
  159. <Args>
  160. <member>-mapper</member>
  161. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step1Mapper.py</member>
  162. <member>-reducer</member>
  163. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step1Reducer.py</member>
  164. <member>-input</member>
  165. <member>s3://example.emrtest.crunched/*</member>
  166. <member>-output</member>
  167. <member>s3://example.emrtest.step1/</member>
  168. </Args>
  169. <Properties/>
  170. </HadoopJarStep>
  171. <Name>testjob_step1</Name>
  172. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  173. </StepConfig>
  174. <ExecutionStatusDetail>
  175. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  176. <StartDateTime>2010-10-21T01:36:18Z</StartDateTime>
  177. <State>COMPLETED</State>
  178. <EndDateTime>2010-10-21T01:37:51Z</EndDateTime>
  179. </ExecutionStatusDetail>
  180. </member>
  181. <member>
  182. <StepConfig>
  183. <HadoopJarStep>
  184. <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
  185. <Args>
  186. <member>-mapper</member>
  187. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step2Mapper.py</member>
  188. <member>-reducer</member>
  189. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step2Reducer.py</member>
  190. <member>-input</member>
  191. <member>s3://example.emrtest.crunched/*</member>
  192. <member>-output</member>
  193. <member>s3://example.emrtest.step2/</member>
  194. </Args>
  195. <Properties/>
  196. </HadoopJarStep>
  197. <Name>testjob_step2</Name>
  198. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  199. </StepConfig>
  200. <ExecutionStatusDetail>
  201. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  202. <StartDateTime>2010-10-21T01:37:51Z</StartDateTime>
  203. <State>COMPLETED</State>
  204. <EndDateTime>2010-10-21T01:39:32Z</EndDateTime>
  205. </ExecutionStatusDetail>
  206. </member>
  207. <member>
  208. <StepConfig>
  209. <HadoopJarStep>
  210. <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
  211. <Args>
  212. <member>-mapper</member>
  213. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step3Mapper.py</member>
  214. <member>-reducer</member>
  215. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step3Reducer.py</member>
  216. <member>-input</member>
  217. <member>s3://example.emrtest.step1/*</member>
  218. <member>-output</member>
  219. <member>s3://example.emrtest.step3/</member>
  220. </Args>
  221. <Properties/>
  222. </HadoopJarStep>
  223. <Name>testjob_step3</Name>
  224. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  225. </StepConfig>
  226. <ExecutionStatusDetail>
  227. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  228. <StartDateTime>2010-10-21T01:39:32Z</StartDateTime>
  229. <State>COMPLETED</State>
  230. <EndDateTime>2010-10-21T01:41:22Z</EndDateTime>
  231. </ExecutionStatusDetail>
  232. </member>
  233. <member>
  234. <StepConfig>
  235. <HadoopJarStep>
  236. <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
  237. <Args>
  238. <member>-mapper</member>
  239. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step4Mapper.py</member>
  240. <member>-reducer</member>
  241. <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step4Reducer.py</member>
  242. <member>-input</member>
  243. <member>s3://example.emrtest.step1/*</member>
  244. <member>-output</member>
  245. <member>s3://example.emrtest.step4/</member>
  246. </Args>
  247. <Properties/>
  248. </HadoopJarStep>
  249. <Name>testjob_step4</Name>
  250. <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
  251. </StepConfig>
  252. <ExecutionStatusDetail>
  253. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  254. <StartDateTime>2010-10-21T01:41:22Z</StartDateTime>
  255. <State>COMPLETED</State>
  256. <EndDateTime>2010-10-21T01:43:03Z</EndDateTime>
  257. </ExecutionStatusDetail>
  258. </member>
  259. </Steps>
  260. <JobFlowId>j-3H3Q13JPFLU22</JobFlowId>
  261. <Instances>
  262. <SlaveInstanceType>m1.large</SlaveInstanceType>
  263. <MasterInstanceId>i-64c21609</MasterInstanceId>
  264. <Placement>
  265. <AvailabilityZone>us-east-1b</AvailabilityZone>
  266. </Placement>
  267. <InstanceGroups>
  268. <member>
  269. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  270. <InstanceRunningCount>0</InstanceRunningCount>
  271. <StartDateTime>2010-10-21T01:02:09Z</StartDateTime>
  272. <ReadyDateTime>2010-10-21T01:03:03Z</ReadyDateTime>
  273. <State>ENDED</State>
  274. <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
  275. <InstanceRequestCount>1</InstanceRequestCount>
  276. <InstanceType>m1.large</InstanceType>
  277. <Market>ON_DEMAND</Market>
  278. <LastStateChangeReason>Job flow terminated</LastStateChangeReason>
  279. <InstanceRole>MASTER</InstanceRole>
  280. <InstanceGroupId>ig-EVMHOZJ2SCO8</InstanceGroupId>
  281. <Name>master</Name>
  282. </member>
  283. <member>
  284. <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
  285. <InstanceRunningCount>0</InstanceRunningCount>
  286. <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
  287. <ReadyDateTime>2010-10-21T01:03:59Z</ReadyDateTime>
  288. <State>ENDED</State>
  289. <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
  290. <InstanceRequestCount>9</InstanceRequestCount>
  291. <InstanceType>m1.large</InstanceType>
  292. <Market>ON_DEMAND</Market>
  293. <LastStateChangeReason>Job flow terminated</LastStateChangeReason>
  294. <InstanceRole>CORE</InstanceRole>
  295. <InstanceGroupId>ig-YZHDYVITVHKB</InstanceGroupId>
  296. <Name>slave</Name>
  297. </member>
  298. </InstanceGroups>
  299. <NormalizedInstanceHours>40</NormalizedInstanceHours>
  300. <HadoopVersion>0.20</HadoopVersion>
  301. <MasterInstanceType>m1.large</MasterInstanceType>
  302. <MasterPublicDnsName>ec2-184-72-153-139.compute-1.amazonaws.com</MasterPublicDnsName>
  303. <Ec2KeyName>myubersecurekey</Ec2KeyName>
  304. <InstanceCount>10</InstanceCount>
  305. <KeepJobFlowAliveWhenNoSteps>false</KeepJobFlowAliveWhenNoSteps>
  306. </Instances>
  307. </member>
  308. </JobFlows>
  309. </DescribeJobFlowsResult>
  310. <ResponseMetadata>
  311. <RequestId>c31e701d-dcb4-11df-b5d9-337fc7fe4773</RequestId>
  312. </ResponseMetadata>
  313. </DescribeJobFlowsResponse>
  314. """
  315. class TestEMRResponses(unittest.TestCase):
  316. def _parse_xml(self, body, markers):
  317. rs = ResultSet(markers)
  318. h = handler.XmlHandler(rs, None)
  319. xml.sax.parseString(body, h)
  320. return rs
  321. def _assert_fields(self, response, **fields):
  322. for field, expected in fields.items():
  323. actual = getattr(response, field)
  324. self.assertEquals(expected, actual,
  325. "Field %s: %r != %r" % (field, expected, actual))
  326. def test_JobFlows_example(self):
  327. [jobflow] = self._parse_xml(JOB_FLOW_EXAMPLE,
  328. [('member', emrobject.JobFlow)])
  329. self._assert_fields(jobflow,
  330. creationdatetime='2009-01-28T21:49:16Z',
  331. startdatetime='2009-01-28T21:49:16Z',
  332. state='STARTING',
  333. instancecount='4',
  334. jobflowid='j-3UN6WX5RRO2AG',
  335. loguri='mybucket/subdir/',
  336. name='MyJobFlowName',
  337. availabilityzone='us-east-1a',
  338. slaveinstancetype='m1.small',
  339. masterinstancetype='m1.small',
  340. ec2keyname='myec2keyname',
  341. keepjobflowalivewhennosteps='true')
  342. def test_JobFlows_completed(self):
  343. [jobflow] = self._parse_xml(JOB_FLOW_COMPLETED,
  344. [('member', emrobject.JobFlow)])
  345. self._assert_fields(jobflow,
  346. creationdatetime='2010-10-21T01:00:25Z',
  347. startdatetime='2010-10-21T01:03:59Z',
  348. enddatetime='2010-10-21T01:44:18Z',
  349. state='COMPLETED',
  350. instancecount='10',
  351. jobflowid='j-3H3Q13JPFLU22',
  352. loguri='s3n://example.emrtest.scripts/jobflow_logs/',
  353. name='RealJobFlowName',
  354. availabilityzone='us-east-1b',
  355. slaveinstancetype='m1.large',
  356. masterinstancetype='m1.large',
  357. ec2keyname='myubersecurekey',
  358. keepjobflowalivewhennosteps='false')
  359. self.assertEquals(6, len(jobflow.steps))
  360. self.assertEquals(2, len(jobflow.instancegroups))