def test_delete_object_dlo_support(self): mock_q = Queue() s = SwiftService() mock_conn = self._get_mock_connection() expected_r = self._get_expected({ 'action': 'delete_object', 'success': True, 'dlo_segments_deleted': True }) # A DLO object is determined in _delete_object by heading the object # and checking for the existence of a x-object-manifest header. # Mock that here. mock_conn.head_object = Mock( return_value={'x-object-manifest': 'manifest_c/manifest_p'} ) mock_conn.get_container = Mock( side_effect=[(None, [{'name': 'test_seg_1'}, {'name': 'test_seg_2'}]), (None, {})] ) def get_mock_list_conn(options): return mock_conn with mock.patch('swiftclient.service.get_conn', get_mock_list_conn): r = s._delete_object( mock_conn, 'test_c', 'test_o', self.opts, mock_q ) self._assertDictEqual(expected_r, r) expected = [ mock.call('test_c', 'test_o', query_string=None, response_dict={}), mock.call('manifest_c', 'test_seg_1', response_dict={}), mock.call('manifest_c', 'test_seg_2', response_dict={})] mock_conn.delete_object.assert_has_calls(expected, any_order=True)
def test_delete_object_dlo_support(self): mock_q = Queue() s = SwiftService() mock_conn = self._get_mock_connection() expected_r = self._get_expected({ 'action': 'delete_object', 'success': True, 'dlo_segments_deleted': True }) # A DLO object is determined in _delete_object by heading the object # and checking for the existence of a x-object-manifest header. # Mock that here. mock_conn.head_object = Mock( return_value={'x-object-manifest': 'manifest_c/manifest_p'}) mock_conn.get_container = Mock(side_effect=[(None, [{ 'name': 'test_seg_1' }, { 'name': 'test_seg_2' }]), (None, {})]) def get_mock_list_conn(options): return mock_conn with mock.patch('swiftclient.service.get_conn', get_mock_list_conn): r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) self._assertDictEqual(expected_r, r) expected = [ mock.call('test_c', 'test_o', query_string=None, response_dict={}), mock.call('manifest_c', 'test_seg_1', response_dict={}), mock.call('manifest_c', 'test_seg_2', response_dict={}) ] mock_conn.delete_object.assert_has_calls(expected, any_order=True)
def test_delete_object(self): mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.head_object = Mock(return_value={}) expected_r = self._get_expected({ 'action': 'delete_object', 'success': True }) s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with( 'test_c', 'test_o', query_string=None, response_dict={} ) self._assertDictEqual(expected_r, r)
def test_delete_object(self): mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.head_object = Mock(return_value={}) expected_r = self._get_expected({ 'action': 'delete_object', 'success': True }) s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with('test_c', 'test_o', query_string=None, response_dict={}) self._assertDictEqual(expected_r, r)
def test_delete_object_exception(self): mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.delete_object = Mock(side_effect=self.exc) expected_r = self._get_expected({ 'action': 'delete_object', 'success': False, 'error': self.exc }) # _delete_object doesnt populate attempts or response dict if it hits # an error. This may not be the correct behaviour. del expected_r['response_dict'], expected_r['attempts'] s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with( 'test_c', 'test_o', query_string=None, response_dict={} ) self._assertDictEqual(expected_r, r)
def test_delete_object_slo_support(self): # If SLO headers are present the delete call should include an # additional query string to cause the right delete server side mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.head_object = Mock( return_value={'x-static-large-object': True}) expected_r = self._get_expected({ 'action': 'delete_object', 'success': True }) s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with( 'test_c', 'test_o', query_string='multipart-manifest=delete', response_dict={}) self._assertDictEqual(expected_r, r)
def test_delete_object_exception(self): mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.delete_object = Mock(side_effect=self.exc) expected_r = self._get_expected({ 'action': 'delete_object', 'success': False, 'error': self.exc }) # _delete_object doesnt populate attempts or response dict if it hits # an error. This may not be the correct behaviour. del expected_r['response_dict'], expected_r['attempts'] s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with('test_c', 'test_o', query_string=None, response_dict={}) self._assertDictEqual(expected_r, r)
def test_delete_object_slo_support(self): # If SLO headers are present the delete call should include an # additional query string to cause the right delete server side mock_q = Queue() mock_conn = self._get_mock_connection() mock_conn.head_object = Mock( return_value={'x-static-large-object': True} ) expected_r = self._get_expected({ 'action': 'delete_object', 'success': True }) s = SwiftService() r = s._delete_object(mock_conn, 'test_c', 'test_o', self.opts, mock_q) mock_conn.head_object.assert_called_once_with('test_c', 'test_o') mock_conn.delete_object.assert_called_once_with( 'test_c', 'test_o', query_string='multipart-manifest=delete', response_dict={} ) self._assertDictEqual(expected_r, r)