Home / Class/ TestTestServer Class — requests Architecture

TestTestServer Class — requests Architecture

Architecture documentation for the TestTestServer class in test_testserver.py from the requests codebase.

Entity Profile

Dependency Diagram

graph TD
  ba85c801_ef4e_5a92_0e3d_07f791306eaf["TestTestServer"]
  6cf98a23_4f9c_9f92_66f0_e3af57898d30["test_testserver.py"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|defined in| 6cf98a23_4f9c_9f92_66f0_e3af57898d30
  80931751_f1a4_cfa7_6f2d_ebe95e38952b["test_basic()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| 80931751_f1a4_cfa7_6f2d_ebe95e38952b
  ce956278_be27_d467_813f_9645ce71ddcd["test_server_closes()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| ce956278_be27_d467_813f_9645ce71ddcd
  762416f7_7463_06ad_e8f9_cba074219bb4["test_text_response()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| 762416f7_7463_06ad_e8f9_cba074219bb4
  75f70d20_9345_0efa_7b23_91eb13516d2f["test_basic_response()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| 75f70d20_9345_0efa_7b23_91eb13516d2f
  e036e1c8_f92c_b88a_ec18_21c87dc94d92["test_basic_waiting_server()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| e036e1c8_f92c_b88a_ec18_21c87dc94d92
  ae06816e_1ae0_467c_b481_c7aab860c248["test_multiple_requests()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| ae06816e_1ae0_467c_b481_c7aab860c248
  c1765a3d_a7ab_9909_31bc_bebe7315e225["test_request_recovery()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| c1765a3d_a7ab_9909_31bc_bebe7315e225
  e616c078_b7ed_6a00_18b4_cb75d00ac7b9["test_requests_after_timeout_are_not_received()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| e616c078_b7ed_6a00_18b4_cb75d00ac7b9
  aaa54bb3_9b7e_3fd2_c5e3_f5cc1b9d84f7["test_request_recovery_with_bigger_timeout()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| aaa54bb3_9b7e_3fd2_c5e3_f5cc1b9d84f7
  260beb70_b423_fb75_85f4_0485194aea25["test_server_finishes_on_error()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| 260beb70_b423_fb75_85f4_0485194aea25
  7083856f_6b51_4436_b302_a61afa1a3f9b["test_server_finishes_when_no_connections()"]
  ba85c801_ef4e_5a92_0e3d_07f791306eaf -->|method| 7083856f_6b51_4436_b302_a61afa1a3f9b

Relationship Graph

Source Code

tests/test_testserver.py lines 11–165

class TestTestServer:
    def test_basic(self):
        """messages are sent and received properly"""
        question = b"success?"
        answer = b"yeah, success"

        def handler(sock):
            text = sock.recv(1000)
            assert text == question
            sock.sendall(answer)

        with Server(handler) as (host, port):
            sock = socket.socket()
            sock.connect((host, port))
            sock.sendall(question)
            text = sock.recv(1000)
            assert text == answer
            sock.close()

    def test_server_closes(self):
        """the server closes when leaving the context manager"""
        with Server.basic_response_server() as (host, port):
            sock = socket.socket()
            sock.connect((host, port))

            sock.close()

        with pytest.raises(socket.error):
            new_sock = socket.socket()
            new_sock.connect((host, port))

    def test_text_response(self):
        """the text_response_server sends the given text"""
        server = Server.text_response_server(
            "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n\r\nroflol"
        )

        with server as (host, port):
            r = requests.get(f"http://{host}:{port}")

            assert r.status_code == 200
            assert r.text == "roflol"
            assert r.headers["Content-Length"] == "6"

    def test_basic_response(self):
        """the basic response server returns an empty http response"""
        with Server.basic_response_server() as (host, port):
            r = requests.get(f"http://{host}:{port}")
            assert r.status_code == 200
            assert r.text == ""
            assert r.headers["Content-Length"] == "0"

    def test_basic_waiting_server(self):
        """the server waits for the block_server event to be set before closing"""
        block_server = threading.Event()

        with Server.basic_response_server(wait_to_close_event=block_server) as (
            host,
            port,
        ):
            sock = socket.socket()
            sock.connect((host, port))
            sock.sendall(b"send something")
            time.sleep(2.5)
            sock.sendall(b"still alive")
            block_server.set()  # release server block

    def test_multiple_requests(self):
        """multiple requests can be served"""
        requests_to_handle = 5

        server = Server.basic_response_server(requests_to_handle=requests_to_handle)

        with server as (host, port):
            server_url = f"http://{host}:{port}"
            for _ in range(requests_to_handle):
                r = requests.get(server_url)
                assert r.status_code == 200

            # the (n+1)th request fails
            with pytest.raises(requests.exceptions.ConnectionError):

Domain

Frequently Asked Questions

What is the TestTestServer class?
TestTestServer is a class in the requests codebase, defined in tests/test_testserver.py.
Where is TestTestServer defined?
TestTestServer is defined in tests/test_testserver.py at line 11.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free