Files
revpi-middleware/tests/dbus_middleware1/fake_devices.py
Sven Sager 3f808c55f8 test(dbus): Add unit test framework for dbus_middleware1 module
Introduces test infrastructure and mockup classes for
`dbus_middleware1`. Includes `BusProvider` test setup, fake device
implementations, and initialization logic to support session bus
testing. Enhances testability and isolation of the D-Bus middleware
components.
2025-04-19 14:40:05 +02:00

66 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: 2025 KUNBUS GmbH
# SPDX-License-Identifier: GPL-2.0-or-later
from ctypes import c_int
from queue import Queue
from tempfile import NamedTemporaryFile
from unittest import TestCase
IOCTL_QUEUE = Queue()
class FakePiControlDevice:
IOCTL_RESET_DRIVER = 19212
def __init__(self, picontrol_device: str):
self._fh = NamedTemporaryFile("wb+", 0, prefix="fake_device_")
self.name = self._fh.name
def __del__(self):
self._fh.close()
def reset_process_image(self):
self._fh.write(b"\x00" * 4096)
self._fh.seek(0)
def ioctl(self, request, arg=0) -> int:
if type(arg) is c_int:
arg = arg.value
if request == self.IOCTL_RESET_DRIVER:
pass
else:
raise NotImplementedError(f"Unknown IOCTL request: {request}")
IOCTL_QUEUE.put_nowait((request, arg))
return arg
def close(self):
self._fh.close()
def read(self, size):
return self._fh.read(size)
def seek(self, offset, whence):
self._fh.seek(offset, whence)
def write(self, buffer):
return self._fh.write(buffer)
class PiControlDeviceMockup(TestCase):
def setUp(self):
super().setUp()
# Replace classes with mockup classes
import revpi_middleware.dbus_middleware1.process_image.interface_picontrol as test_helpers
test_helpers.PiControlIoctl = FakePiControlDevice
# Create a fake picontrol0 device
self.picontrol = FakePiControlDevice(picontrol_device="/dev/fake_device_0")
def tearDown(self):
self.picontrol.close()
super().tearDown()