def test_handle_get_object(self): object_info = { 'type': ssbench.READ_OBJECT, 'container': 'Document', 'name': 'SuperObject', 'size': 483213, } self.mock_worker.should_receive( 'ignoring_http_responses', ).with_args( (404, 503), client.get_object, object_info, resp_chunk_size=worker.DEFAULT_BLOCK_SIZE, ).and_return({ 'x-swiftstack-first-byte-latency': 5.33, 'x-swiftstack-last-byte-latency': 9.99, 'x-trans-id': 'bies', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts( object_info, worker_id=self.worker_id, completed_at=self.stub_time, trans_id='bies', first_byte_latency=5.33, last_byte_latency=9.99, retries=0), ).once self.mock_worker.handle_get_object(object_info)
def test_handle_upload_object(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'delete_after': None, } self.mock_worker.should_receive('ignoring_http_responses').with_args( (503, ), client.put_object, object_info, content_length=99000, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='A' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 0.492393, 'x-swiftstack-last-byte-latency': 8.23283, 'x-trans-id': 'abcdef', 'retries': 0, }).once self.time_expectation.once self.result_queue.should_receive('put').with_args( add_dicts(object_info, worker_id=self.worker_id, first_byte_latency=0.492393, last_byte_latency=8.23283, trans_id='abcdef', completed_at=self.stub_time, retries=0), ).once self.mock_worker.handle_upload_object(object_info)
def test_handle_update_object(self): object_info = { 'type': ssbench.UPDATE_OBJECT, 'container': 'Picture', 'name': 'BestObjEvar', 'size': 483213, 'delete_after': None, } self.mock_worker.should_receive( 'ignoring_http_responses', ).with_args( (503,), client.put_object, object_info, content_length=483213, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='B' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 4.45, 'x-swiftstack-last-byte-latency': 23.283, 'x-trans-id': 'biejs', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts( object_info, worker_id=self.worker_id, completed_at=self.stub_time, trans_id='biejs', first_byte_latency=4.45, last_byte_latency=23.283, retries=0), ).once self.mock_worker.handle_update_object(object_info)
def test_handle_upload_object(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'delete_after': None, } self.mock_worker.should_receive( 'ignoring_http_responses' ).with_args( (503,), client.put_object, object_info, content_length=99000, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='A' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 0.492393, 'x-swiftstack-last-byte-latency': 8.23283, 'x-trans-id': 'abcdef', 'retries': 0, }).once self.time_expectation.once self.result_queue.should_receive('put').with_args( add_dicts( object_info, worker_id=self.worker_id, first_byte_latency=0.492393, last_byte_latency=8.23283, trans_id='abcdef', completed_at=self.stub_time, retries=0), ).once self.mock_worker.handle_upload_object(object_info)
def test_handle_get_object(self): object_info = { 'type': ssbench.READ_OBJECT, 'container': 'Document', 'name': 'SuperObject', 'size': 483213, } self.mock_worker.should_receive('ignoring_http_responses', ).with_args( (404, 503), client.get_object, object_info, resp_chunk_size=worker.DEFAULT_BLOCK_SIZE, ).and_return({ 'x-swiftstack-first-byte-latency': 5.33, 'x-swiftstack-last-byte-latency': 9.99, 'x-trans-id': 'bies', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts(object_info, worker_id=self.worker_id, completed_at=self.stub_time, trans_id='bies', first_byte_latency=5.33, last_byte_latency=9.99, retries=0), ).once self.mock_worker.handle_get_object(object_info)
def test_handle_update_object(self): object_info = { 'type': ssbench.UPDATE_OBJECT, 'container': 'Picture', 'name': 'BestObjEvar', 'size': 483213, 'delete_after': None, } self.mock_worker.should_receive('ignoring_http_responses', ).with_args( (503, ), client.put_object, object_info, content_length=483213, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='B' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 4.45, 'x-swiftstack-last-byte-latency': 23.283, 'x-trans-id': 'biejs', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts(object_info, worker_id=self.worker_id, completed_at=self.stub_time, trans_id='biejs', first_byte_latency=4.45, last_byte_latency=23.283, retries=0), ).once self.mock_worker.handle_update_object(object_info)
def test_handle_delete_object(self): object_info = { 'type': ssbench.DELETE_OBJECT, 'container': 'Document', 'name': 'some name', } self.mock_worker.should_receive('ignoring_http_responses', ).with_args( ( 404, 503, ), client.delete_object, object_info, ).and_return({ 'x-swiftstack-first-byte-latency': 0.94932, 'x-swiftstack-last-byte-latency': 8.3273, 'x-trans-id': '9bjkk', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts(object_info, worker_id=self.worker_id, first_byte_latency=0.94932, last_byte_latency=8.3273, trans_id='9bjkk', completed_at=self.stub_time, retries=0), ).once self.mock_worker.handle_delete_object(object_info)
def put_results(self, *args, **kwargs): """ Put work result into stats queue. Given *args and **kwargs are combined per add_dicts(). This worker's "ID" and the time of completion are included in the results. :*args: An optional list of dicts (to be combined via add_dicts()) :**kwargs: An optional set of key/value pairs (to be combined via add_dicts()) :returns: (nothing) """ self.result_queue.put(add_dicts(*args, completed_at=time.time(), worker_id=self.worker_id, **kwargs))
def test_dispatching_value_error_exception(self): info = {'type': ssbench.READ_OBJECT, 'container': 'fun', 'a': 2} self.mock_worker.should_receive('handle_get_object').with_args( info).and_raise(ValueError('ve', 0)).once got = [] self.result_queue.should_receive('put').replace_with( lambda value: got.append(value)).once self.mock_worker.handle_job(info) assert_equal(1, len(got), repr(got)) traceback = got[0].pop('traceback') assert_true(traceback.startswith('Traceback'), 'Traceback did not start with Traceback: %s' % traceback) assert_equal( add_dicts( info, worker_id=self.worker_id, completed_at=self.stub_time, exception=repr(ValueError('ve', 0)), retries=0), got[0])
def test_handle_upload_object_head_first_missing(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'head_first': True, 'block_size': None, 'delete_after': None, } self.mock_worker.should_receive('ignoring_http_responses').with_args( (503, ), client.head_object, object_info, ).and_raise(client.ClientException('oh noes!')).once self.mock_worker.should_receive('ignoring_http_responses').with_args( (503, ), client.put_object, object_info, content_length=99000, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='A' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 0.3248, 'x-swiftstack-last-byte-latency': 4.493, 'x-trans-id': 'evn', 'retries': 0, }).once self.time_expectation.once exp_put = add_dicts(object_info, worker_id=self.worker_id, first_byte_latency=0.3248, last_byte_latency=4.493, trans_id='evn', completed_at=self.stub_time, retries=0) exp_put.pop('head_first') exp_put.pop('block_size') self.result_queue.should_receive('put').with_args(exp_put).once self.mock_worker.handle_upload_object(object_info)
def test_handle_upload_object_head_first_present(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'head_first': True, 'block_size': 889, 'delete_after': None, } self.mock_worker.should_receive('ignoring_http_responses').with_args( (503, ), client.head_object, object_info, ).and_return({ 'x-swiftstack-first-byte-latency': 0.942, 'x-swiftstack-last-byte-latency': 8.84328, 'x-trans-id': 'abcdef', 'retries': 0, }).once self.mock_worker.should_receive('ignoring_http_responses').with_args( (503, ), client.put_object, object_info, content_length=99000, chunk_size=889, contents='A' * 889, headers={}, ).never self.time_expectation.once exp_put = add_dicts(object_info, worker_id=self.worker_id, first_byte_latency=0.942, last_byte_latency=8.84328, trans_id='abcdef', completed_at=self.stub_time, retries=0) exp_put.pop('head_first') exp_put.pop('block_size') self.result_queue.should_receive('put').with_args(exp_put).once self.mock_worker.handle_upload_object(object_info)
def test_dispatching_socket_exception(self): info = {'type': ssbench.CREATE_OBJECT, 'a': 1} wrappedException = socket.error('slap happy') wrappedException.retries = 5 self.mock_worker.should_receive('handle_upload_object').with_args( info).and_raise(wrappedException).once got = [] self.result_queue.should_receive('put').replace_with( lambda value: got.append(value)).once self.mock_worker.handle_job(info) assert_equal(1, len(got), repr(got)) traceback = got[0].pop('traceback') assert_true(traceback.startswith('Traceback'), 'Traceback did not start with Traceback: %s' % traceback) assert_equal( add_dicts( info, worker_id=self.worker_id, completed_at=self.stub_time, exception=repr(socket.error('slap happy')), retries=5), got[0])
def test_handle_upload_object_head_first_missing(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'head_first': True, 'block_size': None, 'delete_after': None, } self.mock_worker.should_receive( 'ignoring_http_responses' ).with_args( (503,), client.head_object, object_info, ).and_raise(client.ClientException('oh noes!')).once self.mock_worker.should_receive( 'ignoring_http_responses' ).with_args( (503,), client.put_object, object_info, content_length=99000, chunk_size=worker.DEFAULT_BLOCK_SIZE, contents='A' * worker.DEFAULT_BLOCK_SIZE, headers={}, ).and_return({ 'x-swiftstack-first-byte-latency': 0.3248, 'x-swiftstack-last-byte-latency': 4.493, 'x-trans-id': 'evn', 'retries': 0, }).once self.time_expectation.once exp_put = add_dicts( object_info, worker_id=self.worker_id, first_byte_latency=0.3248, last_byte_latency=4.493, trans_id='evn', completed_at=self.stub_time, retries=0) exp_put.pop('head_first') exp_put.pop('block_size') self.result_queue.should_receive('put').with_args(exp_put).once self.mock_worker.handle_upload_object(object_info)
def test_handle_upload_object_head_first_present(self): object_name = '/foo/bar/SP000001' object_info = { 'type': ssbench.CREATE_OBJECT, 'container': 'Picture', 'name': object_name, 'size': 99000, 'head_first': True, 'block_size': 889, 'delete_after': None, } self.mock_worker.should_receive( 'ignoring_http_responses' ).with_args( (503,), client.head_object, object_info, ).and_return({ 'x-swiftstack-first-byte-latency': 0.942, 'x-swiftstack-last-byte-latency': 8.84328, 'x-trans-id': 'abcdef', 'retries': 0, }).once self.mock_worker.should_receive( 'ignoring_http_responses' ).with_args( (503,), client.put_object, object_info, content_length=99000, chunk_size=889, contents='A' * 889, headers={}, ).never self.time_expectation.once exp_put = add_dicts( object_info, worker_id=self.worker_id, first_byte_latency=0.942, last_byte_latency=8.84328, trans_id='abcdef', completed_at=self.stub_time, retries=0) exp_put.pop('head_first') exp_put.pop('block_size') self.result_queue.should_receive('put').with_args(exp_put).once self.mock_worker.handle_upload_object(object_info)
def test_handle_delete_object(self): object_info = { 'type': ssbench.DELETE_OBJECT, 'container': 'Document', 'name': 'some name', } self.mock_worker.should_receive( 'ignoring_http_responses', ).with_args( (404, 503,), client.delete_object, object_info, ).and_return({ 'x-swiftstack-first-byte-latency': 0.94932, 'x-swiftstack-last-byte-latency': 8.3273, 'x-trans-id': '9bjkk', 'retries': 0, }).once self.result_queue.should_receive('put').with_args( add_dicts( object_info, worker_id=self.worker_id, first_byte_latency=0.94932, last_byte_latency=8.3273, trans_id='9bjkk', completed_at=self.stub_time, retries=0), ).once self.mock_worker.handle_delete_object(object_info)