aries-askar 0.4.6

Askar cryptographic primitives and secure storage
Documentation
from ctypes import c_char, c_char_p, c_size_t, c_ubyte, pointer
from unittest import mock

from aries_askar.bindings.handle import ArcHandle
from aries_askar.bindings.lib import ByteBuffer, RawBuffer, StrBuffer


def test_cleanup_handle():
    logged = []

    class Handle(ArcHandle):
        @classmethod
        def _cleanup(cls, handle: c_size_t):
            logged.append(handle.value)

    h = Handle()
    assert not h.value
    del h
    assert not logged

    h = Handle()
    h.value = 99
    del h
    assert logged == [(99)]


def test_cleanup_bytebuffer():
    logged = []

    def cleanup(buffer: RawBuffer):
        logged.append((buffer.len, buffer.data.contents.value if buffer.data else None))

    with mock.patch.object(ByteBuffer, "_cleanup", cleanup):
        b = ByteBuffer()
        del b
        assert not logged

        c = c_ubyte(99)
        b = ByteBuffer()
        b.buffer = RawBuffer(len=1, data=pointer(c))
        del b
        assert logged == [(1, 99)]


def test_cleanup_strbuffer():
    logged = []

    def cleanup(buffer: c_char_p):
        logged.append(buffer.value)

    with mock.patch.object(StrBuffer, "_cleanup", cleanup):
        s = StrBuffer()
        del s
        assert not logged

        s = StrBuffer()
        c = c_char(ord("a"))
        s.buffer = pointer(c)
        del s
        assert logged == [b"a"]