Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 37 additions & 7 deletions tests/entrypoints/serve/utils/test_ssl_cert_refresher.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,28 @@ def touch_file(path: str) -> None:
Path(path).touch()


async def wait_for_counts(
ssl_context: MockSSLContext,
*,
cert_chain_count: int,
ca_count: int,
timeout: float = 5.0,
) -> None:
deadline = asyncio.get_running_loop().time() + timeout
while True:
if (
ssl_context.load_cert_chain_count >= cert_chain_count
and ssl_context.load_ca_count >= ca_count
):
return

if asyncio.get_running_loop().time() >= deadline:
assert ssl_context.load_cert_chain_count >= cert_chain_count
assert ssl_context.load_ca_count >= ca_count

await asyncio.sleep(0.05)


@pytest.mark.asyncio
async def test_ssl_refresher():
ssl_context = MockSSLContext()
Expand All @@ -53,20 +75,28 @@ async def test_ssl_refresher():
assert ssl_context.load_ca_count == 0

touch_file(key_path)
await asyncio.sleep(1)
assert ssl_context.load_cert_chain_count == 1
await wait_for_counts(
ssl_context,
cert_chain_count=1,
ca_count=0,
)
assert ssl_context.load_ca_count == 0

touch_file(cert_path)
touch_file(ca_path)
await asyncio.sleep(1)
assert ssl_context.load_cert_chain_count == 2
assert ssl_context.load_ca_count == 1
await wait_for_counts(
ssl_context,
cert_chain_count=2,
ca_count=1,
)

ssl_refresher.stop()
await asyncio.sleep(0)
cert_chain_count = ssl_context.load_cert_chain_count
ca_count = ssl_context.load_ca_count

touch_file(cert_path)
touch_file(ca_path)
await asyncio.sleep(1)
assert ssl_context.load_cert_chain_count == 2
assert ssl_context.load_ca_count == 1
assert ssl_context.load_cert_chain_count == cert_chain_count
assert ssl_context.load_ca_count == ca_count
Loading