def test_use_default_num_retries(self):
        exception = self._get_delete_error(1, 0)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete,
            exception,
            gae_search_services.DEFAULT_NUM_RETRIES
            )

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        delete_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        assert_raises_ctx = self.assertRaises(
            gae_search_services.SearchFailureError)
        with delete_ctx, delete_docs_ctx, assert_raises_ctx as context_mgr:
            gae_search_services.delete_documents_from_index(
                ['doc'], 'my_index')

        self.assertEqual(context_mgr.exception.original_exception, exception)

        self.assertEqual(
            delete_docs_counter.times_called,
            gae_search_services.DEFAULT_NUM_RETRIES)
    def test_delete_error_with_transient_result(self):
        error = self._get_delete_error(3, transient=1)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete,
            error,
            4)
        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)
        index = search.Index('my_index')
        for i in xrange(3):
            index.put(search.Document(doc_id='d' + str(i), fields=[
                search.TextField(name='prop', value='value')
            ]))

        delete_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        with delete_ctx, delete_docs_ctx:
            gae_search_services.delete_documents_from_index(
                ['d0', 'd1', 'd2'],
                'my_index',
                retries=5)

        self.assertEqual(delete_docs_counter.times_called, 5)
        for i in xrange(3):
            result = search.Index('my_index').get('doc' + str(i))
            self.assertIsNone(result)
 def test_delete_single_document(self):
     doc = search.Document(doc_id='doc_id', fields=[
         search.TextField(name='k', value='v')])
     index = search.Index('my_index')
     index.put([doc])
     gae_search_services.delete_documents_from_index(['doc_id'], 'my_index')
     self.assertIsNone(index.get('doc_id'))
 def test_delete_multiple_documents(self):
     index = search.Index('my_index')
     for i in xrange(10):
         field = search.TextField(name='k', value='v%d' % i)
         doc = search.Document(doc_id='doc%d' % i, fields=[field])
         index.put([doc])
     gae_search_services.delete_documents_from_index(
         ['doc' + str(i) for i in xrange(10)], 'my_index')
     for i in xrange(10):
         self.assertIsNone(index.get('doc%d' % i))
    def test_use_custom_number_of_retries(self):
        exception = self._get_delete_error(1, 0)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete, exception, 42)

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        delete_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        assert_raises_ctx = self.assertRaises(
            gae_search_services.SearchFailureError)
        with delete_ctx, delete_docs_ctx, assert_raises_ctx:
            gae_search_services.delete_documents_from_index(
                ['id'], 'index', 42)

        self.assertEqual(delete_docs_counter.times_called, 42)
    def test_put_error_without_transient_result(self):
        error = self._get_delete_error(3)
        delete_spy = test_utils.FailingFunction(search.Index.delete, error, 1)
        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        delete_ctx = self.swap(search.Index, 'delete', delete_spy)
        assert_raises_ctx = self.assertRaises(
            gae_search_services.SearchFailureError)
        with delete_docs_ctx, delete_ctx, assert_raises_ctx as e:
            gae_search_services.delete_documents_from_index(
                ['a', 'b', 'c'],
                'my_index')

        # assert that the method only gets called once, since the error is not
        # transient
        self.assertEqual(delete_docs_counter.times_called, 1)
        self.assertEqual(e.exception.original_exception, error)
Beispiel #7
0
    def test_put_error_without_transient_result(self):
        error = self._get_delete_error(3)
        delete_spy = test_utils.FailingFunction(search.Index.delete, error, 1)
        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        delete_ctx = self.swap(search.Index, 'delete', delete_spy)
        assert_raises_ctx = self.assertRaisesRegexp(
            gae_search_services.SearchFailureError,
            '<class \'google.appengine.api.search.search.DeleteError\'>: lol')
        with delete_docs_ctx, delete_ctx, assert_raises_ctx as e:
            gae_search_services.delete_documents_from_index(
                ['a', 'b', 'c'],
                'my_index')

        # Assert that the method only gets called once, since the error is not
        # transient.
        self.assertEqual(delete_docs_counter.times_called, 1)
        self.assertEqual(e.exception.original_exception, error)
