def test_request_timeout_extracted_from_params_and_passed(self): t = Transport([{}], connection_class=DummyConnection) # Test cases for the `reuest_timeout` parameter. In the form of input -> expected output. # Int and Float values will be converted to a float, all others will be converted to None. test_cases = { 42: 42, '42': 42, '42.0': 42, '42.00000': 42, '42.1': 42.1, 'not a float or int': None, None: None, } call_count = 0 for timeout, expected_timeout in test_cases.items(): t.perform_request("GET", "/", params={"request_timeout": timeout}) self.assertEquals( { "timeout": expected_timeout, "ignore": (), "headers": None, }, t.get_connection().calls[call_count][1], ) self.assertEquals(("GET", "/", {}, None), t.get_connection().calls[call_count][0]) call_count += 1 self.assertEquals(call_count, len(t.get_connection().calls))
def test_body_gets_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request('GET', '/', body='你好') self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', None, b'\xe4\xbd\xa0\xe5\xa5\xbd'), t.get_connection().calls[0][0])
def test_request_timeout_extracted_from_params_and_passed(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request('GET', '/', params={'request_timeout': 42}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', {}, None), t.get_connection().calls[0][0]) self.assertEquals({'timeout': 42, 'ignore': ()}, t.get_connection().calls[0][1])
def test_body_bytes_get_passed_untouched(self): t = Transport([{}], connection_class=DummyConnection) body = b'\xe4\xbd\xa0\xe5\xa5\xbd' t.perform_request('GET', '/', body=body) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', None, body), t.get_connection().calls[0][0])
def test_transport_get_connection(): app = application() with BackgroundTask(app, 'transport_perform_request') as transaction: transport = Transport([HOST]) transport.get_connection() expected = (ES_SETTINGS['host'], ES_SETTINGS['port'], None) assert transaction._nr_datastore_instance_info == expected
def test_send_get_body_as_source(self): t = Transport([{}], send_get_body_as="source", connection_class=DummyConnection) t.perform_request("GET", "/", body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals( ("GET", "/", {"source": "{}"}, None), t.get_connection().calls[0][0] )
def test_client_meta_header_not_sent(self): t = Transport([{}], meta_header=False, connection_class=DummyConnection) t.perform_request("GET", "/", body={}) self.assertEqual(1, len(t.get_connection().calls)) headers = t.get_connection().calls[0][1]["headers"] self.assertIs(headers, None)
def test_send_get_body_as_post(self): t = Transport([{}], send_get_body_as='POST', connection_class=DummyConnection) t.perform_request('GET', '/', body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('POST', '/', None, b'{}'), t.get_connection().calls[0][0])
def test_send_get_body_as_post(self): t = Transport([{}], send_get_body_as="POST", connection_class=DummyConnection) t.perform_request("GET", "/", body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(("POST", "/", None, b"{}"), t.get_connection().calls[0][0])
def test_body_gets_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", body="你好") self.assertEqual(1, len(t.get_connection().calls)) self.assertEqual( ("GET", "/", None, b"\xe4\xbd\xa0\xe5\xa5\xbd"), t.get_connection().calls[0][0], )
def test_body_surrogates_replaced_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", body="你好\uda6a") self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals( ("GET", "/", None, b"\xe4\xbd\xa0\xe5\xa5\xbd\xed\xa9\xaa"), t.get_connection().calls[0][0], )
def test_body_surrogates_replaced_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", body="你好\uda6a") self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals( ("GET", "/", None, b"\xe4\xbd\xa0\xe5\xa5\xbd\xed\xa9\xaa"), t.get_connection().calls[0][0], )
def test_request_timeout_extracted_from_params_and_passed(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", params={"request_timeout": 42}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(("GET", "/", {}, None), t.get_connection().calls[0][0]) self.assertEquals( {"timeout": 42, "ignore": (), "headers": None}, t.get_connection().calls[0][1], )
def test_request_with_custom_user_agent_header(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", headers={"user-agent": "my-custom-value/1.2.3"}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals( {"timeout": None, "ignore": (), "headers": {"user-agent": "my-custom-value/1.2.3"} }, t.get_connection().calls[0][1], )
def test_send_get_body_as_source(self): t = Transport([{}], send_get_body_as='source', connection_class=DummyConnection) t.perform_request('GET', '/', body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', { 'source': '{}' }, None), t.get_connection().calls[0][0])
def test_request_timeout_extracted_from_params_and_passed(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", params={"request_timeout": 42}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(("GET", "/", {}, None), t.get_connection().calls[0][0]) self.assertEquals( {"timeout": 42, "ignore": (), "headers": { 'user-agent':"elasticsearch-py/%s (Python %s)" % (__versionstr__, python_version())} }, t.get_connection().calls[0][1], )
def test_sniff_after_n_seconds(self): t = Transport([{"data": CLUSTER_NODES}], connection_class=DummyConnection, sniffer_timeout=5) for _ in range(4): t.perform_request("GET", "/") self.assertEquals(1, len(t.connection_pool.connections)) self.assertIsInstance(t.get_connection(), DummyConnection) t.last_sniff = time.time() - 5.1 t.perform_request("GET", "/") self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals("http://1.1.1.1:123", t.get_connection().host) self.assertTrue(time.time() - 1 < t.last_sniff < time.time() + 0.01)
def test_sniff_after_n_seconds(self): t = Transport([{"data": CLUSTER_NODES}], connection_class=DummyConnection, sniffer_timeout=5) for _ in range(4): t.perform_request('GET', '/') self.assertEquals(1, len(t.connection_pool.connections)) self.assertIsInstance(t.get_connection(), DummyConnection) t.last_sniff = time.time() - 5.1 t.perform_request('GET', '/') self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('http://1.1.1.1:123', t.get_connection().host) self.assertTrue(time.time() - 1 < t.last_sniff < time.time() + 0.01 )
def test_sniff_on_start_fetches_and_uses_nodes_list_for_its_schema(self): class DummyThriftConnection(DummyConnection): transport_schema = "thrift" t = Transport([{"data": CLUSTER_NODES}], connection_class=DummyThriftConnection, sniff_on_start=True) self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals("thrift://1.1.1.1:9500", t.get_connection().host)
def test_sniff_on_fail_triggers_sniffing_on_fail(self): t = Transport([{'exception': ConnectionError('abandon ship')}, {"data": CLUSTER_NODES}], connection_class=DummyConnection, sniff_on_connection_fail=True, max_retries=0, randomize_hosts=False) self.assertRaises(ConnectionError, t.perform_request, 'GET', '/') self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('http://1.1.1.1:123', t.get_connection().host)
def test_sniff_reuses_connection_instances_if_possible(self): t = Transport([{'data': CLUSTER_NODES}, {"host": "1.1.1.1", "port": 123}], connection_class=DummyConnection, randomize_hosts=False) connection = t.connection_pool.connections[1] t.sniff_hosts() self.assertEquals(1, len(t.connection_pool.connections)) self.assertIs(connection, t.get_connection())
def test_sniff_will_use_seed_connections(self): t = Transport([{'data': CLUSTER_NODES}], connection_class=DummyConnection) t.set_connections([{'data': 'invalid'}]) t.sniff_hosts() self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('http://1.1.1.1:123', t.get_connection().host)
def test_sniff_on_start_fetches_and_uses_nodes_list(self): t = Transport( [{"data": CLUSTER_NODES}], connection_class=DummyConnection, sniff_on_start=True, ) self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals("http://1.1.1.1:123", t.get_connection().host)
def test_request_will_fail_after_X_retries(self): t = Transport([{ 'exception': ConnectionError('abandon ship') }], connection_class=DummyConnection) self.assertRaises(ConnectionError, t.perform_request, 'GET', '/') self.assertEquals(4, len(t.get_connection().calls))
def test_request_will_fail_after_X_retries(self): t = Transport( [{"exception": ConnectionError("abandon ship")}], connection_class=DummyConnection, ) self.assertRaises(ConnectionError, t.perform_request, "GET", "/") self.assertEquals(4, len(t.get_connection().calls))
def test_sniff_will_pick_up_published_host(self): t = Transport([{ 'data': CLUSTER_NODE_PUBLISH_HOST }], connection_class=DummyConnection) t.sniff_hosts() self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('http://obsidian:9200', t.get_connection().host)
def test_sniff_on_start_fetches_and_uses_nodes_list_for_its_schema(self): class DummyThriftConnection(DummyConnection): transport_schema = 'thrift' t = Transport([{ 'data': CLUSTER_NODES }], connection_class=DummyThriftConnection, sniff_on_start=True) self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('thrift://1.1.1.1:9500', t.get_connection().host)
def test_opaque_id(self): t = Transport([{}], opaque_id="app-1", connection_class=DummyConnection) t.perform_request("GET", "/") self.assertEqual(1, len(t.get_connection().calls)) self.assertEqual(("GET", "/", None, None), t.get_connection().calls[0][0]) self.assertEqual( { "timeout": None, "ignore": (), "headers": None }, t.get_connection().calls[0][1], ) # Now try with an 'x-opaque-id' set on perform_request(). t.perform_request("GET", "/", headers={"x-opaque-id": "request-1"}) self.assertEqual(2, len(t.get_connection().calls)) self.assertEqual(("GET", "/", None, None), t.get_connection().calls[1][0]) self.assertEqual( { "timeout": None, "ignore": (), "headers": { "x-opaque-id": "request-1" } }, t.get_connection().calls[1][1], )
def test_client_meta_header(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", body={}) self.assertEqual(1, len(t.get_connection().calls)) headers = t.get_connection().calls[0][1]["headers"] self.assertRegexpMatches(headers["x-elastic-client-meta"], r"^es=[0-9.]+p?,py=[0-9.]+p?,t=[0-9.]+p?$") class DummyConnectionWithMeta(DummyConnection): HTTP_CLIENT_META = ("dm", "1.2.3") t = Transport([{}], connection_class=DummyConnectionWithMeta) t.perform_request("GET", "/", body={}, headers={"Custom": "header"}) self.assertEqual(1, len(t.get_connection().calls)) headers = t.get_connection().calls[0][1]["headers"] self.assertRegexpMatches( headers["x-elastic-client-meta"], r"^es=[0-9.]+p?,py=[0-9.]+p?,t=[0-9.]+p?,dm=1.2.3$", ) self.assertEqual(headers["Custom"], "header")
def test_sniff_on_fail_triggers_sniffing_on_fail(self): t = Transport( [{ "exception": ConnectionError("abandon ship") }, { "data": CLUSTER_NODES }], connection_class=DummyConnection, sniff_on_connection_fail=True, max_retries=0, randomize_hosts=False, ) self.assertRaises(ConnectionError, t.perform_request, "GET", "/") self.assertEqual(1, len(t.connection_pool.connections)) self.assertEqual("http://1.1.1.1:123", t.get_connection().host)
def test_body_gets_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request('GET', '/', body='你好') self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', None, b'\xe4\xbd\xa0\xe5\xa5\xbd'), t.get_connection().calls[0][0])
def test_send_get_body_as_post(self): t = Transport([{}], send_get_body_as='POST', connection_class=DummyConnection) t.perform_request('GET', '/', body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('POST', '/', None, b'{}'), t.get_connection().calls[0][0])
def test_send_get_body_as_source(self): t = Transport([{}], send_get_body_as='source', connection_class=DummyConnection) t.perform_request('GET', '/', body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(('GET', '/', {'source': '{}'}, None), t.get_connection().calls[0][0])
def test_sniff_will_pick_up_published_host(self): t = Transport([{'data': CLUSTER_NODE_PUBLISH_HOST}], connection_class=DummyConnection) t.sniff_hosts() self.assertEquals(1, len(t.connection_pool.connections)) self.assertEquals('http://obsidian:9200', t.get_connection().host)
def test_request_will_fail_after_X_retries(self): t = Transport([{'exception': ConnectionError('abandon ship')}], connection_class=DummyConnection) self.assertRaises(ConnectionError, t.perform_request, 'GET', '/') self.assertEquals(4, len(t.get_connection().calls))
def test_body_gets_encoded_into_bytes(self): t = Transport([{}], connection_class=DummyConnection) t.perform_request("GET", "/", body=u"你好") self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(("GET", "/", None, b"\xe4\xbd\xa0\xe5\xa5\xbd"), t.get_connection().calls[0][0])
def test_send_get_body_as_post(self): t = Transport([{}], send_get_body_as="POST", connection_class=DummyConnection) t.perform_request("GET", "/", body={}) self.assertEquals(1, len(t.get_connection().calls)) self.assertEquals(("POST", "/", None, b"{}"), t.get_connection().calls[0][0])