Package: p01.elasticstub
This package provides a elasticsearch server stub setup based on a real
elasticsearch server.ContentsREADMEsetuptestingCHANGES0.5.4 (2017-11-02)0.5.3 (2014-07-10)0.5.2 (2012-12-22)0.5.1 (2012-12-10)0.5.0 (2012-11-18)READMEsetupThis 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 heretestingLet’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'}}}}}}CHANGES0.5.4 (2017-11-02)switch to elasticsearch 5.6.4 and adjust startup script environment setupremoved thrift plugin supportadjust default elasticsearch config, added log4j config file0.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 urlIt 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 elasticsearch0.5.1 (2012-12-10)switch to elasticsearch 0.20.0added version argument to startElasticSearchServercleanup imports0.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.