File: test_sel.py

package info (click to toggle)
python-ipmi 0.5.7-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,132 kB
  • sloc: python: 12,645; makefile: 2
file content (154 lines) | stat: -rw-r--r-- 6,030 bytes parent folder | download
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from unittest.mock import MagicMock

from pyipmi import interfaces, create_connection
from pyipmi.msgs.registry import create_response_by_name
from pyipmi.sel import SelEntry, SelInfo


class TestSel:

    def test_get_sel_entries(self):
        rsps = list()
        rsp = create_response_by_name('GetSelInfo')
        rsp .entries = 1
        rsps.append(rsp)
        rsp = create_response_by_name('ReserveSel')
        rsps.append(rsp)
        rsp = create_response_by_name('GetSelEntry')
        rsp.record_data = [0, 0, SelEntry.TYPE_SYSTEM_EVENT, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        rsps.append(rsp)
        rsp = create_response_by_name('GetSelEntry')
        rsp.record_data = [0, 0, SelEntry.TYPE_SYSTEM_EVENT, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        rsp.next_record_id = 0xffff
        rsps.append(rsp)

        mock_send_message = MagicMock(side_effect=rsps)
        interface = interfaces.create_interface('mock')
        ipmi = create_connection(interface)
        ipmi.send_message = mock_send_message

        entries = ipmi.get_sel_entries()
        assert len(entries) == 2


class TestSelInfo:
    rsp = create_response_by_name('GetSelInfo')
    rsp.version = 1
    rsp.entries = 1023
    rsp.free_bytes = 512
    info = SelInfo(rsp)

    assert info.version == 1
    assert info.entries == 1023
    assert info.free_bytes == 512

    rsp.operation_support.get_sel_allocation_info = 1
    rsp.operation_support.reserve_sel = 0
    rsp.operation_support.partial_add_sel_entry = 0
    rsp.operation_support.delete_sel = 0
    rsp.operation_support.overflow_flag = 0
    info = SelInfo(rsp)
    assert 'get_sel_allocation_info' in info.operation_support
    assert 'reserve_sel' not in info.operation_support
    assert 'partial_add_sel_entry' not in info.operation_support
    assert 'delete_sel' not in info.operation_support
    assert 'overflow_flag' not in info.operation_support

    rsp.operation_support.get_sel_allocation_info = 0
    rsp.operation_support.reserve_sel = 1
    rsp.operation_support.partial_add_sel_entry = 0
    rsp.operation_support.delete_sel = 0
    rsp.operation_support.overflow_flag = 0
    info = SelInfo(rsp)
    assert 'get_sel_allocation_info' not in info.operation_support
    assert 'reserve_sel' in info.operation_support
    assert 'partial_add_sel_entry' not in info.operation_support
    assert 'delete_sel' not in info.operation_support
    assert 'overflow_flag' not in info.operation_support

    rsp.operation_support.get_sel_allocation_info = 0
    rsp.operation_support.reserve_sel = 0
    rsp.operation_support.partial_add_sel_entry = 1
    rsp.operation_support.delete_sel = 0
    rsp.operation_support.overflow_flag = 0
    info = SelInfo(rsp)
    assert 'get_sel_allocation_info' not in info.operation_support
    assert 'reserve_sel' not in info.operation_support
    assert 'partial_add_sel_entry' in info.operation_support
    assert 'delete_sel' not in info.operation_support
    assert 'overflow_flag' not in info.operation_support

    rsp.operation_support.get_sel_allocation_info = 0
    rsp.operation_support.reserve_sel = 0
    rsp.operation_support.partial_add_sel_entry = 0
    rsp.operation_support.delete_sel = 1
    rsp.operation_support.overflow_flag = 0
    info = SelInfo(rsp)
    assert 'get_sel_allocation_info' not in info.operation_support
    assert 'reserve_sel' not in info.operation_support
    assert 'partial_add_sel_entry' not in info.operation_support
    assert 'delete_sel' in info.operation_support
    assert 'overflow_flag' not in info.operation_support

    rsp.operation_support.get_sel_allocation_info = 0
    rsp.operation_support.reserve_sel = 0
    rsp.operation_support.partial_add_sel_entry = 0
    rsp.operation_support.delete_sel = 0
    rsp.operation_support.overflow_flag = 1
    info = SelInfo(rsp)
    assert 'get_sel_allocation_info' not in info.operation_support
    assert 'reserve_sel' not in info.operation_support
    assert 'partial_add_sel_entry' not in info.operation_support
    assert 'delete_sel' not in info.operation_support
    assert 'overflow_flag' in info.operation_support


class TestSelEnty:

    def test_from_data(self):
        data = [0xff, 0x03, 0x02, 0xf7, 0x61, 0xef, 0x52, 0x7e,
                0x00, 0x04, 0xf2, 0x09, 0x7f, 0x00, 0xff, 0xff]
        entry = SelEntry(data)
        assert entry.type == 2
        assert entry.sensor_type == 0xf2

    def test_from_data_event_direction(self):
        data = [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00]
        entry = SelEntry(data)
        assert entry.event_direction == 0

        data = [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00]
        entry = SelEntry(data)
        assert entry.event_direction == 1

    def test_from_data_event_type(self):
        data = [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00]
        entry = SelEntry(data)
        assert entry.event_type == 0x7f

        data = [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00]
        entry = SelEntry(data)
        assert entry.event_type == 0x00

    def test_from_data_event_data(self):
        data = [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0xff, 0x11, 0x22, 0x33]
        entry = SelEntry(data)
        assert entry.event_data[0] == 0x11
        assert entry.event_data[1] == 0x22
        assert entry.event_data[2] == 0x33

    def test_type_to_string(self):
        assert SelEntry.type_to_string(0) is None
        assert SelEntry.type_to_string(0x02) == 'System Event'
        assert SelEntry.type_to_string(0xc0) == 'OEM timestamped (0xc0)'
        assert SelEntry.type_to_string(0xe0) == 'OEM non-timestamped (0xe0)'