Skip to main content

This package provides a elasticsearch server stub setup based on a real elasticsearch server.

README

setup

This test is using an elasticsearch server. The test setUp method used for this test is calling our startElasticSearchServer method which is starting an elasticsearch server. The first time this test get called a new elasticsearch server will get downloaded. The test setup looks like:

def test_suite():
    return unittest.TestSuite((
        doctest.DocFileSuite('README.txt',
            setUp=testing.doctestSetUp, tearDown=testing.doctestTearDown,
            optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
            encoding='utf-8'),
        ))

If you like to set some custom settings, you can use the confSource which must point to a config folder with elasticsearch.yml or elasticsearch.json and logging.yml and optional mapping definitions. Your custom doctest setUp and tearDown method could look like:

def mySetUp(test):
    # use default elasticsearch with our server and conf source dir
    here = os.path.dirname(__file__)
    serverDir = os.path.join(here, 'server')
    confSource = os.path.join(here, 'config')
    p01.elasticstub.testing.startElasticSearchServer(serverDir=serverDir,
        confSource=confSource)

def myTearDown(test):
    p01.elasticstub.testing.stopElasticSearchServer()
    # do some custom teardown stuff here

testing

Let’s setup a python httplib connection:

>>> import httplib
>>> conn = httplib.HTTPConnection('localhost', 45200)

and test the cluster state:

>>> conn.request('GET', '_cluster/state')
>>> response = conn.getresponse()
>>> response.status
200
>>> import json
>>> from pprint import pprint
>>> body = response.read()
>>> pprint(json.loads(body))
{u'blocks': {},
 u'cluster_name': u'p01_elasticstub_testing',
 u'master_node': u'...',
 u'metadata': {u'cluster_uuid': u'...',
               u'index-graveyard': {u'...': []},
               u'indices': {},
               u'templates': {}},
 u'nodes': {u'...': {u'attributes': {},
                                        u'ephemeral_id': u'...',
                                        u'name': u'...',
                                        u'transport_address': u'...'}},
 u'routing_nodes': {u'nodes': {u'...': []},
                    u'unassigned': []},
 u'routing_table': {u'indices': {}},
 u'state_uuid': u'...',
 u'version': 2}

As you can see our mapping is empty:

>>> conn.request('GET', '/testing/test/_mapping')
>>> response = conn.getresponse()
>>> body = response.read()
>>> pprint(json.loads(body))
{u'error': {u'index': u'testing',
            u'index_uuid': u'_na_',
            u'reason': u'no such index',
            u'resource.id': u'testing',
            u'resource.type': u'index_or_alias',
            u'root_cause': [{u'index': u'testing',
                             u'index_uuid': u'_na_',
                             u'reason': u'no such index',
                             u'resource.id': u'testing',
                             u'resource.type': u'index_or_alias',
                             u'type': u'index_not_found_exception'}],
            u'type': u'index_not_found_exception'},
 u'status': 404}

Let’s index a simple item:

>>> body = json.dumps({u'title': u'Title'})
>>> conn.request('POST', '/testing/test/1', body)
>>> response = conn.getresponse()
>>> body = response.read()
>>> pprint(json.loads(body))
{u'_id': u'1',
 u'_index': u'testing',
 u'_shards': {u'failed': 0, u'successful': 1, u'total': 2},
 u'_type': u'test',
 u'_version': 1,
 u'created': True,
 u'result': u'created'}

refresh:

>>> conn.request('GET', '/testing/test/_refresh')
>>> response = conn.getresponse()
>>> body = response.read()
>>> pprint(json.loads(body))
{u'_id': u'_refresh',
 u'_index': u'testing',
 u'_type': u'test',
 u'found': False}

Let’s set a mapping:

>>> body = json.dumps({'test': {'properties': {'title': {'type': 'string'}}}})
>>> conn.request('POST', '/testing/test/_mapping', body)
>>> response = conn.getresponse()
>>> body = response.read()
>>> pprint(json.loads(body))
{u'acknowledged': True}

and test our mapping again:

>>> conn.request('GET', '/testing/test/_mapping')
>>> response = conn.getresponse()
>>> body = response.read()
>>> pprint(json.loads(body))
{u'testing': {u'mappings': {u'test': {u'properties': {u'title': {u'fields': {u'keyword': {u'ignore_above': 256,
                                                                                          u'type': u'keyword'}},
                                                                 u'type': u'text'}}}}}}

CHANGES

0.5.4 (2017-11-02)

  • switch to elasticsearch 5.6.4 and adjust startup script environment setup

  • removed thrift plugin support

  • adjust default elasticsearch config, added log4j config file

0.5.3 (2014-07-10)

  • switch to elasticsearch version 1.2.1. Note; version 1.2.2 does not work at least on windows. Startup quits with en error like {1.2.2}: Initialization Failed … ExecutionError[java.lang.IncompatibleClassChangeError: Implementing class] IncompatibleClassChangeError[Implementing class]

0.5.2 (2012-12-22)

  • switch to elasticsearch 0.20.1. Note; there is no need to switch to newer releases just for get the latest version. Simply use the downloadURL attribute for set a newer elasticsearch version download url

  • It seems that the auto mapping doesn’t work anymore by default. Added explicit mapping setup after inserting first item. This seems to wrk as it should.

  • bugfix: adjust base url, if used with version, from git to elasticsearch

0.5.1 (2012-12-10)

  • switch to elasticsearch 0.20.0

  • added version argument to startElasticSearchServer

  • cleanup imports

0.5.0 (2012-11-18)

  • initial release tested on win 32bit and posix 32bit. NOT tested on win 64bit, posix 64bit and mac 32/64bit systems.

Release files for p01.elasticstub 0.5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for p01.elasticstub 0.5.4
File Size Uploaded
p01.elasticstub-0.5.4.tar.gz 36.4 kB Details

Release files / p01.elasticstub-0.5.4.tar.gz

Download URL p01.elasticstub-0.5.4.tar.gz
Size 36.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c1b05f2fee640a435677f28b05d958776fba10f3da57c7e4da490e455370024e
BLAKE2b-256 checksum
How to use checksums
04f6a03cd2334f6c9de5a046078f7228a8da6496194fdbeae3a51c3a30945e45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.5.4 This release

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page