def test_add_method(self):
     service = MockService(self.io_loop)
     service.add_method("GET", "/endpoint", handle_get)
     self.add_service(service)
     self.start_services()
     client = AsyncHTTPClient()
     response = yield client.fetch(service.url("/endpoint"))
     self.assertEqual(200, response.code)
     self.assertEqual(
         {"foo": "bar"},
         json.loads(response.body.decode("utf-8")))
Exemplo n.º 2
0
 def test_add_method(self):
     s, port = bind_unused_port()
     s.close()
     service = MockService(self.io_loop, port)
     service.add_method("GET", "/endpoint", handle_get)
     self.add_service(service)
     self.start_services()
     client = AsyncHTTPClient()
     response = yield client.fetch(service.url("/endpoint"))
     self.assertEqual(200, response.code)
     self.assertEqual({"foo": "bar"},
                      json.loads(response.body.decode("utf-8")))
Exemplo n.º 3
0
 def add_service(self, service=None):
     if not service:
         s, port = bind_unused_port()
         s.close()
         service = MockService(self.io_loop, port)
     self.mock_services.append(service)
     return service
Exemplo n.º 4
0
    def test_mock_service_listen_listens_to_specified_port_number(self):
        sock, port = bind_unused_port()
        sock.close()
        service = MockService(self.io_loop, port)
        service.add_method("GET", "/", lambda x: x.finish("use this port"))

        service.listen()

        response = yield self.fetch(service.url("/"))
        self.assertEqual(200, response.code)
        self.assertEqual("use this port", response.body.decode("utf-8"))

        host = "localhost:{0}".format(port)
        self.assertEqual("http", service.protocol)
        self.assertEqual(port, service.port)
        self.assertEqual("http://" + host, service.base_url)
        self.assertEqual("http://" + host + "/foo", service.url("/foo"))
Exemplo n.º 5
0
    def test_mock_service_listen_adds_socket_when_initialized_with_tuple_port(self):
        sock, port = bind_unused_port()
        service = MockService(self.io_loop, (sock, port))
        service.add_method("GET", "/", lambda x: x.finish("it worked"))

        service.listen()

        response = yield self.fetch("http://localhost:{0}/".format(port))
        self.assertEqual(200, response.code)
        self.assertEqual("it worked", response.body.decode("utf-8"))

        host = "localhost:{0}".format(port)
        self.assertEqual("http", service.protocol)
        self.assertEqual(port, service.port)
        self.assertEqual("http://" + host, service.base_url)
        self.assertEqual("http://" + host + "/foo", service.url("/foo"))
Exemplo n.º 6
0
class TestMockService(AsyncTestCase):

    def setUp(self):
        super(TestMockService, self).setUp()
        _, self.port = bind_unused_port()
        self.service = MockService(self.io_loop, self.port)

    def test_mock_service_url_helpers(self):
        host = "localhost:{0}".format(self.port)
        self.assertEqual("http", self.service.protocol)
        self.assertEqual(self.port, self.service.port)
        self.assertEqual("http://" + host, self.service.base_url)
        self.assertEqual("http://" + host + "/foo", self.service.url("/foo"))

    @gen.coroutine
    def fetch(self, url, *args, **kwargs):
        kwargs.setdefault("raise_error", False)
        client = AsyncHTTPClient(io_loop=self.io_loop)
        response = yield client.fetch(url, *args, **kwargs)
        raise gen.Return(response)

    @gen_test
    def test_mock_service_add_method(self):
        self.service.add_method("GET", "/", lambda x: x.finish({"num": 5}))
        self.service.add_method("POST", "/", lambda x: x.finish("RESPONSE"))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"))
        self.assertEqual(200, response.code)
        self.assertEqual({"num": 5}, json.loads(response.body.decode("utf-8")))

        response = yield self.fetch(
            self.service.url("/"), method="POST", body="FOOBAR")
        self.assertEqual(200, response.code)
        self.assertEqual("RESPONSE", response.body.decode("utf-8"))

        response = yield self.fetch(self.service.url("/"), method="OPTIONS")
        self.assertEqual(405, response.code)

        response = yield self.fetch(self.service.url("/foo"))
        self.assertEqual(404, response.code)

    @gen_test
    def test_mock_service_assert_requested(self):
        self.service.listen()
        # it should 501 all routes and methods by default, so
        # it functions as a simple mocking tool but still makes people
        # actually put content in for real client testing
        response = yield self.fetch(
            self.service.url("/foobar?query=true"), method="OPTIONS")
        self.assertEqual(501, response.code)
        request = self.service.assert_requested("OPTIONS", "/foobar")
        self.assertTrue("query" in request.arguments)

    @gen_test
    def test_mock_service_assert_not_requested(self):
        self.service.listen()
        self.service.assert_not_requested("GET", "/foobar")

        yield self.fetch(self.service.url("/foobar"))

        with self.assertRaises(AssertionError):
            self.service.assert_not_requested("GET", "/foobar")

    @gen_test
    def test_mock_service_assert_requested_with_headers(self):
        self.service.listen()
        response = yield self.fetch(
            self.service.url("/foobar"), headers={"x-thing": "foobar"})
        self.assertEqual(501, response.code)
        self.service.assert_requested(
            "GET", "/foobar", headers={"X-Thing": "foobar"})

    @gen_test
    def test_mock_service_assert_requested_supports_delete(self):
        self.service.add_method("DELETE", "/", lambda x: x.finish({"x": True}))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"), method="DELETE")
        self.assertEqual(200, response.code)
        self.service.assert_requested("DELETE", "/")

    @gen_test
    def test_mock_service_assert_requested_supports_head(self):
        self.service.add_method("HEAD", "/", lambda x: x.finish({"x": True}))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"), method="HEAD")
        self.assertEqual(200, response.code)
        self.service.assert_requested("HEAD", "/")