Beispiel #8
0
    def test_use_default_num_retries(self):
        exception = self._get_delete_error(1, transient=0)
        failing_delete = test_utils.FailingFunction(search.Index.delete,
                                                    exception, 1)

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        delete_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(gae_search_services,
                                    'delete_documents_from_index',
                                    delete_docs_counter)
        assert_raises_ctx = self.assertRaisesRegexp(
            gae_search_services.SearchFailureError,
            '<class \'google.appengine.api.search.search.DeleteError\'>: lol')
        with delete_ctx, delete_docs_ctx, assert_raises_ctx as context_mgr:
            gae_search_services.delete_documents_from_index(['doc'],
                                                            'my_index')

        self.assertEqual(context_mgr.exception.original_exception, exception)

        self.assertEqual(delete_docs_counter.times_called, 1)
    def test_use_default_num_retries(self):
        exception = self._get_delete_error(1, 0)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete, exception,
            gae_search_services.DEFAULT_NUM_RETRIES)

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        delete_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(gae_search_services,
                                    'delete_documents_from_index',
                                    delete_docs_counter)
        assert_raises_ctx = self.assertRaises(
            gae_search_services.SearchFailureError)
        with delete_ctx, delete_docs_ctx, assert_raises_ctx as context_mgr:
            gae_search_services.delete_documents_from_index(['doc'],
                                                            'my_index')

        self.assertEqual(context_mgr.exception.original_exception, exception)

        self.assertEqual(delete_docs_counter.times_called,
                         gae_search_services.DEFAULT_NUM_RETRIES)
    def test_arguments_are_preserved_in_retries(self):
        index = search.Index('index')
        index.put([search.Document(doc_id='doc', fields=[
            search.TextField(name='prop', value='val')
        ])])
        exception = self._get_delete_error(1, 0)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete, exception, 3)

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        index_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        with index_ctx, delete_docs_ctx:
            gae_search_services.delete_documents_from_index(
                ['doc'], 'index', 4)

        self.assertEqual(delete_docs_counter.times_called, 4)
        result = search.Index('my_index').get('doc')
        self.assertIsNone(result)
    def test_arguments_are_preserved_in_retries(self):
        index = search.Index('index')
        index.put([search.Document(doc_id='doc', fields=[
            search.TextField(name='prop', value='val')
        ])])
        exception = self._get_delete_error(1, 0)
        failing_delete = test_utils.FailingFunction(
            search.Index.delete, exception, 3)

        delete_docs_counter = test_utils.CallCounter(
            gae_search_services.delete_documents_from_index)

        index_ctx = self.swap(search.Index, 'delete', failing_delete)
        delete_docs_ctx = self.swap(
            gae_search_services,
            'delete_documents_from_index',
            delete_docs_counter)
        with index_ctx, delete_docs_ctx:
            gae_search_services.delete_documents_from_index(
                ['doc'], 'index', 4)

        self.assertEqual(delete_docs_counter.times_called, 4)
        result = search.Index('my_index').get('doc')
        self.assertIsNone(result)
 def test_index_must_be_string(self):
     with self.assertRaises(ValueError):
         gae_search_services.delete_documents_from_index(
             ['doc_id'], search.Index('ind'))
 def test_doc_ids_must_be_strings(self):
     with self.assertRaisesRegexp(ValueError, str(dict)):
         gae_search_services.delete_documents_from_index(
             ['d1', {
                 'id': 'd2'
             }], 'index')
 def test_index_must_be_string(self):
     with self.assertRaises(ValueError):
         gae_search_services.delete_documents_from_index(
             ['doc_id'], search.Index('ind'))
 def test_doc_ids_must_be_strings(self):
     with self.assertRaisesRegexp(ValueError, str(dict)):
         gae_search_services.delete_documents_from_index(
             ['d1', {'id': 'd2'}],
             'index')