diff --git a/.github/workflows/test-devel.yml b/.github/workflows/test-devel.yml index b3c82c4..fb936ea 100644 --- a/.github/workflows/test-devel.yml +++ b/.github/workflows/test-devel.yml @@ -380,6 +380,7 @@ jobs: - test-inspircd-anope - test-ircu2 - test-limnoria + - test-nefarious - test-ngircd - test-ngircd-anope - test-ngircd-atheme @@ -728,6 +729,43 @@ jobs: with: name: pytest-results_limnoria_devel path: pytest.xml + test-nefarious: + needs: [] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Checkout nefarious + uses: actions/checkout@v2 + with: + path: nefarious + ref: master + repository: evilnet/nefarious2 + - name: Build nefarious + run: | + cd $GITHUB_WORKSPACE/nefarious + ./configure --prefix=$HOME/.local/ --enable-debug + make -j 4 + make install + cp $GITHUB_WORKSPACE/data/nefarious/* $HOME/.local/lib + - name: Install Atheme + run: sudo apt-get install atheme-services + - name: Install irctest dependencies + run: |- + python -m pip install --upgrade pip + pip install pytest pytest-xdist -r requirements.txt + - name: Test with pytest + run: PYTEST_ARGS='--junit-xml pytest.xml' PATH=$HOME/.local/bin:$PATH make + nefarious + - if: always() + name: Publish results + uses: actions/upload-artifact@v2 + with: + name: pytest-results_nefarious_devel + path: pytest.xml test-ngircd: needs: - build-ngircd diff --git a/.github/workflows/test-stable.yml b/.github/workflows/test-stable.yml index 02989aa..4067f3b 100644 --- a/.github/workflows/test-stable.yml +++ b/.github/workflows/test-stable.yml @@ -423,6 +423,7 @@ jobs: - test-irc2 - test-ircu2 - test-limnoria + - test-nefarious - test-ngircd - test-ngircd-anope - test-ngircd-atheme @@ -888,6 +889,43 @@ jobs: with: name: pytest-results_limnoria_stable path: pytest.xml + test-nefarious: + needs: [] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Checkout nefarious + uses: actions/checkout@v2 + with: + path: nefarious + ref: 985704168ecada12d9e53b46df6087ef9d9fb40b + repository: evilnet/nefarious2 + - name: Build nefarious + run: | + cd $GITHUB_WORKSPACE/nefarious + ./configure --prefix=$HOME/.local/ --enable-debug + make -j 4 + make install + cp $GITHUB_WORKSPACE/data/nefarious/* $HOME/.local/lib + - name: Install Atheme + run: sudo apt-get install atheme-services + - name: Install irctest dependencies + run: |- + python -m pip install --upgrade pip + pip install pytest pytest-xdist -r requirements.txt + - name: Test with pytest + run: PYTEST_ARGS='--junit-xml pytest.xml' PATH=$HOME/.local/bin:$PATH make + nefarious + - if: always() + name: Publish results + uses: actions/upload-artifact@v2 + with: + name: pytest-results_nefarious_stable + path: pytest.xml test-ngircd: needs: - build-ngircd diff --git a/Makefile b/Makefile index c0d9bc7..a2d7dd2 100644 --- a/Makefile +++ b/Makefile @@ -91,6 +91,20 @@ IRCU2_SELECTORS := \ and not testWhowasCountZero \ $(EXTRA_SELECTORS) +# same justification as ircu2 +# lusers "unregistered" tests fail because Nefarious doesn't seem to distinguish unregistered users from normal ones +NEFARIOUS_SELECTORS := \ + not Ergo \ + and not deprecated \ + and not strict \ + and not buffering \ + and not testQuit \ + and not (lusers and unregistered) \ + and not statusmsg \ + and not (testKeyValidation and empty) \ + and not testEmptyRealname \ + $(EXTRA_SELECTORS) + # same justification as ircu2 SNIRCD_SELECTORS := \ not Ergo \ @@ -196,9 +210,9 @@ UNREALIRCD_SELECTORS := \ and not HelpTestCase \ $(EXTRA_SELECTORS) -.PHONY: all flakes bahamut charybdis ergo inspircd ircu2 snircd irc2 mammon limnoria sopel solanum unrealircd +.PHONY: all flakes bahamut charybdis ergo inspircd ircu2 snircd irc2 mammon nefarious limnoria sopel solanum unrealircd -all: flakes bahamut charybdis ergo inspircd ircu2 snircd irc2 mammon limnoria sopel solanum unrealircd +all: flakes bahamut charybdis ergo inspircd ircu2 snircd irc2 mammon nefarious limnoria sopel solanum unrealircd flakes: find irctest/ -name "*.py" -not -path "irctest/scram/*" -print0 | xargs -0 pyflakes3 @@ -270,6 +284,13 @@ ircu2: -n 10 \ -k '$(IRCU2_SELECTORS)' +nefarious: + $(PYTEST) $(PYTEST_ARGS) \ + --controller=irctest.controllers.nefarious \ + -m 'not services' \ + -n 10 \ + -k '$(NEFARIOUS_SELECTORS)' + snircd: $(PYTEST) $(PYTEST_ARGS) \ --controller=irctest.controllers.snircd \ diff --git a/data/nefarious/ircd.pem b/data/nefarious/ircd.pem new file mode 100644 index 0000000..7f59f3d --- /dev/null +++ b/data/nefarious/ircd.pem @@ -0,0 +1,83 @@ +-----BEGIN PRIVATE KEY----- +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 +FnMesy4thDMH/MhUfRtbylZTq45gtvCA +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIUYHD08+9S32VTD9IEsr2Oe1dH3VEwDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMjA0MDQxODE2NTZaFw0yMzA0 +MDQxODE2NTZaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw +HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDT0URxi7/l7ZGetkPv9Yh8h2s9BpbAR4Wq8sakgqET +Wg/nE/JQM5dPxroVbtZWWQXuJEFsgBKbASLa/eg5cyJv4Uu5WIZpG1LxdPEEIOSM +WjzoAGwoLxbTRGrS7qNXsknB9RwDuq8lPQiKkiAahg1Cn1vRrQ4cRrG+AkQWpRHJ +EDoLjCSo8IcAsKAZlw/eGtAcmeNvkr5AujEwXjIwx2FoDyKaNGRH5Z7gLWvCKBNx +QuJuMTzh8guLqdGbE4hH3rqyICbW5DGPaOZLLErWuJ7kEhLZG2HDW5JaXOr0QfFY +AA8pl9/qCuFMdoxRUKRcYBoxoMmz6dlsmipN7vIj+TT6TemwcAT25pwMJIVS4WC4 ++BZilNH2eWKD9hZA8Kq7FDPu+1rxOJaLbE/bvpK8jZeRdqFzE1eBCgPkw8D8V0r7 +J18d+DsmgOe2kRycaia/t9M4rhqe0FXjX1X1lzQ52grxgc28Ejd1fGQXIJmdTh4B +qKqTzxup0izS7dgFP1Ezm6Z4O+wklpL5uQF2Ex4X6QEj76iCxH+J/01/cvbxMe3i +uGXECbO/y1FIrg7FKzZSrQo4aP63lS7Y7aq0t2t6kOS83ebhnpgHClgFs8/C3ayz +YBBtbK63PYthwO8Rt6WamCIZFF5tA3XoI4AkfZcWD18loZai+QznVzbLNINf++rT +wwIDAQABo1MwUTAdBgNVHQ4EFgQU+9eHi2eqy0f3fDS0GjqkijGDDocwHwYDVR0j +BBgwFoAU+9eHi2eqy0f3fDS0GjqkijGDDocwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQsFAAOCAgEAAJXO3qUc/PW75pI2dt1cKv20VqozkfEf7P0eeVisCDxn +1p3QhVgI2lEe9kzdHp7t42g5xLkUhQEVmBcKm9xbl+k2D1X0+T8px1x6ZiWfbhXL +ptc/qCIXjPCgVN3s+Kasii3hHkZxKGZz/ySmBmfDJZjQZtbZzQWpvvX6SD4s7sjo +gWbZW3qvQ0bFTGdD1IjKYGaxK6aSrNkAIutiAX4RczJ1QSwb9Z2EIen+ABAvOZS9 +xv3LiiidWcuOT7WzXEa4QvOslCEkAF+jj6mGYB7NWtly0kj4AEPvI4IoYTi9dohS +CA0zd1DTfjRwpAnT5P4sj4mpjLyRBumeeVGpCZhUxfKpFjIB2AnlgxrU+LPq5c9R +ZZ9Q5oeLxjRPjpqBeWwgnbjXstQCL9g0U7SsEemsv+zmvG5COhAmG5Wce/65ILlg +450H4bcn1ul0xvxz9hat6tqEZry3HcNE/CGDT+tXuhHpqOXkY1/c78C0QbWjWodR +tCvlXW00a+7TlEhNr4XBNdqtIQfYS9K9yiVVNfZLPEsN/SA3BGXmrr+du1/E4Ria +CkVpmBdJsVu5eMaUj1arsCqI4fwHzljtojJe/pCzZBVkOaSWQEQ+LL4iVnMas68m +qyshtNf4KNiM55OQmyTiFHMTIxCtdEcHaR3mUxR7GrIhc/bxyxUUBtMAuUX0Kjs= +-----END CERTIFICATE----- diff --git a/irctest/controllers/ircu2.py b/irctest/controllers/ircu2.py index 592cfd2..9b0d4bd 100644 --- a/irctest/controllers/ircu2.py +++ b/irctest/controllers/ircu2.py @@ -51,6 +51,7 @@ features {{ class Ircu2Controller(BaseServerController, DirectoryBasedController): + software_name = "Ircu2" supports_sts = False extban_mute_char = None diff --git a/irctest/controllers/nefarious.py b/irctest/controllers/nefarious.py new file mode 100644 index 0000000..379039d --- /dev/null +++ b/irctest/controllers/nefarious.py @@ -0,0 +1,11 @@ +from typing import Type + +from .ircu2 import Ircu2Controller + + +class NefariousController(Ircu2Controller): + software_name = "Nefarious" + + +def get_irctest_controller_class() -> Type[NefariousController]: + return NefariousController diff --git a/workflows.yml b/workflows.yml index 6b19581..aea95da 100644 --- a/workflows.yml +++ b/workflows.yml @@ -204,6 +204,23 @@ software: make -j 4 make install + nefarious: + name: nefarious + repository: evilnet/nefarious2 + refs: + stable: "985704168ecada12d9e53b46df6087ef9d9fb40b" + release: null + devel: "master" + devel_release: null + path: nefarious + separate_build_job: false + build_script: | + cd $GITHUB_WORKSPACE/nefarious + ./configure --prefix=$HOME/.local/ --enable-debug + make -j 4 + make install + cp $GITHUB_WORKSPACE/data/nefarious/* $HOME/.local/lib + ngircd: name: ngircd repository: ngircd/ngircd @@ -358,16 +375,19 @@ tests: plexus4: software: [plexus4, anope] - # doesn't build because it can't find liblex for some reason - #snircd: - # software: [snircd] - irc2: software: [irc2] ircu2: software: [ircu2] + nefarious: + software: [nefarious] + + # doesn't build because it can't find liblex for some reason + #snircd: + # software: [snircd] + unrealircd-5: software: [unrealircd-5]