scapy/tox.ini

193 lines
6.4 KiB
INI

# Scapy tox configuration file
# Copyright (C) 2020 Guillaume Valadon <guillaume@valadon.net>
# Tox environments:
# py{version}-{os}-{non_root,root}
# In our testing, version can be 37 to 312 or py39 for pypy39
[tox]
# minversion = 4.0
skip_missing_interpreters = true
# envlist = default when doing 'tox'
envlist = py{37,38,39,310,311,312}-{linux,bsd,windows}-{non_root,root}
# Main tests
[testenv]
description = "Scapy unit tests"
allowlist_externals = sudo
parallel_show_output = true
package = wheel
passenv =
PATH
PWD
PROGRAMFILES
WINDIR
SYSTEMROOT
OPENSSL_CONF
# Used by scapy
SCAPY_USE_LIBPCAP
deps =
ipython
cryptography
coverage[toml]
python-can
# disabled on windows because they require c++ dependencies
# brotli 1.1.0 broken https://github.com/google/brotli/issues/1072
brotli < 1.1.0 ; sys_platform != 'win32'
zstandard ; sys_platform != 'win32'
platform =
linux: linux
bsd: (darwin|freebsd|openbsd|netbsd).*
windows: win32
commands =
linux-non_root: {envpython} {env:DISABLE_COVERAGE:-m coverage run} -m scapy.tools.UTscapy -c ./test/configs/linux.utsc -N {posargs}
linux-root: sudo -E {envpython} {env:DISABLE_COVERAGE:-m coverage run} -m scapy.tools.UTscapy -c ./test/configs/linux.utsc {posargs}
bsd-non_root: {envpython} {env:DISABLE_COVERAGE:-m coverage run} -m scapy.tools.UTscapy -c test/configs/bsd.utsc -K tshark -N {posargs}
bsd-root: sudo -E {envpython} {env:DISABLE_COVERAGE:-m coverage run} -m scapy.tools.UTscapy -c test/configs/bsd.utsc -K tshark {posargs}
windows: {envpython} {env:DISABLE_COVERAGE:-m coverage run} -m scapy.tools.UTscapy -c test/configs/windows.utsc {posargs}
{env:DISABLE_COVERAGE:coverage combine}
{env:DISABLE_COVERAGE:coverage xml -i}
# Variants of the main tests
[testenv:py38-isotp_kernel_module]
description = "Scapy unit tests - ISOTP Linux kernel module"
allowlist_externals = sudo
git
bash
lsmod
modprobe
passenv =
PATH
PWD
PROGRAMFILES
WINDIR
SYSTEMROOT
deps = {[testenv]deps}
commands =
sudo apt-get -qy install build-essential linux-headers-$(uname -r) linux-modules-extra-$(uname -r)
sudo -E modprobe can
git clone --depth=1 https://github.com/linux-can/can-utils.git /tmp/can-utils
bash -c "cd /tmp/can-utils; ./autogen.sh; ./configure; make; sudo make install"
git clone --depth=1 https://github.com/hartkopp/can-isotp.git /tmp/can-isotp
bash -c "cd /tmp/can-isotp; make; sudo make modules_install; sudo modprobe can_isotp || sudo insmod ./net/can/can-isotp.ko"
bash -c "rm -rf /tmp/can-utils /tmp/can-isotp"
lsmod
sudo -E {envpython} -m coverage run -m scapy.tools.UTscapy -c ./test/configs/linux.utsc {posargs}
coverage combine
coverage xml -i
# Test used by upstream pyca/cryptography
[testenv:cryptography]
description = "Scapy unit tests - pyca/cryptography variant"
sitepackages = true
deps =
commands =
python -c "import cryptography; print('DEBUG: cryptography %s' % cryptography.__version__)"
python -m scapy.tools.UTscapy -c ./test/configs/cryptography.utsc
# The files listed past the first argument of the sphinx-apidoc command are ignored
[testenv:apitree]
description = "Regenerates the API reference doc tree"
skip_install = true
changedir = {toxinidir}/doc/scapy
deps = sphinx
commands =
sphinx-apidoc -f --no-toc -d 1 --separate --module-first --templatedir=_templates --output-dir api ../../scapy ../../scapy/modules/ ../../scapy/libs/ ../../scapy/tools/ ../../scapy/arch/ ../../scapy/contrib/scada/* ../../scapy/layers/msrpce/raw/ ../../scapy/layers/msrpce/all.py ../../scapy/all.py ../../scapy/layers/all.py ../../scapy/compat.py
[testenv:mypy]
description = "Check Scapy compliance against static typing"
skip_install = true
deps = mypy==1.7.0
typing
commands = python .config/mypy/mypy_check.py linux
python .config/mypy/mypy_check.py win32
[testenv:docs]
description = "Build the docs"
deps =
extras = doc
changedir = {toxinidir}/doc/scapy
commands =
sphinx-build -W --keep-going -b html . _build/html
# Debug mode
[testenv:docs2]
description = "Build the docs without rebuilding the API tree"
skip_install = true
changedir = {toxinidir}/doc/scapy
deps = {[testenv:docs]deps}
allowlist_externals = sphinx-build
setenv =
SCAPY_APITREE = 0
commands =
sphinx-build -W --keep-going -b html . _build/html
[testenv:spell]
description = "Check code for Grammar mistakes"
skip_install = true
deps = codespell
# inet6, dhcp6 and the ipynb files contains french: ignore them
commands = codespell --ignore-words=.config/codespell_ignore.txt --skip="*.pyc,*.png,*.jpg,*.ods,*.raw,*.pdf,*.pcap,*.js,*.html,*.der,*_build*,*inet6.py,*dhcp6.py,*manuf.py,*tcpros.py,*.ipynb,*.svg,*.gif,*.obs,*.gz" scapy/ doc/ test/ .github/
[testenv:twine]
description = "Check Scapy code distribution"
skip_install = true
deps = twine
cmarkgfm
build
setenv = SCAPY_VERSION=3.0.0
commands = python -m build
twine check --strict dist/*
[testenv:gitarchive]
description = "Check Scapy git archive"
skip_install = true
allowlist_externals = git
commands = git version
git archive HEAD -o {envtmpdir}/scapy.tar
python -m pip install {envtmpdir}/scapy.tar
# Below: remove current folder from path to force use of installed Scapy
python -c "import sys; sys.path.remove(''); import scapy; print(scapy._version_from_git_archive())"
[testenv:flake8]
description = "Check Scapy code style & quality"
skip_install = true
deps = flake8<6.0.0
commands = flake8 scapy/
# flake8 configuration
[flake8]
ignore = E203, E731, W504, W503
max-line-length = 88
per-file-ignores =
scapy/all.py:F403,F401
scapy/asn1/mib.py:E501
scapy/contrib/automotive/obd/obd.py:F405,F403
scapy/contrib/automotive/obd/pid/pids.py:F405,F403
scapy/contrib/automotive/obd/scanner.py:F405,F403,E501
scapy/contrib/automotive/volkswagen/definitions.py:E501
scapy/contrib/eigrp.py:E501
scapy/contrib/geneve.py:E501
scapy/contrib/http2.py:F821
scapy/contrib/igmp.py:E501
scapy/contrib/scada/iec104/__init__.py:F405
scapy/layers/tls/all.py:F403
scapy/layers/tls/crypto/all.py:F403
scapy/layers/tls/crypto/md4.py:E741
scapy/libs/winpcapy.py:F405,F403,E501
scapy/libs/manuf.py:E501
scapy/tools/UTscapy.py:E501
exclude = scapy/libs/ethertypes.py,
scapy/layers/msrpce/raw/*