from datetime import datetime, timedelta, timezone
import pytest
from libervia.backend.core import exceptions
try:
from libervia.backend.plugins.plugin_xep_0373 import XEP_0373, NS_OX
except exceptions.MissingModule as e:
pytest.skip(f"Can't test XEP-0373: {e}", allow_module_level=True)
from libervia.backend.tools.xmpp_datetime import parse_datetime
from twisted.words.protocols.jabber import jid
a = jid.JID("foo@example.com")
b = jid.JID("bar@example.com")
def test_signcrypt_element_args() -> None:
with pytest.raises(ValueError):
XEP_0373.build_signcrypt_element([])
def test_signcrypt_element() -> None:
signcrypt_elt, payload_elt = XEP_0373.build_signcrypt_element([ a, b ])
payload_elt.addElement("signcrypt-test-content", content="signcrypt test content")
rpad_elt = next(signcrypt_elt.elements(NS_OX, "rpad"))
time_elt = next(signcrypt_elt.elements(NS_OX, "time"))
rpad = str(rpad_elt)
timestamp = parse_datetime(time_elt["stamp"])
signcrypt_elt.children.remove(rpad_elt)
signcrypt_elt.children.remove(time_elt)
assert rpad
assert (datetime.now(timezone.utc) - timestamp) < timedelta(seconds=10)
assert signcrypt_elt.toXml() == (
""
""
""
""
"signcrypt test content"
""
""
)
def test_sign_element_args() -> None:
with pytest.raises(ValueError):
XEP_0373.build_sign_element([], True)
def test_sign_element_with_rpad() -> None:
sign_elt, payload_elt = XEP_0373.build_sign_element([ a, b ], True)
payload_elt.addElement("sign-test-content", content="sign test content")
rpad_elt = next(sign_elt.elements(NS_OX, "rpad"))
time_elt = next(sign_elt.elements(NS_OX, "time"))
rpad = str(rpad_elt)
timestamp = parse_datetime(time_elt["stamp"])
sign_elt.children.remove(rpad_elt)
sign_elt.children.remove(time_elt)
assert rpad
assert (datetime.now(timezone.utc) - timestamp) < timedelta(seconds=10)
assert sign_elt.toXml() == (
""
""
""
""
"sign test content"
""
""
)
def test_sign_element_without_rpad() -> None:
sign_elt, payload_elt = XEP_0373.build_sign_element([ a, b ], False)
payload_elt.addElement("sign-test-content", content="sign test content")
rpad_elt = next(sign_elt.elements(NS_OX, "rpad"), None)
time_elt = next(sign_elt.elements(NS_OX, "time"))
timestamp = parse_datetime(time_elt["stamp"])
sign_elt.children.remove(time_elt)
assert rpad_elt is None
assert (datetime.now(timezone.utc) - timestamp) < timedelta(seconds=10)
assert sign_elt.toXml() == (
""
""
""
""
"sign test content"
""
""
)
def test_crypt_element_with_recipients() -> None:
crypt_elt, payload_elt = XEP_0373.build_crypt_element([ a, b ])
payload_elt.addElement("crypt-test-content", content="crypt test content")
rpad_elt = next(crypt_elt.elements(NS_OX, "rpad"))
time_elt = next(crypt_elt.elements(NS_OX, "time"))
rpad = str(rpad_elt)
timestamp = parse_datetime(time_elt["stamp"])
crypt_elt.children.remove(rpad_elt)
crypt_elt.children.remove(time_elt)
assert rpad
assert (datetime.now(timezone.utc) - timestamp) < timedelta(seconds=10)
assert crypt_elt.toXml() == (
""
""
""
""
"crypt test content"
""
""
)
def test_crypt_element_without_recipients() -> None:
crypt_elt, payload_elt = XEP_0373.build_crypt_element([])
payload_elt.addElement("crypt-test-content", content="crypt test content")
rpad_elt = next(crypt_elt.elements(NS_OX, "rpad"))
time_elt = next(crypt_elt.elements(NS_OX, "time"))
rpad = str(rpad_elt)
timestamp = parse_datetime(time_elt["stamp"])
crypt_elt.children.remove(rpad_elt)
crypt_elt.children.remove(time_elt)
assert rpad
assert (datetime.now(timezone.utc) - timestamp) < timedelta(seconds=10)
assert crypt_elt.toXml() == (
""
""
"crypt test content"
""
""
)