File: test_sysfsgpioagent.py

package info (click to toggle)
labgrid 25.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,796 kB
  • sloc: python: 21,352; sh: 846; makefile: 35
file content (46 lines) | stat: -rw-r--r-- 2,104 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import pytest

import os
from labgrid.util.agents.sysfsgpio import GpioDigitalOutput
from tempfile import TemporaryDirectory

class TestGpioAgent:

    class GpioDigitalOutputMock(GpioDigitalOutput):
        def __init__(self, **kwargs):
            index = kwargs['index']
            self.sysfs_mock_directory = TemporaryDirectory()
            GpioDigitalOutput._gpio_sysfs_path_prefix = self.sysfs_mock_directory.name
            GpioDigitalOutput._buffered_file_access = True
            export_file_path = os.path.join(self.sysfs_mock_directory.name, 'export')
            os.mknod(export_file_path)
            # Since there is no real device, writing to `export` does not create a corresponding
            # control directory. Expect a value error to be raised.
            with pytest.raises(ValueError, match='Device not found'):
                super().__init__(**kwargs)
            with open(export_file_path, mode='r') as export_file:
                export_content = export_file.readline()
                assert export_content == str(index)
            self.gpio_line_directory = os.path.join(self.sysfs_mock_directory.name, f'gpio{index}')
            os.mkdir(self.gpio_line_directory)
            for control_file in ['direction', 'value']:
                control_file_path = os.path.join(self.gpio_line_directory, control_file)
                print(f'creating control file `{control_file_path}`')
                os.mknod(control_file_path)
            super().__init__(**kwargs)

        def set(self, val):
            # new values are available at the beginning of the virtual file
            # emulate this behavior
            os.lseek(self.gpio_sysfs_value_fd, 0, os.SEEK_SET)
            super().set(val)

    def test_instantiation(self):
        gpio_line = TestGpioAgent.GpioDigitalOutputMock(index=13)
        assert isinstance(gpio_line, GpioDigitalOutput)

    def test_set(self):
        gpio_line = TestGpioAgent.GpioDigitalOutputMock(index=13)
        for val in [True, False, True, False]:
            gpio_line.set(val)
            assert gpio_line.get() == val