Exemplo n.º 7
0
 def setUp(self):
     super(TestMockService, self).setUp()
     _, self.port = bind_unused_port()
     self.service = MockService(self.io_loop, self.port)
Exemplo n.º 8
0
class TestMockService(AsyncTestCase):
    def setUp(self):
        super(TestMockService, self).setUp()
        _, self.port = bind_unused_port()
        self.service = MockService(self.io_loop, self.port)

    def test_mock_service_url_helpers(self):
        host = "localhost:{0}".format(self.port)
        self.assertEqual("http", self.service.protocol)
        self.assertEqual(self.port, self.service.port)
        self.assertEqual("http://" + host, self.service.base_url)
        self.assertEqual("http://" + host + "/foo", self.service.url("/foo"))

    @gen.coroutine
    def fetch(self, url, *args, **kwargs):
        kwargs.setdefault("raise_error", False)
        client = AsyncHTTPClient()
        response = yield client.fetch(url, *args, **kwargs)
        raise gen.Return(response)

    @gen_test
    def test_mock_service_add_method(self):
        self.service.add_method("GET", "/", lambda x: x.finish({"num": 5}))
        self.service.add_method("POST", "/", lambda x: x.finish("RESPONSE"))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"))
        self.assertEqual(200, response.code)
        self.assertEqual({"num": 5}, json.loads(response.body.decode("utf-8")))

        response = yield self.fetch(self.service.url("/"),
                                    method="POST",
                                    body="FOOBAR")
        self.assertEqual(200, response.code)
        self.assertEqual("RESPONSE", response.body.decode("utf-8"))

        response = yield self.fetch(self.service.url("/"), method="OPTIONS")
        self.assertEqual(405, response.code)

        response = yield self.fetch(self.service.url("/foo"))
        self.assertEqual(404, response.code)

    @gen_test
    def test_mock_service_assert_requested(self):
        self.service.listen()
        # it should 501 all routes and methods by default, so
        # it functions as a simple mocking tool but still makes people
        # actually put content in for real client testing
        response = yield self.fetch(self.service.url("/foobar?query=true"),
                                    method="OPTIONS")
        self.assertEqual(501, response.code)
        request = self.service.assert_requested("OPTIONS", "/foobar")
        self.assertTrue("query" in request.arguments)

    @gen_test
    def test_mock_service_assert_requested_ignores_headers_by_default(self):
        self.service.listen()
        response = yield self.fetch(self.service.url("/foobar?query=true"),
                                    method="GET",
                                    headers={"X-Foo": "Bar"})
        self.assertEqual(501, response.code)
        request = self.service.assert_requested("GET", "/foobar")
        self.assertTrue("query" in request.arguments)
        self.assertEqual("Bar", request.headers["X-Foo"])

    @gen_test
    def test_mock_service_assert_not_requested(self):
        self.service.listen()
        self.service.assert_not_requested("GET", "/foobar")

        yield self.fetch(self.service.url("/foobar"))

        with self.assertRaises(AssertionError):
            self.service.assert_not_requested("GET", "/foobar")

    @gen_test
    def test_mock_service_assert_requested_with_headers(self):
        self.service.listen()
        response = yield self.fetch(self.service.url("/foobar"),
                                    headers={"x-thing": "foobar"})
        self.assertEqual(501, response.code)
        self.service.assert_requested("GET",
                                      "/foobar",
                                      headers={"X-Thing": "foobar"})

    @gen_test
    def test_mock_service_assert_requested_supports_delete(self):
        self.service.add_method("DELETE", "/", lambda x: x.finish({"x": True}))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"), method="DELETE")
        self.assertEqual(200, response.code)
        self.service.assert_requested("DELETE", "/")

    @gen_test
    def test_mock_service_assert_requested_supports_head(self):
        self.service.add_method("HEAD", "/", lambda x: x.finish({"x": True}))
        self.service.listen()

        response = yield self.fetch(self.service.url("/"), method="HEAD")
        self.assertEqual(200, response.code)
        self.service.assert_requested("HEAD", "/")

    @gen_test
    def test_mock_service_assert_stop_stops_the_service(self):
        self.service.listen()
        self.service.stop()

        response = yield self.fetch(self.service.url("/"), method="HEAD")
        self.assertEqual(599, response.code)
Exemplo n.º 9
0
 def setUp(self):
     super(TestMockService, self).setUp()
     _, self.port = bind_unused_port()
     self.service = MockService(self.io_loop, self.port)
Exemplo n.º 10
0
 def setUp(self):
     super(TestMockService, self).setUp()
     self.service = MockService(self.io_loop)