testsuite: authenticate spectest T1/T2 with libafpclient#3176
Conversation
🤖 Augment PR SummarySummary: Refactors the AFP specification test runner to authenticate normal spectest tiers via Netatalk Client’s libafpclient, while preserving the legacy raw-DSI backend for wire/protocol-edge-case suites. Changes:
Notes: Readonly coverage is now run as a spectest subtest in CI; documentation/manpages are updated to describe the new backend model and UAM selection. 🤖 Was this summary useful? React with 👍 or 👎 |
0111ca0 to
4eb1550
Compare
Replace afp_spectest’s single legacy-DSI connection model with explicit per-testset tier, backend, and precondition metadata. T1 and T2 now authenticate through libafpclient, while tests that depend on socket ownership, partial packets, malformed framing, or unusual session lifecycle remain on the legacy DSI backend as T3. Add a libafpclient transport adapter behind the existing CONN/DSI test interface. The adapter establishes sessions with a selected UAM, dispatches the existing hand-built AFP payloads through libafpclient, queues replies for the legacy receive helpers, supports split DSI writes and large Read/ReadExt replies, and mirrors result codes and payloads into the buffers inspected by existing tests. Add a native libafpclient smoke path covering volume lookup, create/open, read/write, cleanup, and logout. Teach the spectest registry to expose tier, backend, preconditions, and the reason for retaining legacy DSI in afp_spectest -l. Run contiguous backend groups with separate primary and secondary connections, allow -A to select libafpclient UAMs by short alias or protocol name, and keep T3 authentication fixed to Cleartxt Passwrd so encrypted-UAM runs can still transition to raw protocol coverage. Split the partial-response deadlock cases out of FPRead into T3FPRead, rename the malformed-request and sleep/session suites to T3Error and T3FPzzz, and retain FPDisconnectOldSession as raw DSI. Remove obsolete FPGetUserInfo probes from no-access fixture setup so AFP 3.4 does not turn AFPERR_NOOP into a bogus directory ID. Factor generic libafpclient initialization, discovery, connection, and teardown out of the login UAM tests and keep a logintest-specific wrapper around that shared support. Rename the cleartext selector to clrtxt and update the UAM documentation. Update Meson dependencies, container entrypoints, documentation, and CI for the new backend model. Container test runners now build quoted argument vectors, accept AFP_SUBTEST and AFP_TESTSUITE_UAM, support very-verbose transport logging, fold readonly coverage into spectest, and distribute representative encrypted UAMs across the spectest jobs.
4eb1550 to
3b4e855
Compare
|
📊 Performance DashboardCommit: 🔥 Spectest (AFP 3.4) - FlameGraph**Netatalk Code-time: ** · Runtime: · Stacks: 🔥 Click the preview to open the interactive flamegraph (zoom + search). 🔝 Top 10 leaf functions
📈 Speedtest (AFP 3.4) - PerfGraph🔝 Peak throughput per operation
⏱️ Lantest (AFP 3.4) - LatencyGraphAvg total runtime: 8161 ms · Avg time per AFP op: 0.139 ms 🐢 All operations (avg runtime, in test order)
|
|
@rdmark Wow, interesting to see the impact the netatalk-client library has on performance. I would suggest merging #3177 first and rebasing this so we can see better where the performance hits are coming from the most? This also suggests we need a way to tell afp_speedtest, afp_lantest to use the legacy/direct or new library connect methods? We will probably need a flamegraph for the client library too.. |
|
@andylemin interesting observation -- picking the transport backend dynamically is trivial to accomplish, will make it happen when I get to that stage I'm leaning towards pulling this back to Draft for a while and prepare a new netatalk-client release with a handful of fixes that should make this cleaner and more portable |
|
I think its a great baseline to be able to compare between the two client methods, the performance dashboard's deltas are quite noticeable - 4 are 200-300% slower, whilst others are not that bad (maybe 50% worse). It shows nicely where the issues are. And the variance is very telling on the slowest ones.. This has been a really great way to test the client at scale rapidly! 🙂 |






Replace afp_spectest’s single legacy-DSI connection model with explicit per-testset tier, backend, and precondition metadata. T1 and T2 now authenticate through libafpclient, while tests that depend on socket ownership, partial packets, malformed framing, or unusual session lifecycle remain on the legacy DSI backend as T3.
Add a libafpclient transport adapter behind the existing CONN/DSI test interface. The adapter establishes sessions with a selected UAM, dispatches the existing hand-built AFP payloads through libafpclient, queues replies for the legacy receive helpers, supports split DSI writes and large Read/ReadExt replies, and mirrors result codes and payloads into the buffers inspected by existing tests. Add a native libafpclient smoke path covering volume lookup, create/open, read/write, cleanup, and logout.
Teach the spectest registry to expose tier, backend, preconditions, and the reason for retaining legacy DSI in afp_spectest -l. Run contiguous backend groups with separate primary and secondary connections, allow -A to select libafpclient UAMs by short alias or protocol name, and keep T3 authentication fixed to Cleartxt Passwrd so encrypted-UAM runs can still transition to raw protocol coverage.
Split the partial-response deadlock cases out of FPRead into T3FPRead, rename the malformed-request and sleep/session suites to T3Error and T3FPzzz, and retain FPDisconnectOldSession as raw DSI. Remove obsolete FPGetUserInfo probes from no-access fixture setup so AFP 3.4 does not turn AFPERR_NOOP into a bogus directory ID.
Factor generic libafpclient initialization, discovery, connection, and teardown out of the login UAM tests and keep a logintest-specific wrapper around that shared support. Rename the cleartext selector to clrtxt and update the UAM documentation.
Update Meson dependencies, container entrypoints, documentation, and CI for the new backend model. Container test runners now build quoted argument vectors, accept AFP_SUBTEST and AFP_TESTSUITE_UAM, support very-verbose transport logging, fold readonly coverage into spectest, and distribute representative encrypted UAMs across the spectest jobs.