Пример #1
0
    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])
Пример #5
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
Пример #6
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_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])
Пример #9
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])
Пример #10
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],
        )
Пример #11
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],
        )
Пример #12
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],
        )
Пример #13
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],
        )
Пример #14
0
    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],
        )
Пример #15
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])
Пример #16
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],
        )
Пример #17
0
    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 )
Пример #19
0
    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)
Пример #23
0
 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)
Пример #24
0
    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))
Пример #25
0
    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))
Пример #26
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)
Пример #27
0
    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)
Пример #28
0
    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],
        )
Пример #29
0
    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")
Пример #30
0
    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)
Пример #31
0
    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])
Пример #32
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])
Пример #33
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])
Пример #34
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)
Пример #35
0
    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))
Пример #36
0
    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])
Пример #37
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])