earthsnake/tests/test_base32.py

57 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Tests for the base32 encode/decode utilities
"""
from base64 import _b32decode, _b32encode # type: ignore
from base64 import b32decode, b32encode
from random import choice
import pytest
from earthsnake.base32 import base32_bytes_to_string, base32_string_to_bytes
from earthsnake.types import B32_CHAR
def test_alphabet() -> None:
"""Test if Pythons Base32 alphabet is the uppercase version of the one we expect"""
alphabet = B32_CHAR.encode('utf-8')
test_data = b'\x00D2\x14\xc7BT\xb65\xcf\x84e:V\xd7\xc6u\xbew\xdf'
test_encoded = B32_CHAR.upper().encode('utf-8')
assert _b32encode(alphabet, test_data) == b32encode(test_data).lower()
assert _b32decode(alphabet, alphabet) == b32decode(test_encoded)
def test_bytes_to_string() -> None:
"""Test if base32_bytes_to_string encodes bytes as expected"""
data = bytes(choice(range(255)) for _ in range(10))
our_version = base32_bytes_to_string(data)
py_version = 'b' + b32encode(data).lower().strip(b'=').decode('utf-8')
assert our_version == py_version
def test_string_to_bytes_noprefix() -> None:
"""Test if base32_string_to_bytes refuses to decode strings without the 'b' prefix"""
with pytest.raises(ValueError) as ctx:
base32_string_to_bytes('test')
assert 'it should start with a \'b\'' in str(ctx.value)
def test_string_to_bytes_padding() -> None:
"""Test if base32_string_to_bytes refuses to decode strings with padding characters"""
with pytest.raises(ValueError) as ctx:
base32_string_to_bytes('btest=')
assert 'it contains padding characters (\'=\')' in str(ctx.value)
def test_string_to_bytes() -> None:
"""Test if base32_string_to_bytes dedoces strings as expected"""
assert base32_string_to_bytes('borsxg5a') == b'test'