{"id":18083147,"url":"https://github.com/progval/irctest","last_synced_at":"2025-04-12T17:13:25.840Z","repository":{"id":3034819,"uuid":"48244997","full_name":"progval/irctest","owner":"progval","description":"Semi-automated conformance checking for IRC implementations (RFC1459/RFC2812, the \"modern spec\" by ircdocs, and IRCv3)","archived":false,"fork":false,"pushed_at":"2025-03-29T19:27:53.000Z","size":1172,"stargazers_count":42,"open_issues_count":16,"forks_count":12,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-12T17:13:21.768Z","etag":null,"topics":["charybdis","ergo","girc","inspircd","irc","irc-protocol","ircv3","limnoria","mammon","rfc","sopel","specification","supybot","test-suite","testing","testing-tools","unrealircd"],"latest_commit_sha":null,"homepage":"https://dashboard.irctest.limnoria.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/progval.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-12-18T16:26:55.000Z","updated_at":"2025-03-27T09:19:07.000Z","dependencies_parsed_at":"2023-02-12T14:02:21.871Z","dependency_job_id":"f5d52570-c99e-4a65-9309-4093bbdd7bf0","html_url":"https://github.com/progval/irctest","commit_stats":{"total_commits":652,"total_committers":8,"mean_commits":81.5,"dds":0.5352760736196319,"last_synced_commit":"136a7923c09d3cea3ab13f5dfe042d011a5b9615"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progval%2Firctest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progval%2Firctest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progval%2Firctest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progval%2Firctest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/progval","download_url":"https://codeload.github.com/progval/irctest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248602312,"owners_count":21131616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["charybdis","ergo","girc","inspircd","irc","irc-protocol","ircv3","limnoria","mammon","rfc","sopel","specification","supybot","test-suite","testing","testing-tools","unrealircd"],"created_at":"2024-10-31T14:07:03.438Z","updated_at":"2025-04-12T17:13:25.820Z","avatar_url":"https://github.com/progval.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# irctest\n\nThis project aims at testing interoperability of software using the\nIRC protocol, by running them against common test suites.\n\nIt is also used while editing [the \"Modern\" specification](https://modern.ircdocs.horse/)\nto check behavior of a large selection of servers at once.\n\n## The big picture\n\nThis project contains:\n\n* IRC protocol test cases, primarily checking conformance to\n  [the \"Modern\" specification](https://modern.ircdocs.horse/) and\n  [IRCv3 extensions](https://ircv3.net/irc/), but also\n  [RFC 1459](https://datatracker.ietf.org/doc/html/rfc1459) and\n  [RFC 2812](https://datatracker.ietf.org/doc/html/rfc2812).\n  Most of them are for servers but also some for clients.\n  Only the client-server protocol is tested; server-server protocols are out of scope.\n* Small wrappers around existing software to run tests on them.\n  So far this is restricted to headless software (servers, service packages,\n  and clients bots).\n\nWrappers run software in temporary directories, so running `irctest` should\nhave no side effect.\n\nTest results for the latest version of each supported software, and respective logs,\nare [published daily](https://dashboard.irctest.limnoria.net/).\n\n## Prerequisites\n\nInstall irctest and dependencies:\n\n```\nsudo apt install faketime  # Optional, but greatly speeds up irctest/server_tests/list.py\ncd ~\ngit clone https://github.com/progval/irctest.git\ncd irctest\npip3 install --user -r requirements.txt\n```\n\nAdd `~/.local/bin/` (and/or `~/go/bin/` for Ergo)\nto your `PATH` if it is not.\n\n```\nexport PATH=$HOME/.local/bin/:$HOME/go/bin/:$PATH\n```\n\n## Using pytest\n\nirctest is invoked using the pytest test runner / CLI.\n\nYou can usually invoke it with `python3 -m pytest` command; which can often\nbe called by the `pytest` or `pytest-3` commands (if not, alias them if you\nare planning to use them often).\n\nAfter installing `pytest-xdist`, you can also pass `pytest` the `-n 10` option\nto run `10` tests in parallel.\n\nThe rest of this README assumes `pytest` works.\n\n## Test selection\n\nA major feature of pytest that irctest heavily relies on is test selection.\nUsing the `-k` option, you can select and deselect tests based on their names\nFor example, you can run `LUSERS`-related tests with `-k lusers`.\n\nUsing the `-m` option, you can select and deselect and them based on their markers\n(listed in `pytest.ini`).\nFor example, you can run only tests based on RFC1459 with `-m rfc1459`.\n\nBy default, all tests run; even niche ones. So you probably always want to\nuse these options: `-m 'not Ergo and not deprecated and not strict`.\nThis excludes:\n\n* `Ergo`-specific tests (included as Ergo uses irctest as its official\n  integration test suite)\n* tests for deprecated specifications, such as the IRCv3 METADATA\n  specification\n* tests that check for a strict interpretation of a specification, when\n  the specification is ambiguous.\n\n## Running tests\n\nThis list is non-exhaustive, see `workflows.yml` for software not listed here.\nIf software you want to test is not listed their either, please open an issue\nor pull request to add support for it.\n\n### Servers\n\n#### Ergo:\n\n```\ncd /tmp/\ngit clone https://github.com/ergochat/ergo.git\ncd ergo/\nmake install\ncd ~/irctest\npytest --controller irctest.controllers.ergo -k 'not deprecated'\n```\n\n#### Solanum:\n\n```\ncd /tmp/\ngit clone https://github.com/solanum-ircd/solanum.git\ncd solanum\n./autogen.sh\n./configure --prefix=$HOME/.local/\nmake -j 4\nmake install\npytest --controller irctest.controllers.solanum -k 'not Ergo and not deprecated and not strict'\n```\n\n#### InspIRCd:\n\n```\ncd /tmp/\ngit clone https://github.com/inspircd/inspircd.git\ncd inspircd\n\n# Optional, makes tests run considerably faster. Pick one depending on the InspIRCd version:\n# on Insp3 \u003c= 3.16.0 and Insp4 \u003c= 4.0.0a21:\npatch src/inspircd.cpp \u003c ~/irctest/patches/inspircd_mainloop.patch\n# on Insp3 \u003e= 3.17.0 and Insp4 \u003e= 4.0.0a22:\nexport CXXFLAGS=-DINSPIRCD_UNLIMITED_MAINLOOP\n\n./configure --prefix=$HOME/.local/ --development\nmake -j 4\nmake install\ncd ~/irctest\npytest --controller irctest.controllers.inspircd -k 'not Ergo and not deprecated and not strict'\n```\n\n#### UnrealIRCd:\n\n```\ncd /tmp/\ngit clone https://github.com/unrealircd/unrealircd.git\ncd unrealircd\n./Config  # This will ask a few questions, answer them.\nmake -j 4\nmake install\ncd ~/irctest\npytest --controller irctest.controllers.unreal -k 'not Ergo and not deprecated and not strict'\n```\n\n\n### Servers with services\n\nBesides Ergo (that has built-in services) and Sable (that ships its own services),\nmost server controllers can optionally run service packages.\n\n#### Atheme:\n\nYou can install it with\n\n```\nsudo apt install atheme-services\n```\n\nand add this to the `pytest` call:\n\n```\n--services-controller irctest.controllers.atheme_services\n```\n\n#### Anope:\n\nBuild with:\n\n```\ncd /tmp/\ngit clone https://github.com/anope/anope.git\ncd anope\n./Config  # This will ask a few questions, answer them.\nmake -C build -j 4\nmake -C build install\n```\n\nand add this to the `pytest` call:\n\n```\n--services-controller irctest.controllers.anope_services\n```\n\n\n### Clients\n\n#### Limnoria:\n\n```\npip3 install --user limnoria pyxmpp2-scram\ncd ~/irctest\npytest --controller  irctest.controllers.limnoria\n```\n\n#### Sopel:\n\n```\npip3 install --user sopel\nmkdir ~/.sopel/\ncd ~/irctest\npytest --controller irctest.controllers.sopel\n```\n\n## What `irctest` is not\n\nA formal proof that a given software follows any of the IRC specification,\nor anything near that.\n\nAt best, `irctest` can help you find issues in your software, but it may\nstill have false positives (because it does not implement itself a\nfull-featured client/server, so it supports only “usual” behavior).\nBug reports for false positives are welcome.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogval%2Firctest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprogval%2Firctest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogval%2Firctest/lists"}