#!/usr/bin/env python3 """Exercise snapshot reads, deadlines and shutdown during a held store write.""" import argparse import hashlib from contextlib import suppress import http.client import json import os from pathlib import Path import select import socket import struct import subprocess import tempfile import time HERE = Path(__file__).resolve().parent def gated_server(directory, binary): signaled_read, signaled_write = os.pipe() release_read, release_write = os.pipe() environment = os.environ.copy() environment['PURE_TEST_GATE_SIGNAL_FD'] = str(signaled_write) environment['PURE_TEST_GATE_RELEASE_FD'] = str(release_read) process = subprocess.Popen([ str(binary), '--store', str(directory), '--program', str(HERE / 'examples/editor.pure'), '--port', '0', '--timeout-ms', '250' ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, pass_fds=(signaled_write, release_read), env=environment) os.close(signaled_write) os.close(release_read) assert select.select([process.stdout], [], [], 5)[0], 'server did not start' port = json.loads(process.stdout.readline())['port'] return process, port, signaled_read, release_write def begin_write(port): connection = socket.create_connection(('127.0.0.1', port), timeout=3) connection.settimeout(3) body = struct.pack('