mirror of https://github.com/secdev/scapy.git
193 lines
6.4 KiB
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/*
|