File: dlt_core_unit_test.py

package info (click to toggle)
python-dlt 2.18.10.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 452 kB
  • sloc: python: 3,449; makefile: 55
file content (86 lines) | stat: -rw-r--r-- 3,308 bytes parent folder | download | duplicates (3)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Copyright (C) 2017. BMW Car IT GmbH. All rights reserved.
"""Basic size tests for ctype wrapper definitions, to protect against regressions"""
import ctypes
import importlib
import os
import unittest
from unittest.mock import patch, MagicMock

import dlt


class TestCoreStructures(unittest.TestCase):
    def setUp(self):
        self.size_map = {
            "cDltServiceConnectionInfo": 10,
            "cDltStorageHeader": 16,
            "cDltStandardHeader": 4,
            "cDltStandardHeaderExtra": 12,
            "cDltExtendedHeader": 10,
            "cDLTMessage": 120,
            "cDltReceiver": 72,
            "cDltClient": 144,
            "cDLTFilter": 604,
        }

    def test_sizeof(self):
        importlib.import_module("dlt.core")

        for clsname, expected in self.size_map.items():
            actual = ctypes.sizeof(getattr(dlt.core, clsname))
            self.assertEqual(
                actual,
                expected,
                msg="v{0}, sizeof {1}: {2} != {3}".format(
                    dlt.core.get_version(dlt.core.dltlib), clsname, actual, expected
                ),
            )


class TestImportSpecificVersion(unittest.TestCase):
    def setUp(self):
        self.original_api_version = dlt.core.API_VER
        self.version_answer = b"2.18.5"
        self.version_str = (
            b"DLT Package Version: 2.18.5 STABLE, Package Revision: v2.18.5_5_g33fbad1, "
            b"build on Sep  2 2020 11:55:50\n-SYSTEMD -SYSTEMD_WATCHDOG -TEST -SHM\n"
        )
        self.version_filename = "core_2185.py"
        self.version_truncate_str = "2.18.5"
        self.version_truncate_filename = "core_2180.py"

        dlt.core.API_VER = None

    def tearDown(self):
        dlt.core.API_VER = self.original_api_version

    def test_get_version(self):
        def mock_dlt_get_version(buf, buf_size):
            ver_cstr = ctypes.create_string_buffer(self.version_str)
            ctypes.memmove(buf, ver_cstr, len(ver_cstr))

        mock_loaded_lib = MagicMock()
        mock_loaded_lib.dlt_get_version = MagicMock(side_effect=mock_dlt_get_version)

        api_version = dlt.core.get_version(mock_loaded_lib)
        self.assertEqual(mock_loaded_lib.dlt_get_version.call_count, 1)

        self.assertEqual(api_version, self.version_answer.decode())
        self.assertEqual(dlt.core.API_VER, self.version_answer.decode())

    def test_get_api_specific_file(self):
        with patch.object(os.path, "exists", return_value=True):
            filename = dlt.core.get_api_specific_file(self.version_answer.decode())
            self.assertEqual(filename, self.version_filename)

    def test_get_api_specific_file_not_found(self):
        with patch.object(os.path, "exists", side_effect=[False, False]):
            with self.assertRaises(ImportError) as err_cm:
                dlt.core.get_api_specific_file(self.version_answer.decode())

            self.assertEqual(str(err_cm.exception), "No module file: {}".format(self.version_truncate_filename))

    def test_get_api_specific_file_truncate_minor_version(self):
        with patch.object(os.path, "exists", side_effect=[False, True]):
            filename = dlt.core.get_api_specific_file(self.version_truncate_str)
            self.assertEqual(filename, self.version_truncate_filename)