Added Tox testing for Python 3.11. Fixed flake8 & pylint errors.

This commit is contained in:
Joe Testa 2023-02-01 17:56:54 -05:00
parent e50ac5c84d
commit 32ff04c2cc
5 changed files with 23 additions and 21 deletions

View File

@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
python-version: [3.7, 3.8, 3.9, "3.10"] python-version: [3.7, 3.8, 3.9, "3.10", 3.11]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2

View File

@ -35,6 +35,10 @@ from ssh_audit.protocol import Protocol
from ssh_audit.ssh_socket import SSH_Socket from ssh_audit.ssh_socket import SSH_Socket
class KexDHException(Exception):
pass
class KexDH: # pragma: nocover class KexDH: # pragma: nocover
def __init__(self, kex_name: str, hash_alg: str, g: int, p: int) -> None: def __init__(self, kex_name: str, hash_alg: str, g: int, p: int) -> None:
self.__kex_name = kex_name # pylint: disable=unused-private-member self.__kex_name = kex_name # pylint: disable=unused-private-member
@ -79,8 +83,7 @@ class KexDH: # pragma: nocover
packet_type, payload = s.read_packet(2) packet_type, payload = s.read_packet(2)
if packet_type != -1 and packet_type not in [Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY]: # pylint: disable=no-else-raise if packet_type != -1 and packet_type not in [Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY]: # pylint: disable=no-else-raise
# TODO: change Exception to something more specific. raise KexDHException('Expected MSG_KEXDH_REPLY (%d) or MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
raise Exception('Expected MSG_KEXDH_REPLY (%d) or MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
elif packet_type == -1: elif packet_type == -1:
# A connection error occurred. We can't parse anything, so just # A connection error occurred. We can't parse anything, so just
# return. The host key modulus (and perhaps certificate modulus) # return. The host key modulus (and perhaps certificate modulus)
@ -328,8 +331,7 @@ class KexGroupExchange(KexDH):
packet_type, payload = s.read_packet(2) packet_type, payload = s.read_packet(2)
if packet_type not in [Protocol.MSG_KEXDH_GEX_GROUP, Protocol.MSG_DEBUG]: if packet_type not in [Protocol.MSG_KEXDH_GEX_GROUP, Protocol.MSG_DEBUG]:
# TODO: replace with a better exception type. raise KexDHException('Expected MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
raise Exception('Expected MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
# Skip any & all MSG_DEBUG messages. # Skip any & all MSG_DEBUG messages.
while packet_type == Protocol.MSG_DEBUG: while packet_type == Protocol.MSG_DEBUG:

View File

@ -182,7 +182,7 @@ def output_algorithm(out: OutputBuffer, alg_db: Dict[str, Dict[str, List[List[Op
if out.verbose: if out.verbose:
f(prefix + alg_name + comment) f(prefix + alg_name + comment)
elif text != '': elif text != '':
comment = (padding + ' `- [' + level + '] ' + text) comment = padding + ' `- [' + level + '] ' + text
f(' ' * len(prefix + alg_name) + comment) f(' ' * len(prefix + alg_name) + comment)
return program_retval return program_retval

View File

@ -86,7 +86,7 @@ class SSH_Socket(ReadBuf, WriteBuf):
# If the user has a preference for using IPv4 over IPv6 (or vice-versa), then sort the list returned by getaddrinfo() so that the preferred address type comes first. # If the user has a preference for using IPv4 over IPv6 (or vice-versa), then sort the list returned by getaddrinfo() so that the preferred address type comes first.
if len(self.__ip_version_preference) == 2: if len(self.__ip_version_preference) == 2:
r = sorted(r, key=lambda x: x[0], reverse=(self.__ip_version_preference[0] == 6)) r = sorted(r, key=lambda x: x[0], reverse=(self.__ip_version_preference[0] == 6)) # pylint: disable=superfluous-parens
for af, socktype, _proto, _canonname, addr in r: for af, socktype, _proto, _canonname, addr in r:
if socktype == socket.SOCK_STREAM: if socktype == socket.SOCK_STREAM:
yield af, addr yield af, addr

28
tox.ini
View File

@ -1,7 +1,7 @@
[tox] [tox]
envlist = envlist =
py{py3}-{test,pylint,flake8,vulture} py{py3}-{test,pylint,flake8,vulture}
py{36,37,38,39,310}-{test,mypy,pylint,flake8,vulture} py{37,38,39,310,311}-{test,mypy,pylint,flake8,vulture}
cov cov
skip_missing_interpreters = true skip_missing_interpreters = true
@ -9,11 +9,11 @@ skip_missing_interpreters = true
deps = deps =
test: pytest test: pytest
test,cov: {[testenv:cov]deps} test,cov: {[testenv:cov]deps}
test,py{36,37,38,39,310}-{type,mypy}: colorama test,py{37,38,39,310,311}-{type,mypy}: colorama
py{36,37,38,39,310}-{type,mypy}: {[testenv:mypy]deps} py{37,38,39,310,311}-{type,mypy}: {[testenv:mypy]deps}
py{py3,36,37,38,39,310}-{lint,pylint},lint: {[testenv:pylint]deps} py{py3,37,38,39,310,311}-{lint,pylint},lint: {[testenv:pylint]deps}
py{py3,36,37,38,39,310}-{lint,flake8},lint: {[testenv:flake8]deps} py{py3,37,38,39,310,311}-{lint,flake8},lint: {[testenv:flake8]deps}
py{py3,36,37,38,39,310}-{lint,vulture},lint: {[testenv:vulture]deps} py{py3,37,38,39,310,311}-{lint,vulture},lint: {[testenv:vulture]deps}
setenv = setenv =
SSHAUDIT = {toxinidir}/src SSHAUDIT = {toxinidir}/src
test: COVERAGE_FILE = {toxinidir}/.coverage.{envname} test: COVERAGE_FILE = {toxinidir}/.coverage.{envname}
@ -25,10 +25,10 @@ commands =
test: coverage combine test: coverage combine
test: coverage report --show-missing test: coverage report --show-missing
test: coverage html -d {toxinidir}/reports/html/coverage.{envname} test: coverage html -d {toxinidir}/reports/html/coverage.{envname}
py{36,37,38,39,310}-{type,mypy}: {[testenv:mypy]commands} py{37,38,39,310,311}-{type,mypy}: {[testenv:mypy]commands}
py{py3,36,37,38,39,310}-{lint,pylint},lint: {[testenv:pylint]commands} py{py3,37,38,39,310,311}-{lint,pylint},lint: {[testenv:pylint]commands}
py{py3,36,37,38,39,310}-{lint,flake8},lint: {[testenv:flake8]commands} py{py3,37,38,39,310,311}-{lint,flake8},lint: {[testenv:flake8]commands}
py{py3,36,37,38,39,310}-{lint,vulture},lint: {[testenv:vulture]commands} py{py3,37,38,39,310,311}-{lint,vulture},lint: {[testenv:vulture]commands}
#ignore_outcome = #ignore_outcome =
# type: true # type: true
# lint: true # lint: true
@ -125,10 +125,10 @@ ignore-long-lines = ^\s*(#\s+type:\s+.*|[A-Z0-9_]+\s+=\s+.*|('.*':\s+)?\[.*\],?|
max-module-lines = 2500 max-module-lines = 2500
[flake8] [flake8]
ignore = # E241 = multiple spaces after operator; should be kept for tabular data
E241, # multiple spaces after operator; should be kept for tabular data # E303 = too many blank lines
E303, # too many blank lines # E501 = line too long
E501, # line too long ignore = E241, E303, E501
[pytest] [pytest]
junit_family = xunit1 junit_family = xunit1