Example #1
0
    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)
Example #2
0
 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)
Example #3
0
    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)
Example #4
0
 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)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
    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))
Example #9
0
    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))
Example #10
0
    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])
Example #11
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)
Example #12
0
 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)
Example #13
0
    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])
Example #14
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)
Example #15
0
 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)
Example #16
0
 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)