def test_extra_analyzers(es_client): page = TypeMapping('page', { 'title': {'type': 'string'} }) ixmgr = IndexManager(hostname='foo.bar', es_client=es_client) index = ixmgr.ensure_index( schema='foo_bar', language='en', mapping=page ) result = es_client.indices.analyze( index=index, body='Do you <em>really</em> want to continue?', analyzer='english_html' ) assert [v['token'] for v in result['tokens']] == [ 'do', 'you', 'realli', 'want', 'continu' ] result = es_client.indices.analyze( index=index, body='Möchten Sie <em>wirklich</em> weiterfahren?', analyzer='german_html' ) assert [v['token'] for v in result['tokens']] == [ 'mocht', 'wirklich', 'weiterfahr' ]
def test_parse_index_name(es_client): ixmgr = IndexManager('foo', es_client) assert ixmgr.parse_index_name('hostname_org-my_schema-de-posts') == { 'hostname': 'hostname_org', 'schema': 'my_schema', 'language': 'de', 'type_name': 'posts', 'version': None } assert ixmgr.parse_index_name('hostname_org-my_schema-de-posts-1') == { 'hostname': 'hostname_org', 'schema': 'my_schema', 'language': 'de', 'type_name': 'posts', 'version': '1' } assert ixmgr.parse_index_name('asdf') == { 'hostname': None, 'schema': None, 'language': None, 'type_name': None, 'version': None }
def test_index_manager_separation(es_client): foo = IndexManager(hostname='foo', es_client=es_client) bar = IndexManager(hostname='bar', es_client=es_client) page = TypeMapping('page', { 'title': {'type': 'string'} }) foo.ensure_index('foo', 'en', page) bar.ensure_index('bar', 'en', page) assert foo.query_indices() == {'foo-foo-en-page' + '-' + page.version} assert bar.query_indices() == {'bar-bar-en-page' + '-' + page.version} assert foo.query_aliases() == {'foo-foo-en-page'} assert bar.query_aliases() == {'bar-bar-en-page'}
def test_index_creation(es_client): ixmgr = IndexManager(hostname='example.org', es_client=es_client) page = TypeMapping('page', { 'title': {'type': 'string'} }) # create an index index = ixmgr.ensure_index( schema='foo_bar', language='en', mapping=page ) assert index == 'example_org-foo_bar-en-page' assert ixmgr.created_indices == {index + '-' + page.version} assert ixmgr.query_indices() == ixmgr.created_indices assert ixmgr.query_aliases() == {index} # the slight change in the index name should be normalized away index = ixmgr.ensure_index( schema='foo-bar', language='en', mapping=page ) assert index == 'example_org-foo_bar-en-page' assert ixmgr.created_indices == {index + '-' + page.version} assert ixmgr.query_indices() == ixmgr.created_indices assert ixmgr.query_aliases() == {index} # if we change a mapping (which we won't usually do at runtime), we # should get a new index new_page = TypeMapping('page', { 'title': {'type': 'string'}, 'body': {'type': 'string'} }) index = ixmgr.ensure_index( schema='foo-bar', language='en', mapping=new_page ) assert index == 'example_org-foo_bar-en-page' assert ixmgr.created_indices == { index + '-' + page.version, index + '-' + new_page.version } assert ixmgr.query_indices() == ixmgr.created_indices assert ixmgr.query_aliases() == {index} # this leads to some indices no longer being used assert ixmgr.remove_expired_indices(current_mappings=[new_page]) == 1
def test_index_manager_assertions(es_client): with pytest.raises(AssertionError): IndexManager(hostname='', es_client=es_client) ixmgr = IndexManager(hostname='test.example.org', es_client=es_client) page = TypeMapping('page', { 'title': {'type': 'string'} }) with pytest.raises(AssertionError): ixmgr.ensure_index(schema='', language='de', mapping=page) with pytest.raises(AssertionError): ixmgr.ensure_index(schema='asdf', language='', mapping=page) with pytest.raises(AssertionError): ixmgr.ensure_index(schema='asdf', language='de', mapping='') with pytest.raises(AssertionError): ixmgr.ensure_index(schema='asdf', language='deu', mapping=page) with pytest.raises(AssertionError): ixmgr.ensure_index(schema='asdf', language='de', mapping='')