Simple test case for unit testing client commands

This commit is contained in:
Honza Kral
2013-06-07 23:57:59 +02:00
parent ca99215e46
commit 37f2335478
2 changed files with 51 additions and 2 deletions
+4 -2
View File
@@ -83,7 +83,7 @@ class Elasticsearch(object):
Elasticsearch low-level client. Provides a straightforward mapping from
Python to ES REST endpoints.
"""
def __init__(self, hosts=None, **kwargs):
def __init__(self, hosts=None, transport_class=Transport, **kwargs):
"""
:arg hosts: list of nodes we should connect to. Node should be a
dictionary ({"host": "localhost", "port": 9200}), the entire dictionary
@@ -92,11 +92,13 @@ class Elasticsearch(object):
translated to a dictionary automatically. If no value is given the
:class:`~elasticsearch.Connection` class defaults will be used.
:arg transport_class: :class:`~elasticsearch.Transport` subclass to use.
:arg kwargs: any additional arguments will be passed on to the
:class:`~elasticsearch.Transport` class and, subsequently, to the
:class:`~elasticsearch.Connection` instances.
"""
self.transport = Transport(_normalize_hosts(hosts), **kwargs)
self.transport = transport_class(_normalize_hosts(hosts), **kwargs)
# namespaced clients for compatibility with API names
self.indices = InidicesClient(self)
+47
View File
@@ -0,0 +1,47 @@
from unittest import TestCase
from collections import defaultdict
from elasticsearch import Elasticsearch
class DummyTransport(object):
def __init__(self, hosts, responses=None, **kwargs):
self.responses = responses
self.call_count = 0
self.calls = defaultdict(list)
def perform_request(self, method, url, params=None, body=None):
resp = 200, {}
if self.responses:
resp = self.responses[self.call_count]
self.call_count += 1
self.calls[(method, url)].append((params, body))
return resp
class ElasticsearchTestCase(TestCase):
def setUp(self):
super(ElasticsearchTestCase, self).setUp()
self.client = Elasticsearch(transport_class=DummyTransport)
def assert_call_count_equals(self, count):
self.assertEquals(count, self.client.transport.call_count)
def assert_url_called(self, method, url, count=1):
self.assertIn((method, url), self.client.transport.calls)
calls = self.client.transport.calls[(method, url)]
self.assertEquals(count, len(calls))
return calls
class TestElasticsearchTestCase(ElasticsearchTestCase):
def test_our_transport_used(self):
self.assertIsInstance(self.client.transport, DummyTransport)
def test_start_with_0_call(self):
self.assert_call_count_equals(0)
def test_each_call_is_recorded(self):
self.client.transport.perform_request('GET', '/')
self.client.transport.perform_request('DELETE', '/42', params={}, body='body')
self.assert_call_count_equals(2)
self.assertEquals([({}, 'body')], self.assert_url_called('DELETE', '/42', 1))