mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-23 08:12:08 +00:00
This patch is an almost complete rewrite of the test/scylla-gdb framework for testing Scylla's gdb commands. The goals of this rewrite are described in issue #9864. In short, the goals are: 1. Use pytest to define individual test cases instead one long Python script. This will make it easier to add more tests, to run only individual tests (e.g., test/scylla-gdb/run somefile.py::sometest), to understand which test failed when it fails - and a lot of other pytest conveniences. 2. Instead of an ad-hoc shell script to run Scylla, gdb, and the test, use the same Python code which is used in other test suites (alternator, cql-pytest, redis, and more). The resulting handling of the temporary resources (processes, directories, IP address) is more robust, and interrupting test/scylla-gdb/run will correctly kill its child processes (both Scylla and gdb). All existing gdb tests (except one - more on this below...) were easily rewritten in the new framework. The biggest change in this patch is who starts what. Before this patch, "run" starts gdb, which in turn starts Scylla, stops it on a breakpoint, and then runs various tests. After this patch, "run" starts Scylla on its own (like it does in test/cql-pytest/run, et al.), and then gdb runs pytest - and in a pytest fixture attaches to the running Scylla process. The biggest benefit of this approach is that "run" is aware of both gdb and Scylla, and can kill both with abruptly with SIGKILL to end the test. But there's also a downside to this change: One of the tests (of "scylla fiber") needs access to some task object. Before this patch, Scylla was stopped on a breakpoint, and a task was available at that point. After this patch, we attach gdb to an idle Scylla, and the test cannot find any task to use. So the test_fiber() test fails for now. One way we could perhaps fix it is to add a breakpoint and "continue" Scylla a bit more after attaching to it. However, I could find the right breakpoint - and we may also need to send a request to Scylla to get it to reach that breakpoint. I'm still looking for a better way to have access to some "task" object we can test on. Fixes #9864. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20220102221534.1096659-1-nyh@scylladb.com>