From a0abd537c67dc283d26a272e8063ccb6c6234285 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 11 Jun 2024 18:06:30 +0200 Subject: [PATCH] Adjust nacl import in tests (#119392) --- tests/components/mobile_app/test_http_api.py | 17 ++------- tests/components/mobile_app/test_webhook.py | 35 ++----------------- .../owntracks/test_device_tracker.py | 34 ++++++------------ 3 files changed, 15 insertions(+), 71 deletions(-) diff --git a/tests/components/mobile_app/test_http_api.py b/tests/components/mobile_app/test_http_api.py index d080b7a5106..b333f91d985 100644 --- a/tests/components/mobile_app/test_http_api.py +++ b/tests/components/mobile_app/test_http_api.py @@ -5,7 +5,8 @@ from http import HTTPStatus import json from unittest.mock import patch -import pytest +from nacl.encoding import Base64Encoder +from nacl.secret import SecretBox from homeassistant.components.mobile_app.const import CONF_SECRET, DOMAIN from homeassistant.const import CONF_WEBHOOK_ID @@ -66,13 +67,6 @@ async def test_registration_encryption( hass: HomeAssistant, hass_client: ClientSessionGenerator ) -> None: """Test that registrations happen.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - return - await async_setup_component(hass, DOMAIN, {DOMAIN: {}}) api_client = await hass_client() @@ -111,13 +105,6 @@ async def test_registration_encryption_legacy( hass: HomeAssistant, hass_client: ClientSessionGenerator ) -> None: """Test that registrations happen.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - return - await async_setup_component(hass, DOMAIN, {DOMAIN: {}}) api_client = await hass_client() diff --git a/tests/components/mobile_app/test_webhook.py b/tests/components/mobile_app/test_webhook.py index 9f521cafd38..ca5c9936409 100644 --- a/tests/components/mobile_app/test_webhook.py +++ b/tests/components/mobile_app/test_webhook.py @@ -2,8 +2,11 @@ from binascii import unhexlify from http import HTTPStatus +import json from unittest.mock import ANY, patch +from nacl.encoding import Base64Encoder +from nacl.secret import SecretBox import pytest from homeassistant.components.camera import CameraEntityFeature @@ -35,14 +38,6 @@ async def homeassistant(hass): def encrypt_payload(secret_key, payload, encode_json=True): """Return a encrypted payload given a key and dictionary of data.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - - import json - prepped_key = unhexlify(secret_key) if encode_json: @@ -56,14 +51,6 @@ def encrypt_payload(secret_key, payload, encode_json=True): def encrypt_payload_legacy(secret_key, payload, encode_json=True): """Return a encrypted payload given a key and dictionary of data.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - - import json - keylen = SecretBox.KEY_SIZE prepped_key = secret_key.encode("utf-8") prepped_key = prepped_key[:keylen] @@ -80,14 +67,6 @@ def encrypt_payload_legacy(secret_key, payload, encode_json=True): def decrypt_payload(secret_key, encrypted_data): """Return a decrypted payload given a key and a string of encrypted data.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - - import json - prepped_key = unhexlify(secret_key) decrypted_data = SecretBox(prepped_key).decrypt( @@ -100,14 +79,6 @@ def decrypt_payload(secret_key, encrypted_data): def decrypt_payload_legacy(secret_key, encrypted_data): """Return a decrypted payload given a key and a string of encrypted data.""" - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox - except (ImportError, OSError): - pytest.skip("libnacl/libsodium is not installed") - - import json - keylen = SecretBox.KEY_SIZE prepped_key = secret_key.encode("utf-8") prepped_key = prepped_key[:keylen] diff --git a/tests/components/owntracks/test_device_tracker.py b/tests/components/owntracks/test_device_tracker.py index 80e76a5e7b4..16ce8223845 100644 --- a/tests/components/owntracks/test_device_tracker.py +++ b/tests/components/owntracks/test_device_tracker.py @@ -1,8 +1,12 @@ """The tests for the Owntracks device tracker.""" +import base64 import json +import pickle from unittest.mock import patch +from nacl.encoding import Base64Encoder +from nacl.secret import SecretBox import pytest from homeassistant.components import owntracks @@ -1330,23 +1334,14 @@ def generate_ciphers(secret): # PyNaCl ciphertext generation will fail if the module # cannot be imported. However, the test for decryption # also relies on this library and won't be run without it. - import base64 - import pickle + keylen = SecretBox.KEY_SIZE + key = secret.encode("utf-8") + key = key[:keylen] + key = key.ljust(keylen, b"\0") - try: - from nacl.encoding import Base64Encoder - from nacl.secret import SecretBox + msg = json.dumps(DEFAULT_LOCATION_MESSAGE).encode("utf-8") - keylen = SecretBox.KEY_SIZE - key = secret.encode("utf-8") - key = key[:keylen] - key = key.ljust(keylen, b"\0") - - msg = json.dumps(DEFAULT_LOCATION_MESSAGE).encode("utf-8") - - ctxt = SecretBox(key).encrypt(msg, encoder=Base64Encoder).decode("utf-8") - except (ImportError, OSError): - ctxt = "" + ctxt = SecretBox(key).encrypt(msg, encoder=Base64Encoder).decode("utf-8") mctxt = base64.b64encode( pickle.dumps( @@ -1381,9 +1376,6 @@ def mock_cipher(): def mock_decrypt(ciphertext, key): """Decrypt/unpickle.""" - import base64 - import pickle - (mkey, plaintext) = pickle.loads(base64.b64decode(ciphertext)) if key != mkey: raise ValueError @@ -1504,12 +1496,6 @@ async def test_encrypted_payload_no_topic_key(hass: HomeAssistant, setup_comp) - async def test_encrypted_payload_libsodium(hass: HomeAssistant, setup_comp) -> None: """Test sending encrypted message payload.""" - try: - import nacl # noqa: F401 - except (ImportError, OSError): - pytest.skip("PyNaCl/libsodium is not installed") - return - await setup_owntracks(hass, {CONF_SECRET: TEST_SECRET_KEY}) await send_message(hass, LOCATION_TOPIC, ENCRYPTED_LOCATION_MESSAGE)