| Index: third_party/gsutil/boto/tests/unit/emr/test_emr_responses.py
|
| diff --git a/third_party/gsutil/boto/tests/unit/emr/test_emr_responses.py b/third_party/gsutil/boto/tests/unit/emr/test_emr_responses.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..77ec494b21ac104e412c25f7db09712fd7ae17e5
|
| --- /dev/null
|
| +++ b/third_party/gsutil/boto/tests/unit/emr/test_emr_responses.py
|
| @@ -0,0 +1,373 @@
|
| +# Copyright (c) 2010 Jeremy Thurgood <firxen+boto@gmail.com>
|
| +#
|
| +# Permission is hereby granted, free of charge, to any person obtaining a
|
| +# copy of this software and associated documentation files (the
|
| +# "Software"), to deal in the Software without restriction, including
|
| +# without limitation the rights to use, copy, modify, merge, publish, dis-
|
| +# tribute, sublicense, and/or sell copies of the Software, and to permit
|
| +# persons to whom the Software is furnished to do so, subject to the fol-
|
| +# lowing conditions:
|
| +#
|
| +# The above copyright notice and this permission notice shall be included
|
| +# in all copies or substantial portions of the Software.
|
| +#
|
| +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
| +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
| +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
| +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
| +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
| +# IN THE SOFTWARE.
|
| +
|
| +
|
| +# NOTE: These tests only cover the very simple cases I needed to test
|
| +# for the InstanceGroup fix.
|
| +
|
| +import xml.sax
|
| +import unittest
|
| +
|
| +from boto import handler
|
| +from boto.emr import emrobject
|
| +from boto.resultset import ResultSet
|
| +
|
| +
|
| +JOB_FLOW_EXAMPLE = """
|
| +<DescribeJobFlowsResponse
|
| + xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-01-15">
|
| + <DescribeJobFlowsResult>
|
| + <JobFlows>
|
| + <member>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2009-01-28T21:49:16Z</CreationDateTime>
|
| + <StartDateTime>2009-01-28T21:49:16Z</StartDateTime>
|
| + <State>STARTING</State>
|
| + </ExecutionStatusDetail>
|
| + <Name>MyJobFlowName</Name>
|
| + <LogUri>mybucket/subdir/</LogUri>
|
| + <Steps>
|
| + <member>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2009-01-28T21:49:16Z</CreationDateTime>
|
| + <State>PENDING</State>
|
| + </ExecutionStatusDetail>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>MyJarFile</Jar>
|
| + <MainClass>MyMailClass</MainClass>
|
| + <Args>
|
| + <member>arg1</member>
|
| + <member>arg2</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>MyStepName</Name>
|
| + <ActionOnFailure>CONTINUE</ActionOnFailure>
|
| + </StepConfig>
|
| + </member>
|
| + </Steps>
|
| + <JobFlowId>j-3UN6WX5RRO2AG</JobFlowId>
|
| + <Instances>
|
| + <Placement>
|
| + <AvailabilityZone>us-east-1a</AvailabilityZone>
|
| + </Placement>
|
| + <SlaveInstanceType>m1.small</SlaveInstanceType>
|
| + <MasterInstanceType>m1.small</MasterInstanceType>
|
| + <Ec2KeyName>myec2keyname</Ec2KeyName>
|
| + <InstanceCount>4</InstanceCount>
|
| + <KeepJobFlowAliveWhenNoSteps>true</KeepJobFlowAliveWhenNoSteps>
|
| + </Instances>
|
| + </member>
|
| + </JobFlows>
|
| + </DescribeJobFlowsResult>
|
| + <ResponseMetadata>
|
| + <RequestId>9cea3229-ed85-11dd-9877-6fad448a8419</RequestId>
|
| + </ResponseMetadata>
|
| +</DescribeJobFlowsResponse>
|
| +"""
|
| +
|
| +JOB_FLOW_COMPLETED = """
|
| +<DescribeJobFlowsResponse xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-03-31">
|
| + <DescribeJobFlowsResult>
|
| + <JobFlows>
|
| + <member>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <LastStateChangeReason>Steps completed</LastStateChangeReason>
|
| + <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
|
| + <ReadyDateTime>2010-10-21T01:03:59Z</ReadyDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + <BootstrapActions/>
|
| + <Name>RealJobFlowName</Name>
|
| + <LogUri>s3n://example.emrtest.scripts/jobflow_logs/</LogUri>
|
| + <Steps>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>s3n://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar</Jar>
|
| + <Args>
|
| + <member>s3n://us-east-1.elasticmapreduce/libs/state-pusher/0.1/fetch</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>Setup Hadoop Debugging</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:04:22Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
|
| + <Args>
|
| + <member>-mapper</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-InitialMapper.py</member>
|
| + <member>-reducer</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-InitialReducer.py</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/20/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/19/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/18/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/17/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/16/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/15/*</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.data/raw/2010/10/14/*</member>
|
| + <member>-output</member>
|
| + <member>s3://example.emrtest.crunched/</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>testjob_Initial</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:04:22Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:36:18Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
|
| + <Args>
|
| + <member>-mapper</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step1Mapper.py</member>
|
| + <member>-reducer</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step1Reducer.py</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.crunched/*</member>
|
| + <member>-output</member>
|
| + <member>s3://example.emrtest.step1/</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>testjob_step1</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:36:18Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:37:51Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
|
| + <Args>
|
| + <member>-mapper</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step2Mapper.py</member>
|
| + <member>-reducer</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step2Reducer.py</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.crunched/*</member>
|
| + <member>-output</member>
|
| + <member>s3://example.emrtest.step2/</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>testjob_step2</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:37:51Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:39:32Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
|
| + <Args>
|
| + <member>-mapper</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step3Mapper.py</member>
|
| + <member>-reducer</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step3Reducer.py</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.step1/*</member>
|
| + <member>-output</member>
|
| + <member>s3://example.emrtest.step3/</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>testjob_step3</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:39:32Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:41:22Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + <member>
|
| + <StepConfig>
|
| + <HadoopJarStep>
|
| + <Jar>/home/hadoop/contrib/streaming/hadoop-0.20-streaming.jar</Jar>
|
| + <Args>
|
| + <member>-mapper</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step4Mapper.py</member>
|
| + <member>-reducer</member>
|
| + <member>s3://example.emrtest.scripts/81d8-5a9d3df4a86c-step4Reducer.py</member>
|
| + <member>-input</member>
|
| + <member>s3://example.emrtest.step1/*</member>
|
| + <member>-output</member>
|
| + <member>s3://example.emrtest.step4/</member>
|
| + </Args>
|
| + <Properties/>
|
| + </HadoopJarStep>
|
| + <Name>testjob_step4</Name>
|
| + <ActionOnFailure>TERMINATE_JOB_FLOW</ActionOnFailure>
|
| + </StepConfig>
|
| + <ExecutionStatusDetail>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <StartDateTime>2010-10-21T01:41:22Z</StartDateTime>
|
| + <State>COMPLETED</State>
|
| + <EndDateTime>2010-10-21T01:43:03Z</EndDateTime>
|
| + </ExecutionStatusDetail>
|
| + </member>
|
| + </Steps>
|
| + <JobFlowId>j-3H3Q13JPFLU22</JobFlowId>
|
| + <Instances>
|
| + <SlaveInstanceType>m1.large</SlaveInstanceType>
|
| + <MasterInstanceId>i-64c21609</MasterInstanceId>
|
| + <Placement>
|
| + <AvailabilityZone>us-east-1b</AvailabilityZone>
|
| + </Placement>
|
| + <InstanceGroups>
|
| + <member>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <InstanceRunningCount>0</InstanceRunningCount>
|
| + <StartDateTime>2010-10-21T01:02:09Z</StartDateTime>
|
| + <ReadyDateTime>2010-10-21T01:03:03Z</ReadyDateTime>
|
| + <State>ENDED</State>
|
| + <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
|
| + <InstanceRequestCount>1</InstanceRequestCount>
|
| + <InstanceType>m1.large</InstanceType>
|
| + <Market>ON_DEMAND</Market>
|
| + <LastStateChangeReason>Job flow terminated</LastStateChangeReason>
|
| + <InstanceRole>MASTER</InstanceRole>
|
| + <InstanceGroupId>ig-EVMHOZJ2SCO8</InstanceGroupId>
|
| + <Name>master</Name>
|
| + </member>
|
| + <member>
|
| + <CreationDateTime>2010-10-21T01:00:25Z</CreationDateTime>
|
| + <InstanceRunningCount>0</InstanceRunningCount>
|
| + <StartDateTime>2010-10-21T01:03:59Z</StartDateTime>
|
| + <ReadyDateTime>2010-10-21T01:03:59Z</ReadyDateTime>
|
| + <State>ENDED</State>
|
| + <EndDateTime>2010-10-21T01:44:18Z</EndDateTime>
|
| + <InstanceRequestCount>9</InstanceRequestCount>
|
| + <InstanceType>m1.large</InstanceType>
|
| + <Market>ON_DEMAND</Market>
|
| + <LastStateChangeReason>Job flow terminated</LastStateChangeReason>
|
| + <InstanceRole>CORE</InstanceRole>
|
| + <InstanceGroupId>ig-YZHDYVITVHKB</InstanceGroupId>
|
| + <Name>slave</Name>
|
| + </member>
|
| + </InstanceGroups>
|
| + <NormalizedInstanceHours>40</NormalizedInstanceHours>
|
| + <HadoopVersion>0.20</HadoopVersion>
|
| + <MasterInstanceType>m1.large</MasterInstanceType>
|
| + <MasterPublicDnsName>ec2-184-72-153-139.compute-1.amazonaws.com</MasterPublicDnsName>
|
| + <Ec2KeyName>myubersecurekey</Ec2KeyName>
|
| + <InstanceCount>10</InstanceCount>
|
| + <KeepJobFlowAliveWhenNoSteps>false</KeepJobFlowAliveWhenNoSteps>
|
| + </Instances>
|
| + </member>
|
| + </JobFlows>
|
| + </DescribeJobFlowsResult>
|
| + <ResponseMetadata>
|
| + <RequestId>c31e701d-dcb4-11df-b5d9-337fc7fe4773</RequestId>
|
| + </ResponseMetadata>
|
| +</DescribeJobFlowsResponse>
|
| +"""
|
| +
|
| +
|
| +class TestEMRResponses(unittest.TestCase):
|
| + def _parse_xml(self, body, markers):
|
| + rs = ResultSet(markers)
|
| + h = handler.XmlHandler(rs, None)
|
| + xml.sax.parseString(body, h)
|
| + return rs
|
| +
|
| + def _assert_fields(self, response, **fields):
|
| + for field, expected in fields.items():
|
| + actual = getattr(response, field)
|
| + self.assertEquals(expected, actual,
|
| + "Field %s: %r != %r" % (field, expected, actual))
|
| +
|
| + def test_JobFlows_example(self):
|
| + [jobflow] = self._parse_xml(JOB_FLOW_EXAMPLE,
|
| + [('member', emrobject.JobFlow)])
|
| + self._assert_fields(jobflow,
|
| + creationdatetime='2009-01-28T21:49:16Z',
|
| + startdatetime='2009-01-28T21:49:16Z',
|
| + state='STARTING',
|
| + instancecount='4',
|
| + jobflowid='j-3UN6WX5RRO2AG',
|
| + loguri='mybucket/subdir/',
|
| + name='MyJobFlowName',
|
| + availabilityzone='us-east-1a',
|
| + slaveinstancetype='m1.small',
|
| + masterinstancetype='m1.small',
|
| + ec2keyname='myec2keyname',
|
| + keepjobflowalivewhennosteps='true')
|
| +
|
| + def test_JobFlows_completed(self):
|
| + [jobflow] = self._parse_xml(JOB_FLOW_COMPLETED,
|
| + [('member', emrobject.JobFlow)])
|
| + self._assert_fields(jobflow,
|
| + creationdatetime='2010-10-21T01:00:25Z',
|
| + startdatetime='2010-10-21T01:03:59Z',
|
| + enddatetime='2010-10-21T01:44:18Z',
|
| + state='COMPLETED',
|
| + instancecount='10',
|
| + jobflowid='j-3H3Q13JPFLU22',
|
| + loguri='s3n://example.emrtest.scripts/jobflow_logs/',
|
| + name='RealJobFlowName',
|
| + availabilityzone='us-east-1b',
|
| + slaveinstancetype='m1.large',
|
| + masterinstancetype='m1.large',
|
| + ec2keyname='myubersecurekey',
|
| + keepjobflowalivewhennosteps='false')
|
| + self.assertEquals(6, len(jobflow.steps))
|
| + self.assertEquals(2, len(jobflow.instancegroups))
|
| +
|
|
|