mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-28 11:43:50 +00:00
C++20 port 16/16: config parsing on arenas, unit tests in C++ (#3080)
* Rename test_jconf.c to test_jconf_cpp.cpp * Parse the config file on arenas read_jconf now reads the file and builds the JSON tree in a scratch arena that is released before it returns, and copies the parsed strings into one process-lifetime arena instead of a malloc per string. parse_addr and the config parser share one address splitter. Port test_jconf to C++ and cover every field copied out of the parse tree, a re-read, and the densest file the size limit accepts. * tests: rename remaining C unit tests to .cpp (no content changes) * tests: port remaining C unit tests to the C++ test harness Convert acl, acl_literal, aead2022, base64, buffer, cache (legacy reference), crypto, ipset, ipset_reference, json, netutils, ppbloom, process, ref, ssurl and utils tests to test_helpers.hpp. ctest names are unchanged; every assertion is kept. Build the ported sources with the strict C++ warning set. * Run clang-tidy on every ported test The test regex skipped file names with digits (test_aead2022_cpp.cpp, test_base64_cpp.cpp); include them, fix the two optional accesses it then reports, and build test_jconf with the strict warning set. * docs: per-connection RSS on Linux against the C relay * test_jconf: check read_jconf results before using them
This commit is contained in:
+8
-2
@@ -113,7 +113,12 @@ Pools are reserved at startup and only touched slots become resident.
|
||||
3. Event layer over libuv (`src/event/`).
|
||||
4. Crypto codecs held by value: AEAD, stream and AEAD-2022.
|
||||
5. Services: the cache on a fixed slab, `IntrusiveList` for ACL rules and
|
||||
the manager, the pooled resolver.
|
||||
the manager, the pooled resolver, and `read_jconf` on arenas (the file and
|
||||
JSON tree in a scratch arena released before it returns, the parsed
|
||||
strings in one process-lifetime arena). ACL rules and IP-set nodes still
|
||||
come from `malloc` at startup: the IP-set trie frees nodes as it merges
|
||||
prefixes, and its size depends on the ACL file, so a bump arena would
|
||||
have to reserve for the worst case.
|
||||
6. One TCP engine for ss-tunnel, ss-local, ss-redir and ss-server.
|
||||
7. One UDP engine.
|
||||
8. Library heaps for libuv, c-ares and Mbed TLS, `heap_seal()`, and the
|
||||
@@ -122,7 +127,8 @@ Pools are reserved at startup and only touched slots become resident.
|
||||
(`ss_local_start`/`stop`/`wait`/`destroy`) and the RAII
|
||||
`shadowsocks/shadowsocks.hpp`.
|
||||
10. Removal of `ss_event`, the C resolver, the C codecs (now test oracles),
|
||||
uthash and `ss_list`.
|
||||
uthash and `ss_list`, and the unit tests ported to C++
|
||||
(`tests/test_helpers.hpp`).
|
||||
|
||||
## Allocation audit
|
||||
|
||||
|
||||
Reference in New Issue
Block a user