• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

polserver / polserver / 36234885749
82%

Build:
DEFAULT BRANCH: master
Ran 26 Sep 2026 10:22AM UTC
Jobs 1
Files 856
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 Sep 2026 10:08AM UTC coverage: 81.929% (-0.01%) from 81.943%
36234885749

push

github

web-flow
Run the test client on one asyncio loop, and fix two stale reads (#984)

* Say why the test client could not take its control port

A failed bind() on the control port killed the test client with
nothing logged. The shard only reported "Failed to connect to
testclient" ten seconds later. Port 50000 is inside the Windows
ephemeral range, so another process can hold it.

The bind now retries for eight seconds, then logs the port and the
reason before raising.

* Ask a client what it knows from behind the barrier

list_client_objs() and list_client_equipment() ask the client through a
todo, which is answered out of the client's loop. The answer could
predate packets still queued in the core, and a stale answer passed a
presence check on the first try.

Both now send a barrier first. The poll helpers built on them keep
retrying, since anything sent later still needs a retry.

* Run the test client on one event loop instead of threads

The test client ran two threads per client plus one for control, held
together by six locks and three select() loops, and an exception in a
thread was lost. It now runs on one asyncio loop. A Client owns three
tasks: game loop, reader and keep-alive. The Brain is a task, and
PolServer is an asyncio server.

- Two lost-exception defects are fixed: a liveness check that asked the
  main thread, and TestBrain.loop returning without stopping its client.
- Packet handlers stay synchronous. An await in one would let the 0x73
  echo be handled mid-burst.
- A todo queued while packets are pending runs after them.
- Every wait is bounded, since cmake waits on this process.
- Python 3.8 is required, and an older one disables the client.
- terminal.py is ported and compile-checked only.

shard_test_1: 202.9s -> 200.9s.

* Cover the packet framers where no shard test reaches them

Loopback delivers the test client's packets whole, so the framers'
resume path never ran. pyuo_framing_test feeds both framers whole
packets, coalesced packet... (continued)

60255 of 73545 relevant lines covered (81.93%)

639390.86 hits per line

Coverage Regressions

Lines Coverage ∆ File
7
56.67
-1.56% pol-core/pol/network/client.cpp
5
53.35
-1.05% pol-core/pol/network/clientthread.cpp
5
53.13
-5.21% pol-core/pol/systems/suspiciousacts.cpp
2
73.47
-0.38% pol-core/pol/dropitem.cpp
2
63.41
0.0% pol-core/pol/mobile/ufacing.cpp
1
96.0
-1.33% pol-core/uoconvert/terrainplane.cpp
Jobs
ID Job ID Ran Files Coverage
1 36234885749.1 26 Sep 2026 10:22AM UTC 856
81.93
GitHub Action Run
Source Files on build 36234885749
  • Tree
  • List 856
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • c1622149 on github
  • Prev Build on master (#36192247533)
  • Next Build on master (#36239996799)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc