Skip to content

Commit

Permalink
tests: simplify SSL checks/fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
akx committed Jan 11, 2024
1 parent 1097a18 commit 5ae418c
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 33 deletions.
21 changes: 11 additions & 10 deletions tests/lib/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,30 @@
import pytest

from tests.consts import ssl_path, tests_path
from tests.paho_test import create_server_socket, create_server_socket_ssl
from tests.paho_test import create_server_socket, create_server_socket_ssl, ssl

clients_path = tests_path / "lib" / "clients"


@pytest.fixture()
def server_socket(monkeypatch):
sock, port = create_server_socket()
def _yield_server(monkeypatch, sockport):
sock, port = sockport
monkeypatch.setenv("PAHO_SERVER_PORT", str(port))
try:
yield sock
finally:
sock.close()


@pytest.fixture()
def server_socket(monkeypatch):
yield from _yield_server(monkeypatch, create_server_socket())


@pytest.fixture()
def ssl_server_socket(monkeypatch):
sock, port = create_server_socket_ssl()
monkeypatch.setenv("PAHO_SERVER_PORT", str(port))
try:
yield sock
finally:
sock.close()
if ssl is None:
pytest.skip("no ssl module")
yield from _yield_server(monkeypatch, create_server_socket_ssl())


def stop_process(proc: subprocess.Popen) -> None:
Expand Down
3 changes: 0 additions & 3 deletions tests/lib/test_08_ssl_bad_cacert.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import paho.mqtt.client as mqtt
import pytest

from tests.paho_test import ssl


@pytest.mark.skipif(ssl is None, reason="no ssl module")
def test_08_ssl_bad_cacert():
with pytest.raises(IOError):
mqttc = mqtt.Client("08-ssl-bad-cacert")
Expand Down
9 changes: 3 additions & 6 deletions tests/lib/test_08_ssl_connect_cert_auth.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
# Test whether a client produces a correct connect and subsequent disconnect when using SSL.
# Client must provide a certificate.
import pytest

import tests.paho_test as paho_test
from tests.paho_test import ssl

#
# The client should connect with keepalive=60, clean session set,
# and client id 08-ssl-connect-crt-auth
# It should use the CA certificate ssl/all-ca.crt for verifying the server.
# The test will send a CONNACK message to the client with rc=0. Upon receiving
# the CONNACK and verifying that rc=0, the client should send a DISCONNECT
# message. If rc!=0, the client should exit with an error.

import tests.paho_test as paho_test

connect_packet = paho_test.gen_connect("08-ssl-connect-crt-auth", keepalive=60)
connack_packet = paho_test.gen_connack(rc=0)
disconnect_packet = paho_test.gen_disconnect()


@pytest.mark.skipif(ssl is None, reason="no ssl module")
def test_08_ssl_connect_crt_auth(ssl_server_socket, start_client):
start_client("08-ssl-connect-cert-auth.py")

Expand Down
9 changes: 3 additions & 6 deletions tests/lib/test_08_ssl_connect_cert_auth_pw.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
# Test whether a client produces a correct connect and subsequent disconnect when using SSL.
# Client must provide a certificate - the private key is encrypted with a password.
import pytest

import tests.paho_test as paho_test
from tests.paho_test import ssl

#
# The client should connect with keepalive=60, clean session set,
# and client id 08-ssl-connect-crt-auth
# It should use the CA certificate ssl/all-ca.crt for verifying the server.
# The test will send a CONNACK message to the client with rc=0. Upon receiving
# the CONNACK and verifying that rc=0, the client should send a DISCONNECT
# message. If rc!=0, the client should exit with an error.

import tests.paho_test as paho_test

connect_packet = paho_test.gen_connect("08-ssl-connect-crt-auth-pw", keepalive=60)
connack_packet = paho_test.gen_connack(rc=0)
disconnect_packet = paho_test.gen_disconnect()


@pytest.mark.skipif(ssl is None, reason="no ssl module")
def test_08_ssl_connect_crt_auth_pw(ssl_server_socket, start_client):
start_client("08-ssl-connect-cert-auth-pw.py")

Expand Down
4 changes: 0 additions & 4 deletions tests/lib/test_08_ssl_connect_no_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,13 @@
# The test will send a CONNACK message to the client with rc=0. Upon receiving
# the CONNACK and verifying that rc=0, the client should send a DISCONNECT
# message. If rc!=0, the client should exit with an error.
import pytest

import tests.paho_test as paho_test
from tests.paho_test import ssl

connect_packet = paho_test.gen_connect("08-ssl-connect-no-auth", keepalive=60)
connack_packet = paho_test.gen_connack(rc=0)
disconnect_packet = paho_test.gen_disconnect()


@pytest.mark.skipif(ssl is None, reason="no ssl module")
def test_08_ssl_connect_no_auth(ssl_server_socket, start_client):
start_client("08-ssl-connect-no-auth.py")

Expand Down
1 change: 0 additions & 1 deletion tests/lib/test_08_ssl_fake_cacert.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from tests.paho_test import ssl


@pytest.mark.skipif(ssl is None, reason="no ssl module")
def test_08_ssl_fake_cacert(ssl_server_socket, start_client):
start_client("08-ssl-fake-cacert.py")
with pytest.raises(ssl.SSLError):
Expand Down
7 changes: 4 additions & 3 deletions tests/paho_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def create_server_socket():
return (sock, port)


def create_server_socket_ssl(cert_reqs=None):
def create_server_socket_ssl(*, verify_mode=None):
assert ssl, "SSL not available"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Expand All @@ -43,8 +43,9 @@ def create_server_socket_ssl(cert_reqs=None):
str(ssl_path / "server.crt"),
str(ssl_path / "server.key"),
)
if cert_reqs:
context.verify_mode = cert_reqs
if verify_mode:
context.verify_mode = verify_mode

ssock = context.wrap_socket(sock, server_side=True)
ssock.settimeout(10)
port = bind_to_any_free_port(ssock)
Expand Down

0 comments on commit 5ae418c

Please sign in to comment.