'Stubs out the get_object operation.
:param full_contents: The FULL contents of the object
:param start_byte: The first byte to grab.
:param end_byte: The last byte to grab.'

def stub_get_object(self, full_contents, start_byte=0, end_byte=None):

    get_object_response = {}
    expected_params = {}
    contents = full_contents
    end_byte_range = end_byte
    if ((start_byte != 0) and (end_byte is None)):
        end_byte = (len(full_contents) - 1)
    if (end_byte == (len(full_contents) - 1)):
        end_byte_range = ''
    if (end_byte is not None):
        contents = full_contents[start_byte:(end_byte + 1)]
        part_range = ('bytes=%s-%s' % (start_byte, end_byte_range))
        content_range = ('bytes=%s-%s/%s' % (start_byte, end_byte, len(full_contents)))
        get_object_response['ContentRange'] = content_range
        expected_params['Range'] = part_range
    get_object_response.update({'AcceptRanges': 'bytes', 'ETag': self.etag, 'ContentLength': len(contents), 'ContentType': 'binary/octet-stream', 'Body': six.BytesIO(contents), 'ResponseMetadata': {'HTTPStatusCode': 200}})
    expected_params.update({'Bucket': self.bucket, 'Key': self.key})
    self.stubber.add_response(method='get_object', service_response=get_object_response, expected_params=expected_params)
