3 Commits

29 changed files with 163 additions and 470 deletions

View File

@ -453,9 +453,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut
timeout-minutes: 30
@ -494,9 +492,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut-anope
timeout-minutes: 30
@ -529,9 +525,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut-atheme
timeout-minutes: 30
@ -571,9 +565,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/go/sbin:~/go/bin:~/go:$PATH
make ergo
timeout-minutes: 30
@ -612,9 +604,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
hybrid
timeout-minutes: 30
@ -647,9 +637,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH
make inspircd
timeout-minutes: 30
@ -688,9 +676,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH make
inspircd-anope
timeout-minutes: 30
@ -729,9 +715,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
ircu2
timeout-minutes: 30
@ -759,9 +743,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
limnoria
timeout-minutes: 30
@ -799,9 +781,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
nefarious
timeout-minutes: 30
@ -834,9 +814,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH
make ngircd
timeout-minutes: 30
@ -875,9 +853,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH make
ngircd-anope
timeout-minutes: 30
@ -910,9 +886,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH
make ngircd-atheme
timeout-minutes: 30
@ -951,9 +925,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
plexus4
timeout-minutes: 30
@ -1000,9 +972,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=$GITHUB_WORKSPACE/sable/target/debug/sbin:$GITHUB_WORKSPACE/sable/target/debug/bin:$GITHUB_WORKSPACE/sable/target/debug:$PATH
make sable
timeout-minutes: 30
@ -1035,9 +1005,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
solanum
timeout-minutes: 30
@ -1064,9 +1032,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
sopel
timeout-minutes: 30
@ -1104,9 +1070,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
thelounge
timeout-minutes: 30
@ -1139,9 +1103,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd
timeout-minutes: 30
@ -1174,9 +1136,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd-5
timeout-minutes: 30
@ -1215,9 +1175,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH make
unrealircd-anope
timeout-minutes: 30
@ -1250,9 +1208,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd-atheme
timeout-minutes: 30
@ -1296,9 +1252,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
IRCTEST_DLK_PATH="${{ github.workspace }}/Dlk-Services" IRCTEST_WP_CLI_PATH="${{
github.workspace }}/wp-cli.phar" IRCTEST_WP_ZIP_PATH="${{ github.workspace

View File

@ -126,9 +126,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH
make inspircd
timeout-minutes: 30
@ -167,9 +165,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH make
inspircd-anope
timeout-minutes: 30
@ -202,9 +198,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH
make inspircd-atheme
timeout-minutes: 30

View File

@ -189,7 +189,7 @@ jobs:
uses: actions/checkout@v4
with:
path: inspircd
ref: v3.17.1
ref: v3.17.0
repository: inspircd/inspircd
- name: Build InspIRCd
run: |
@ -228,7 +228,7 @@ jobs:
uses: actions/checkout@v4
with:
path: ngircd
ref: acf8409c60ccc96beed0a1f990c4f9374823c0ce
ref: 3e3f6cbeceefd9357b53b27c2386bb39306ab353
repository: ngircd/ngircd
- name: Build ngircd
run: |
@ -351,7 +351,7 @@ jobs:
uses: actions/checkout@v4
with:
path: unrealircd
ref: a68625454078641ce984eeb197f7e02b1857ab6c
ref: da3c1c654481a33035b9c703957e1c25d0158259
repository: unrealircd/unrealircd
- name: Build UnrealIRCd 6
run: |
@ -496,9 +496,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut
timeout-minutes: 30
@ -537,9 +535,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut-anope
timeout-minutes: 30
@ -572,9 +568,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
bahamut-atheme
timeout-minutes: 30
@ -607,9 +601,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
charybdis
timeout-minutes: 30
@ -649,9 +641,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/go/sbin:~/go/bin:~/go:$PATH
make ergo
timeout-minutes: 30
@ -690,9 +680,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
hybrid
timeout-minutes: 30
@ -725,9 +713,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH
make inspircd
timeout-minutes: 30
@ -766,9 +752,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH make
inspircd-anope
timeout-minutes: 30
@ -801,9 +785,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/inspircd/sbin:~/.local/inspircd/bin:~/.local/inspircd:$PATH
make inspircd-atheme
timeout-minutes: 30
@ -853,9 +835,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
irc2
timeout-minutes: 30
@ -894,9 +874,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
ircu2
timeout-minutes: 30
@ -923,9 +901,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
limnoria
timeout-minutes: 30
@ -963,9 +939,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
nefarious
timeout-minutes: 30
@ -998,9 +972,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH
make ngircd
timeout-minutes: 30
@ -1039,9 +1011,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH make
ngircd-anope
timeout-minutes: 30
@ -1074,9 +1044,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local//sbin:~/.local//bin:~/.local/:$PATH
make ngircd-atheme
timeout-minutes: 30
@ -1115,9 +1083,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
plexus4
timeout-minutes: 30
@ -1164,9 +1130,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=$GITHUB_WORKSPACE/sable/target/debug/sbin:$GITHUB_WORKSPACE/sable/target/debug/bin:$GITHUB_WORKSPACE/sable/target/debug:$PATH
make sable
timeout-minutes: 30
@ -1199,9 +1163,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
solanum
timeout-minutes: 30
@ -1228,9 +1190,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
sopel
timeout-minutes: 30
@ -1268,9 +1228,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH make
thelounge
timeout-minutes: 30
@ -1303,9 +1261,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd
timeout-minutes: 30
@ -1338,9 +1294,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd-5
timeout-minutes: 30
@ -1379,9 +1333,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH make
unrealircd-anope
timeout-minutes: 30
@ -1414,9 +1366,7 @@ jobs:
run: |-
python -m pip install --upgrade pip
pip install pytest pytest-xdist pytest-timeout -r requirements.txt
- env:
IRCTEST_DEBUG_LOGS: ${{ runner.debug }}
name: Test with pytest
- name: Test with pytest
run: PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' PATH=$HOME/.local/bin:$PATH PATH=~/.local/unrealircd/sbin:~/.local/unrealircd/bin:~/.local/unrealircd:$PATH
make unrealircd-atheme
timeout-minutes: 30

View File

@ -11,20 +11,7 @@ import subprocess
import tempfile
import textwrap
import time
from typing import (
IO,
Any,
Callable,
Dict,
Iterator,
List,
Optional,
Sequence,
Set,
Tuple,
Type,
Union,
)
from typing import IO, Any, Callable, Dict, Iterator, List, Optional, Set, Tuple, Type
import irctest
@ -87,7 +74,6 @@ class _BaseController:
_port_lock = FileLock(Path(tempfile.gettempdir()) / "irctest_ports.json.lock")
def __init__(self, test_config: TestCaseControllerConfig):
self.debug_mode = os.getenv("IRCTEST_DEBUG_LOGS", "0").lower() in ("true", "1")
self.test_config = test_config
self.proc = None
self._own_ports: Set[Tuple[str, int]] = set()
@ -144,12 +130,6 @@ class _BaseController:
used_ports.remove((hostname, port))
self._own_ports.remove((hostname, port))
def execute(
self, command: Sequence[Union[str, Path]], **kwargs: Any
) -> subprocess.Popen:
output_to = None if self.debug_mode else subprocess.DEVNULL
return subprocess.Popen(command, stderr=output_to, stdout=output_to, **kwargs)
class DirectoryBasedController(_BaseController):
"""Helper for controllers whose software configuration is based on an

View File

@ -136,19 +136,16 @@ class AnopeController(BaseServicesController, DirectoryBasedController):
Path(services_path).parent.parent / "modules"
)
extra_args = []
if self.debug_mode:
extra_args.append("--debug")
self.proc = self.execute(
self.proc = subprocess.Popen(
[
"anope",
"--config=services.conf", # can't be an absolute path in 2.0
"--nofork", # don't fork
"--nopid", # don't write a pid
*extra_args,
],
cwd=self.directory,
# stdout=subprocess.DEVNULL,
# stderr=subprocess.DEVNULL,
)

View File

@ -1,3 +1,4 @@
import subprocess
from typing import Optional, Type
import irctest
@ -74,7 +75,7 @@ class AthemeController(BaseServicesController, DirectoryBasedController):
)
assert self.directory
self.proc = self.execute(
self.proc = subprocess.Popen(
[
"atheme-services",
"-n", # don't fork
@ -87,6 +88,8 @@ class AthemeController(BaseServicesController, DirectoryBasedController):
"-D",
self.directory,
],
# stdout=subprocess.DEVNULL,
# stderr=subprocess.DEVNULL,
)
def registerUser(

View File

@ -1,5 +1,6 @@
from pathlib import Path
import shutil
import subprocess
from typing import Optional, Set, Type
from irctest.basecontrollers import BaseServerController, DirectoryBasedController
@ -149,7 +150,7 @@ class BahamutController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"ircd",

View File

@ -1,5 +1,5 @@
from pathlib import Path
import shutil
import subprocess
from typing import Optional
from irctest.basecontrollers import BaseServerController, DirectoryBasedController
@ -51,8 +51,6 @@ class BaseHybridController(BaseServerController, DirectoryBasedController):
)
else:
ssl_config = ""
binary_path = shutil.which(self.binary_name)
assert binary_path, f"Could not find '{binary_path}' executable"
with self.open_file("server.conf") as fd:
fd.write(
(self.template_config).format(
@ -62,7 +60,6 @@ class BaseHybridController(BaseServerController, DirectoryBasedController):
services_port=services_port,
password_field=password_field,
ssl_config=ssl_config,
install_prefix=Path(binary_path).parent.parent,
)
)
assert self.directory
@ -73,7 +70,7 @@ class BaseHybridController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
self.binary_name,
@ -83,6 +80,7 @@ class BaseHybridController(BaseServerController, DirectoryBasedController):
"-pidfile",
self.directory / "server.pid",
],
# stderr=subprocess.DEVNULL,
)
if run_services:

View File

@ -200,7 +200,7 @@ class DlkController(BaseServicesController, DirectoryBasedController):
fd.write(TEMPLATE_DLK_WP_CONFIG.format(**template_vars))
(dlk_conf_dir / "modules.conf").symlink_to(self.dlk_path / "conf/modules.conf")
self.proc = self.execute(
self.proc = subprocess.Popen(
[
"php",
"src/dalek",

View File

@ -213,7 +213,7 @@ class ErgoController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[*faketime_cmd, "ergo", "run", "--conf", self._config_path, "--quiet"]
)

View File

@ -1,3 +1,4 @@
import subprocess
from typing import Optional, Type
from irctest import authentication, tls
@ -30,7 +31,7 @@ class GircController(BaseClientController, DirectoryBasedController):
args += ["--sasl-fail-is-ok"]
# Runs a client with the config given as arguments
self.proc = self.execute(["girc_test", "connect"] + args)
self.proc = subprocess.Popen(["girc_test", "connect"] + args)
def get_irctest_controller_class() -> Type[GircController]:

View File

@ -3,9 +3,6 @@ from typing import Set, Type
from .base_hybrid import BaseHybridController
TEMPLATE_CONFIG = """
module_base_path = "{install_prefix}/lib/ircd-hybrid/modules";
.include "./reference.modules.conf"
serverinfo {{
name = "My.Little.Server";
sid = "42X";

View File

@ -101,7 +101,7 @@ TEMPLATE_V4_CONFIG = """
# HELP/HELPOP
<module name="help">
<include file="examples/help.example.conf">
<include file="examples/help.conf.example">
"""
@ -182,22 +182,15 @@ class InspircdController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
extra_args = []
if self.debug_mode:
if installed_version() >= 4:
extra_args.append("--protocoldebug")
else:
extra_args.append("--debug")
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"inspircd",
"--nofork",
"--config",
self.directory / "server.conf",
*extra_args,
],
stdout=subprocess.DEVNULL,
)
if run_services:

View File

@ -1,4 +1,5 @@
import shutil
import subprocess
from typing import Optional, Type
from irctest.basecontrollers import (
@ -77,7 +78,7 @@ class Irc2Controller(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"ircd",
@ -87,6 +88,7 @@ class Irc2Controller(BaseServerController, DirectoryBasedController):
"-f",
self.directory / "server.conf",
],
# stderr=subprocess.DEVNULL,
)

View File

@ -1,4 +1,5 @@
import shutil
import subprocess
from typing import Optional, Type
from irctest.basecontrollers import (
@ -96,7 +97,7 @@ class Ircu2Controller(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"ircd",
@ -106,6 +107,7 @@ class Ircu2Controller(BaseServerController, DirectoryBasedController):
"-x",
"DEBUG",
],
# stderr=subprocess.DEVNULL,
)

View File

@ -1,3 +1,4 @@
import subprocess
from typing import Optional, Type
from irctest import authentication, tls
@ -83,7 +84,7 @@ class LimnoriaController(BaseClientController, DirectoryBasedController):
)
)
assert self.directory
self.proc = self.execute(["supybot", self.directory / "bot.conf"])
self.proc = subprocess.Popen(["supybot", self.directory / "bot.conf"])
def get_irctest_controller_class() -> Type[LimnoriaController]:

