packages feed

hinagata-postgres-0.1.0.0: test/stalled-postgres-peer.py

"""Test-only PostgreSQL startup peer: accept a connection, then observe close."""
import pathlib
import socket
import struct
import sys

root = pathlib.Path(sys.argv[1])
with socket.socket() as listener:
    listener.bind(("127.0.0.1", 0))
    listener.listen(1)
    (root / "port").write_text(str(listener.getsockname()[1]))
    with listener.accept()[0] as peer:
        def receive(size):
            data = b""
            while len(data) < size:
                block = peer.recv(size - len(data))
                if not block:
                    return None
                data += block
            return data

        while True:
            header = receive(4)
            if header is None:
                break
            packet = receive(struct.unpack("!I", header)[0] - 4)
            if packet is None:
                break
            # Refuse SSL/GSS negotiation; accept and stall the startup packet.
            if len(packet) == 4:
                peer.sendall(b"N")
                continue
            (root / "accepted").write_text("ready")
            while peer.recv(4096):
                pass
            break
    (root / "closed").write_text("EOF")