summaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)Author
8 daysLet a tracker with live sync built in run without a clusterDirk Engling
9 daysGive the live sync worker a real workstructDirk Engling
9 daysAdd integration tests for live syncDirk Engling
9 daysRetire old perl backend to the proxy, but don't delete it yetDirk Engling
9 daysTurn the bucket count into a knob, but keep cleaner wake-ups at a constant rateDirk Engling
9 daysSweep the obsolete CVS Id keyword out of the treeDirk Engling
10 daysRemove tracker id from stats, as wellDirk Engling
10 daysRemove version string from what is reported over httpDirk Engling
10 daysadd test for the version report fascilitiesDirk Engling
10 daysPrepare a versioning mechanism for the tracker that works from tarballsDirk Engling
10 daysLive logging networks was defunc for a while, does not work with v6, so we remove itDirk Engling
11 daysAdd some tests for the actual trackerlogic, something I put off for too longDirk Engling
11 daysAdd tests for the ot_mutex code, it didn't have any until nowDirk Engling
11 daysMake the dynamic accesslist readers release their line buffer and properly exitDirk Engling
11 daysRefactor ot_workqueue out of ot_mutex, no behaviour changeDirk Engling
11 daysMake tcp worker multithreaded, tooDirk Engling
This shamelessly steals the model established in the UDP workers, i.e. if the kernel is able to bind multiple listening sockets to the same endpoint, we will share them across threads. If it can't, all threads will accept on the same socket. The fast path handles most of the connections, only the rare case of no data yet on the socket is offloaded to the slow path (which used to be the mainloop) for completion. This scales nicely, as the higher the load is, the higher chances are that an accept happens only after the network roundtrip to the peer completes, leading to more connections that already have data waiting for us. We also consolidate the workstruct init and deinit code, preparation for later unifying all thread state structs for all protocols (mca, udc and tcp). The config file gains a per tcp connection worker count and some docs explaining what this knob buys and costs, nudging the user to either keep it 0 or dial it up to at least 2.
12 daysAdd test for new config paramsDirk Engling
12 daysAdd config parsers for multiple tcp socket readers and a helper to see if we can offer it on the platformDirk Engling
12 daysIntroduce a fast path assuming that a tcp connection's payload already has arrived at accept timeDirk Engling
12 daysFix idle tests in presence of an accept filterDirk Engling
12 daysFix expiry tests under the new accept filtersDirk Engling
12 daysDefer accepts until some data actually is thereDirk Engling
13 daysReduce syscalls and add helper to count themDirk Engling
13 daysAdd an http load generatorDirk Engling
13 daysCheck for free port in the udp integration test, also speed it up by a bitDirk Engling
13 daysConsolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connectionsDirk Engling
14 daysadd wake-up tester that helped figuring out how to tickle hanging udp readersDirk Engling
14 daysRevert last wake-up experiment. Having each udp worker wake up once a second to check if the tracker stops is wastefulDirk Engling
14 daysFix a test that would over-report success rate when losing the race for cycles to the test targetDirk Engling
14 daysWith more workers blockingly waiting on udp sockets, we need to keep track of all sockets to shut them down on exitDirk Engling
14 daysLet the load tester log losses to better gauge performanceDirk Engling
14 daysAdd load tests to sanitize check the trackerlogic, based on udp requestsDirk Engling
2026-10-27The main event loop(s) now also catch an EINTR and return instead of blockingDirk Engling
2026-10-27Add concurrency testDirk Engling
2026-10-27All OSes now do have a cheap monotonic clock, so no caching thread is needed. Also add some relative time helpersDirk Engling
2026-10-27Add test for the revived keep aliveDirk Engling
2026-10-27Fix some tests to match retired stats modes and wrong config file orderingDirk Engling
2026-10-27Add test for the correct order of partial scrapesDirk Engling
2026-10-27Add test for the error packet when a hash is blacklisted (the part I forgot in last commit)Dirk Engling
2026-10-27Add test for the error packet when a hash is blacklistedDirk Engling
2026-10-27Add new test for connection keep aliveDirk Engling
2026-10-27retrieve the address of the sending socket for comparison. In jails it might be forced to its primary addressDirk Engling
2026-10-27Adding the actual tests to do aforementioned 'Massively increase coverage by pulling fullscrapes and sending udp packets'Dirk Engling
2026-10-27Massively increase coverage by pulling fullscrapes and sending udp packetsDirk Engling
2026-10-27add more checkers to the sanitizer and integration check runsDirk Engling
2026-10-26Avoid an UB of adding NULL + 0 by keeping an offset instead of advancing the pointer into a vector structDirk Engling
2026-10-26Add integration test and its runnerDirk Engling
2026-10-26replace all calls to sprintf with a format helper that advances a cursor. Also convert the meta-formatter (i.e. results printer) to this schemeDirk Engling
2026-10-26Replace libowfat's event waiter with our own abstractionDirk Engling
It's with a heavy heart that I remove libowfat as my event library from opentracker. libowfat is what taught opentracker to walk and then fly. The tracker was literally standing on the shoulder of giants when I started writing it in 2006. For its time, the event abstraction was unparalleled and it has held up for many years, and it served the bittorrent community greatly. https://erdgeist.org/gitweb/opentracker/commit/?id=ad472597c569568bad0526d116b601dfcb36638c Unfortunately, it is very likely that libowfat will not be maintained anymore for the foreseeable future, it is already not easy to get its source from upstream and opentracker started receiving bug reports that I can not reasonably answer or patch. Before the project gets more dependent on the limitations of libowfat's current state, I need to teach opentracker to stand on its own feet and fly by itself. I've learned a great deal in the process and have even more respect now for what libowfat pioneered. The path for opentracker is cleared now. Ground work has already been laid in the migration process to support multi threaded http processing while keeping the aggressive reduction of syscalls alive that made the libowfat+opentracker combo so scalable. Here be some dragons, though: Even though there is a unit test suite now, the event loop's rewrite has not been battle tested yet. So you might want to hold up for a bit before jumping on the solo band wagon. What awaits at the end will be a long overdue v1.0, which will be named in honour of Felix.
2026-10-26Add poll/epoll/kqueue wrapper to wait for eventsDirk Engling