View File

@ -1,4 +1,5 @@
import shutil
import subprocess
from typing import Optional, Set, Type
from irctest.basecontrollers import (
@ -115,7 +116,7 @@ class MammonController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"mammond",

View File

@ -1,4 +1,5 @@
import shutil
import subprocess
from typing import Optional, Set, Type
from irctest.basecontrollers import BaseServerController, DirectoryBasedController
@ -27,9 +28,6 @@ TEMPLATE_CONFIG = """
[Operator]
Name = operuser
Password = operpassword
[Limits]
MaxNickLength = 32 # defaults to 9
"""
@ -94,7 +92,7 @@ class NgircdController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"ngircd",
@ -102,6 +100,7 @@ class NgircdController(BaseServerController, DirectoryBasedController):
"--config",
self.directory / "server.conf",
],
# stdout=subprocess.DEVNULL,
)
if run_services:

View File

@ -394,7 +394,7 @@ class SableController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"sable_ircd",
@ -408,7 +408,6 @@ class SableController(BaseServerController, DirectoryBasedController):
],
cwd=self.directory,
preexec_fn=os.setsid,
env={"RUST_BACKTRACE": "1", **os.environ},
)
self.pgroup_id = os.getpgid(self.proc.pid)
@ -475,7 +474,7 @@ class SableServicesController(BaseServicesController):
with self.server_controller.open_file("configs/services.conf") as fd:
fd.write(SERVICES_CONFIG % self.server_controller.template_vars)
self.proc = self.execute(
self.proc = subprocess.Popen(
[
"sable_services",
"--foreground",
@ -486,7 +485,6 @@ class SableServicesController(BaseServicesController):
],
cwd=self.server_controller.directory,
preexec_fn=os.setsid,
env={"RUST_BACKTRACE": "1", **os.environ},
)
self.pgroup_id = os.getpgid(self.proc.pid)

View File

@ -1,4 +1,5 @@
import shutil
import subprocess
from typing import Optional, Type
from irctest.basecontrollers import (
@ -95,7 +96,7 @@ class SnircdController(BaseServerController, DirectoryBasedController):
else:
faketime_cmd = []
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"ircd",
@ -105,6 +106,7 @@ class SnircdController(BaseServerController, DirectoryBasedController):
"-x",
"DEBUG",
],
# stderr=subprocess.DEVNULL,
)

