]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/netlink/test_netlink_message_writer.py
zfs: merge openzfs/zfs@8e8acabdc
[FreeBSD/FreeBSD.git] / tests / sys / netlink / test_netlink_message_writer.py
1 import mmap
2 import pytest
3
4 from atf_python.ktest import BaseKernelTest
5 from atf_python.sys.netlink.attrs import NlAttrU32
6
7
8 M_NOWAIT = 1
9 M_WAITOK = 2
10 NS_WRITER_TYPE_MBUF = 0
11 NS_WRITER_TYPE_BUF = 1
12 NS_WRITER_TYPE_LBUF = 1
13
14 MHLEN = 160
15 MCLBYTES = 2048  # XXX: may differ on some archs?
16 MJUMPAGESIZE = mmap.PAGESIZE
17 MJUM9BYTES = 9 * 1024
18 MJUM16BYTES = 16 * 1024
19
20
21 class TestNetlinkMessageWriter(BaseKernelTest):
22     KTEST_MODULE_NAME = "ktest_netlink_message_writer"
23
24     @pytest.mark.parametrize(
25         "malloc_flags",
26         [
27             pytest.param(M_NOWAIT, id="NOWAIT"),
28             pytest.param(M_WAITOK, id="WAITOK"),
29         ],
30     )
31     @pytest.mark.parametrize(
32         "writer_type",
33         [
34             pytest.param(NS_WRITER_TYPE_MBUF, id="MBUF"),
35             pytest.param(NS_WRITER_TYPE_BUF, id="BUF"),
36         ],
37     )
38     @pytest.mark.parametrize(
39         "sz",
40         [
41             pytest.param([160, 160], id="MHLEN"),
42             pytest.param([MCLBYTES, MCLBYTES], id="MCLBYTES"),
43         ],
44     )
45     def test_mbuf_writer_allocation(self, sz, writer_type, malloc_flags):
46         """override to parametrize"""
47
48         test_meta = [
49             NlAttrU32(1, sz[0]),  # size
50             NlAttrU32(2, sz[1]),  # expected_avail
51             NlAttrU32(4, writer_type),
52             NlAttrU32(5, malloc_flags),
53         ]
54         self.runtest(test_meta)
55
56     @pytest.mark.parametrize(
57         "malloc_flags",
58         [
59             pytest.param(M_NOWAIT, id="NOWAIT"),
60             pytest.param(M_WAITOK, id="WAITOK"),
61         ],
62     )
63     @pytest.mark.parametrize(
64         "sz",
65         [
66             pytest.param([160, 160, 1], id="MHLEN"),
67             pytest.param([MCLBYTES, MCLBYTES, 1], id="MCLBYTES"),
68             pytest.param([MCLBYTES + 1, MCLBYTES + 1, 2], id="MCLBYTES_MHLEN"),
69             pytest.param([MCLBYTES + 256, MCLBYTES * 2, 2], id="MCLBYTESx2"),
70         ],
71     )
72     def test_mbuf_chain_allocation(self, sz, malloc_flags):
73         test_meta = [
74             NlAttrU32(1, sz[0]),  # size
75             NlAttrU32(2, sz[1]),  # expected_avail
76             NlAttrU32(3, sz[2]),  # expected_count
77             NlAttrU32(5, malloc_flags),
78         ]
79         self.runtest(test_meta)