View File

@ -1,4 +1,5 @@
from pathlib import Path
import subprocess
import tempfile
from typing import Optional, TextIO, Type, cast
@ -72,7 +73,7 @@ class SopelController(BaseClientController):
auth_method="auth_method = sasl" if auth else "",
)
)
self.proc = self.execute(["sopel", "-c", self.filename])
self.proc = subprocess.Popen(["sopel", "-c", self.filename])
def get_irctest_controller_class() -> Type[SopelController]:

View File

@ -1,5 +1,6 @@
import json
import os
import subprocess
from typing import Optional, Type
from irctest import authentication, tls
@ -95,7 +96,7 @@ class TheLoungeController(BaseClientController, DirectoryBasedController):
)
with self.open_file("users/testuser.json", "r") as fd:
print("config", json.load(fd)["networks"][0]["saslPassword"])
self.proc = self.execute(
self.proc = subprocess.Popen(
[os.environ.get("THELOUNGE_BIN", "thelounge"), "start"],
env={**os.environ, "THELOUNGE_HOME": str(self.directory)},
)

View File

@ -261,7 +261,7 @@ class UnrealircdController(BaseServerController, DirectoryBasedController):
faketime_cmd = []
with _STARTSTOP_LOCK():
self.proc = self.execute(
self.proc = subprocess.Popen(
[
*faketime_cmd,
"unrealircd",
@ -270,6 +270,7 @@ class UnrealircdController(BaseServerController, DirectoryBasedController):
"-f",
self.directory / "unrealircd.conf",
],
# stdout=subprocess.DEVNULL,
)
self.wait_for_port()

View File

@ -7,14 +7,18 @@ and ban exception (`Modern <https://modern.ircdocs.horse/#exception-channel-mode
"""
from irctest import cases, runner
from irctest.numerics import ERR_BANNEDFROMCHAN, RPL_BANLIST, RPL_ENDOFBANLIST
from irctest.numerics import (
ERR_BANNEDFROMCHAN,
ERR_CANNOTSENDTOCHAN,
RPL_BANLIST,
RPL_ENDOFBANLIST,
)
from irctest.patma import ANYSTR, StrRe
class BanModeTestCase(cases.BaseServerTestCase):
@cases.mark_specifications("RFC1459", "RFC2812", "Modern")
def testBan(self):
"""Basic ban operation"""
def testBanJoin(self):
self.connectClient("chanop", name="chanop")
self.joinChannel("chanop", "#chan")
self.getMessages("chanop")
@ -32,6 +36,55 @@ class BanModeTestCase(cases.BaseServerTestCase):
self.sendLine("bar", "JOIN #chan")
self.assertMessageMatch(self.getMessage("bar"), command="JOIN")
@cases.mark_specifications("Modern")
def testBanPrivmsg(self):
"""
TODO: this checks the following quote is false:
"If `<target>` is a channel name and the client is [banned](#ban-channel-mode)
and not covered by a [ban exception](#ban-exception-channel-mode), the
message will not be delivered and the command will silently fail."
-- https://modern.ircdocs.horse/#privmsg-message
to check https://github.com/ircdocs/modern-irc/pull/201
"""
self.connectClient("chanop", name="chanop")
self.joinChannel("chanop", "#chan")
self.getMessages("chanop")
self.connectClient("Bar", name="bar")
self.getMessages("bar")
self.sendLine("bar", "JOIN #chan")
self.getMessages("bar")
self.getMessages("chanop")
self.sendLine("chanop", "MODE #chan +b bar!*@*")
self.assertMessageMatch(self.getMessage("chanop"), command="MODE")
self.getMessages("chanop")
self.getMessages("bar")
self.sendLine("bar", "PRIVMSG #chan :hello world")
self.assertMessageMatch(
self.getMessage("bar"),
command=ERR_CANNOTSENDTOCHAN,
params=["Bar", "#chan", ANYSTR],
)
self.assertEqual(self.getMessages("bar"), [])
self.assertEqual(self.getMessages("chanop"), [])
self.sendLine("chanop", "MODE #chan -b bar!*@*")
self.assertMessageMatch(self.getMessage("chanop"), command="MODE")
self.getMessages("chanop")
self.getMessages("bar")
self.sendLine("bar", "PRIVMSG #chan :hello again")
self.assertEqual(self.getMessages("bar"), [])
self.assertMessageMatch(
self.getMessage("chanop"),
command="PRIVMSG",
params=["#chan", "hello again"],
)
@cases.mark_specifications("Modern")
def testBanList(self):
"""`RPL_BANLIST <https://modern.ircdocs.horse/#rplbanlist-367>`_"""

View File

@ -1,67 +0,0 @@
from irctest import cases
from irctest.numerics import RPL_CHANNELCREATED, RPL_CHANNELMODEIS
from irctest.patma import ANYSTR, ListRemainder, StrRe
class RplChannelModeIsTestCase(cases.BaseServerTestCase):
@cases.mark_specifications("Modern")
def testChannelModeIs(self):
"""Test RPL_CHANNELMODEIS and RPL_CHANNELCREATED as responses to
`MODE #channel`:
<https://modern.ircdocs.horse/#rplcreationtime-329>
<https://modern.ircdocs.horse/#rplchannelmodeis-324>
"""
expected_numerics = {RPL_CHANNELMODEIS, RPL_CHANNELCREATED}
if self.controller.software_name in ("irc2", "Sable"):
# irc2 and Sable don't use timestamps for conflict resolution,
# consequently they don't store the channel creation timestamp
# and don't send RPL_CHANNELCREATED
expected_numerics = {RPL_CHANNELMODEIS}
self.connectClient("chanop", name="chanop")
self.joinChannel("chanop", "#chan")
# i, n, and t are specified by RFC1459; some of them may be on by default,
# but after this, at least those three should be enabled:
self.sendLine("chanop", "MODE #chan +int")
self.getMessages("chanop")
self.sendLine("chanop", "MODE #chan")
messages = self.getMessages("chanop")
self.assertEqual(expected_numerics, {msg.command for msg in messages})
for message in messages:
if message.command == RPL_CHANNELMODEIS:
# the final parameters are the mode string (e.g. `+int`),
# and then optionally any mode parameters (in case the ircd
# lists a mode that takes a parameter)
self.assertMessageMatch(
message,
command=RPL_CHANNELMODEIS,
params=["chanop", "#chan", ListRemainder(ANYSTR, min_length=1)],
)
final_param = message.params[2]
self.assertEqual(final_param[0], "+")
enabled_modes = list(final_param[1:])
break
self.assertLessEqual({"i", "n", "t"}, set(enabled_modes))
# remove all the modes listed by RPL_CHANNELMODEIS
self.sendLine("chanop", f"MODE #chan -{''.join(enabled_modes)}")
response = self.getMessage("chanop")
# we should get something like: MODE #chan -int
self.assertMessageMatch(
response, command="MODE", params=["#chan", StrRe("^-.*")]
)
self.assertEqual(set(response.params[1][1:]), set(enabled_modes))
self.sendLine("chanop", "MODE #chan")
messages = self.getMessages("chanop")
self.assertEqual(expected_numerics, {msg.command for msg in messages})
# all modes have been disabled; the correct representation of this is `+`
for message in messages:
if message.command == RPL_CHANNELMODEIS:
self.assertMessageMatch(
message,
command=RPL_CHANNELMODEIS,
params=["chanop", "#chan", "+"],
)

View File

@ -1,159 +0,0 @@
from irctest import cases
from irctest.numerics import (
ERR_CHANOPRIVSNEEDED,
ERR_NOSUCHCHANNEL,
ERR_NOSUCHNICK,
ERR_NOTONCHANNEL,
ERR_USERNOTINCHANNEL,
)
class ChannelOperatorModeTestCase(cases.BaseServerTestCase):
"""Test various error and success cases around the channel operator mode:
<https://modern.ircdocs.horse/#channel-operators>
<https://modern.ircdocs.horse/#mode-message>
"""
def setupNicks(self):
"""Set up a standard set of three nicknames and two channels
for testing channel-user MODE interactions."""
# first nick to join the channel is privileged:
self.connectClient("chanop", name="chanop")
self.joinChannel("chanop", "#chan")
self.connectClient("unprivileged", name="unprivileged")
self.joinChannel("unprivileged", "#chan")
self.getMessages("chanop")
self.connectClient("unrelated", name="unrelated")
self.joinChannel("unrelated", "#unrelated")
self.joinChannel("unprivileged", "#unrelated")
self.getMessages("unrelated")
@cases.mark_specifications("Modern")
@cases.xfailIfSoftware(["irc2"], "broken in irc2")
def testChannelOperatorModeSenderPrivsNeeded(self):
"""Test that +o from a channel member without the necessary privileges
fails as expected."""
self.setupNicks()
# sender is a channel member but without the necessary privileges:
self.sendLine("unprivileged", "MODE #chan +o unprivileged")
messages = self.getMessages("unprivileged")
self.assertEqual(len(messages), 1)
self.assertMessageMatch(messages[0], command=ERR_CHANOPRIVSNEEDED)
@cases.mark_specifications("Modern")
def testChannelOperatorModeTargetNotInChannel(self):
"""Test that +o targeting a user not present in the channel fails
as expected."""
self.setupNicks()
# sender is a chanop, but target nick is not in the channel:
self.sendLine("chanop", "MODE #chan +o unrelated")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertMessageMatch(messages[0], command=ERR_USERNOTINCHANNEL)
@cases.mark_specifications("Modern")
def testChannelOperatorModeTargetDoesNotExist(self):
"""Test that +o targeting a nonexistent nick fails as expected."""
self.setupNicks()
# sender is a chanop, but target nick does not exist:
self.sendLine("chanop", "MODE #chan +o nobody")
messages = self.getMessages("chanop")
# ERR_NOSUCHNICK is typical, Bahamut additionally sends ERR_USERNOTINCHANNEL
if self.controller.software_name != "Bahamut":
self.assertEqual(len(messages), 1)
self.assertMessageMatch(messages[0], command=ERR_NOSUCHNICK)
else:
self.assertLessEqual(len(messages), 2)
commands = {message.command for message in messages}
self.assertLessEqual({ERR_NOSUCHNICK}, commands)
self.assertLessEqual(commands, {ERR_NOSUCHNICK, ERR_USERNOTINCHANNEL})
@cases.mark_specifications("Modern")
@cases.xfailIf(
lambda self: bool(
self.controller.software_name == "UnrealIRCd"
and self.controller.software_version == 5
),
"UnrealIRCd <6.1.7 returns ERR_NOSUCHNICK on non-existent channel",
)
def testChannelOperatorModeChannelDoesNotExist(self):
"""Test that +o targeting a nonexistent channel fails as expected.
"If <target> is a channel that does not exist on the network,
# the ERR_NOSUCHCHANNEL (403) numeric is returned."
"""
self.setupNicks()
# target channel does not exist, but target nick does:
self.sendLine("chanop", "MODE #nonexistentchan +o chanop")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertMessageMatch(messages[0], command=ERR_NOSUCHCHANNEL)
@cases.mark_specifications("Modern")
@cases.xfailIf(
lambda self: bool(
self.controller.software_name == "UnrealIRCd"
and self.controller.software_version == 5
),
"UnrealIRCd <6.1.7 returns ERR_NOSUCHNICK on non-existent channel",
)
def testChannelOperatorModeChannelAndTargetDoNotExist(self):
"""Test that +o targeting a nonexistent channel and nickname
fails as expected."""
self.setupNicks()
# neither target channel nor target nick exist:
self.sendLine("chanop", "MODE #nonexistentchan +o nobody")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertIn(
messages[0].command,
[ERR_NOSUCHCHANNEL, ERR_NOTONCHANNEL, ERR_USERNOTINCHANNEL],
)
@cases.mark_specifications("Modern")
def testChannelOperatorModeSenderNonMember(self):
"""Test that +o where the sender is not a channel member
fails as expected."""
self.setupNicks()
# sender is not a channel member, target nick exists and is a channel member:
self.sendLine("chanop", "MODE #unrelated +o unprivileged")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertIn(messages[0].command, [ERR_NOTONCHANNEL, ERR_CHANOPRIVSNEEDED])
@cases.mark_specifications("Modern")
def testChannelOperatorModeSenderAndTargetNonMembers(self):
"""Test that +o where neither the sender nor the target is a channel
member fails as expected."""
self.setupNicks()
# sender is not a channel member, target nick exists but is not a channel member:
self.sendLine("chanop", "MODE #unrelated +o chanop")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertIn(
messages[0].command,
[ERR_NOTONCHANNEL, ERR_CHANOPRIVSNEEDED, ERR_USERNOTINCHANNEL],
)
@cases.mark_specifications("Modern")
def testChannelOperatorModeSuccess(self):
"""Tests a successful grant of +o in a channel."""
self.setupNicks()
self.sendLine("chanop", "MODE #chan +o unprivileged")
messages = self.getMessages("chanop")
self.assertEqual(len(messages), 1)
self.assertMessageMatch(
messages[0],
command="MODE",
params=["#chan", "+o", "unprivileged"],
)
messages = self.getMessages("unprivileged")
self.assertEqual(len(messages), 1)
self.assertMessageMatch(
messages[0],
command="MODE",
params=["#chan", "+o", "unprivileged"],
)

View File

@ -2,8 +2,6 @@
The PRIVMSG and NOTICE commands.
"""
import pytest
from irctest import cases
from irctest.numerics import ERR_INPUTTOOLONG
from irctest.patma import ANYSTR
@ -125,31 +123,26 @@ class NoticeTestCase(cases.BaseServerTestCase):
class TagsTestCase(cases.BaseServerTestCase):
@pytest.mark.parametrize("tag_length", [4096, 10000])
@cases.mark_capabilities("message-tags")
@cases.xfailIf(
lambda self, tag_length: bool(
lambda self: bool(
self.controller.software_name == "UnrealIRCd"
and self.controller.software_version == 5
),
"UnrealIRCd <6.0.7 dropped messages with excessively large tags: "
"https://bugs.unrealircd.org/view.php?id=5947",
)
def testLineTooLong(self, tag_length):
def testLineTooLong(self):
self.connectClient("bar", capabilities=["message-tags"], skip_if_cap_nak=True)
self.connectClient(
"recver", capabilities=["message-tags"], skip_if_cap_nak=True
)
self.joinChannel(1, "#xyz")
monsterMessage = (
"@+clientOnlyTagExample=" + "a" * tag_length + " PRIVMSG #xyz hi!"
)
monsterMessage = "@+clientOnlyTagExample=" + "a" * 4096 + " PRIVMSG #xyz hi!"
self.sendLine(1, monsterMessage)
replies = self.getMessages(1)
self.assertEqual(self.getMessages(2), [], "overflowing message was relayed")
if len(replies) > 0:
self.assertIn(ERR_INPUTTOOLONG, set(reply.command for reply in replies))
replies = self.getMessages(1)
self.assertIn(ERR_INPUTTOOLONG, set(reply.command for reply in replies))
class LengthLimitTestCase(cases.BaseServerTestCase):

View File

@ -223,9 +223,6 @@ def get_test_job(*, config, test_config, test_id, version_flavor, jobs):
{
"name": "Test with pytest",
"timeout-minutes": 30,
"env": {
"IRCTEST_DEBUG_LOGS": "${{ runner.debug }}",
},
"run": (
f"PYTEST_ARGS='--junit-xml pytest.xml --timeout 300' "
f"PATH=$HOME/.local/bin:$PATH "

View File

@ -148,7 +148,7 @@ software:
name: InspIRCd
repository: inspircd/inspircd
refs: &inspircd_refs
stable: v3.17.1
stable: v3.17.0
release: null
devel: master
devel_release: insp3
@ -230,7 +230,7 @@ software:
name: ngircd
repository: ngircd/ngircd
refs:
stable: acf8409c60ccc96beed0a1f990c4f9374823c0ce # three months ahead of v27
stable: 3e3f6cbeceefd9357b53b27c2386bb39306ab353 # three years ahead of rel-26.1
release: null
devel: master
devel_release: null
@ -300,8 +300,8 @@ software:
name: UnrealIRCd 6
repository: unrealircd/unrealircd
refs:
stable: a68625454078641ce984eeb197f7e02b1857ab6c # 6.1.7.1
release: a68625454078641ce984eeb197f7e02b1857ab6c # 6.1.7.1
stable: da3c1c654481a33035b9c703957e1c25d0158259 # 6.0.7
release: da3c1c654481a33035b9c703957e1c25d0158259 # 6.0.7
devel: unreal60_dev
devel_release: null
path: unrealircd