xref: /freebsd/tests/sys/netlink/test_netlink_message_writer.py (revision c1839039b193b48c8eb7520c75487f0bd4340c3b)
1*c1839039SAlexander V. Chernikovimport mmap
2*c1839039SAlexander V. Chernikovimport pytest
3*c1839039SAlexander V. Chernikov
4*c1839039SAlexander V. Chernikovfrom atf_python.ktest import BaseKernelTest
5*c1839039SAlexander V. Chernikovfrom atf_python.sys.netlink.attrs import NlAttrU32
6*c1839039SAlexander V. Chernikov
7*c1839039SAlexander V. Chernikov
8*c1839039SAlexander V. ChernikovM_NOWAIT = 1
9*c1839039SAlexander V. ChernikovM_WAITOK = 2
10*c1839039SAlexander V. ChernikovNS_WRITER_TYPE_MBUF = 0
11*c1839039SAlexander V. ChernikovNS_WRITER_TYPE_BUF = 1
12*c1839039SAlexander V. ChernikovNS_WRITER_TYPE_LBUF = 1
13*c1839039SAlexander V. Chernikov
14*c1839039SAlexander V. ChernikovMHLEN = 160
15*c1839039SAlexander V. ChernikovMCLBYTES = 2048  # XXX: may differ on some archs?
16*c1839039SAlexander V. ChernikovMJUMPAGESIZE = mmap.PAGESIZE
17*c1839039SAlexander V. ChernikovMJUM9BYTES = 9 * 1024
18*c1839039SAlexander V. ChernikovMJUM16BYTES = 16 * 1024
19*c1839039SAlexander V. Chernikov
20*c1839039SAlexander V. Chernikov
21*c1839039SAlexander V. Chernikovclass TestNetlinkMessageWriter(BaseKernelTest):
22*c1839039SAlexander V. Chernikov    KTEST_MODULE_NAME = "ktest_netlink_message_writer"
23*c1839039SAlexander V. Chernikov
24*c1839039SAlexander V. Chernikov    @pytest.mark.parametrize(
25*c1839039SAlexander V. Chernikov        "malloc_flags",
26*c1839039SAlexander V. Chernikov        [
27*c1839039SAlexander V. Chernikov            pytest.param(M_NOWAIT, id="NOWAIT"),
28*c1839039SAlexander V. Chernikov            pytest.param(M_WAITOK, id="WAITOK"),
29*c1839039SAlexander V. Chernikov        ],
30*c1839039SAlexander V. Chernikov    )
31*c1839039SAlexander V. Chernikov    @pytest.mark.parametrize(
32*c1839039SAlexander V. Chernikov        "writer_type",
33*c1839039SAlexander V. Chernikov        [
34*c1839039SAlexander V. Chernikov            pytest.param(NS_WRITER_TYPE_MBUF, id="MBUF"),
35*c1839039SAlexander V. Chernikov            pytest.param(NS_WRITER_TYPE_BUF, id="BUF"),
36*c1839039SAlexander V. Chernikov        ],
37*c1839039SAlexander V. Chernikov    )
38*c1839039SAlexander V. Chernikov    @pytest.mark.parametrize(
39*c1839039SAlexander V. Chernikov        "sz",
40*c1839039SAlexander V. Chernikov        [
41*c1839039SAlexander V. Chernikov            pytest.param([160, 160], id="MHLEN"),
42*c1839039SAlexander V. Chernikov            pytest.param([MCLBYTES, MCLBYTES], id="MCLBYTES"),
43*c1839039SAlexander V. Chernikov        ],
44*c1839039SAlexander V. Chernikov    )
45*c1839039SAlexander V. Chernikov    def test_mbuf_writer_allocation(self, sz, writer_type, malloc_flags):
46*c1839039SAlexander V. Chernikov        """override to parametrize"""
47*c1839039SAlexander V. Chernikov
48*c1839039SAlexander V. Chernikov        test_meta = [
49*c1839039SAlexander V. Chernikov            NlAttrU32(1, sz[0]),  # size
50*c1839039SAlexander V. Chernikov            NlAttrU32(2, sz[1]),  # expected_avail
51*c1839039SAlexander V. Chernikov            NlAttrU32(4, writer_type),
52*c1839039SAlexander V. Chernikov            NlAttrU32(5, malloc_flags),
53*c1839039SAlexander V. Chernikov        ]
54*c1839039SAlexander V. Chernikov        self.runtest(test_meta)
55*c1839039SAlexander V. Chernikov
56*c1839039SAlexander V. Chernikov    @pytest.mark.parametrize(
57*c1839039SAlexander V. Chernikov        "malloc_flags",
58*c1839039SAlexander V. Chernikov        [
59*c1839039SAlexander V. Chernikov            pytest.param(M_NOWAIT, id="NOWAIT"),
60*c1839039SAlexander V. Chernikov            pytest.param(M_WAITOK, id="WAITOK"),
61*c1839039SAlexander V. Chernikov        ],
62*c1839039SAlexander V. Chernikov    )
63*c1839039SAlexander V. Chernikov    @pytest.mark.parametrize(
64*c1839039SAlexander V. Chernikov        "sz",
65*c1839039SAlexander V. Chernikov        [
66*c1839039SAlexander V. Chernikov            pytest.param([160, 160, 1], id="MHLEN"),
67*c1839039SAlexander V. Chernikov            pytest.param([MCLBYTES, MCLBYTES, 1], id="MCLBYTES"),
68*c1839039SAlexander V. Chernikov            pytest.param([MCLBYTES + 1, MCLBYTES + 1, 2], id="MCLBYTES_MHLEN"),
69*c1839039SAlexander V. Chernikov            pytest.param([MCLBYTES + 256, MCLBYTES * 2, 2], id="MCLBYTESx2"),
70*c1839039SAlexander V. Chernikov        ],
71*c1839039SAlexander V. Chernikov    )
72*c1839039SAlexander V. Chernikov    def test_mbuf_chain_allocation(self, sz, malloc_flags):
73*c1839039SAlexander V. Chernikov        test_meta = [
74*c1839039SAlexander V. Chernikov            NlAttrU32(1, sz[0]),  # size
75*c1839039SAlexander V. Chernikov            NlAttrU32(2, sz[1]),  # expected_avail
76*c1839039SAlexander V. Chernikov            NlAttrU32(3, sz[2]),  # expected_count
77*c1839039SAlexander V. Chernikov            NlAttrU32(5, malloc_flags),
78*c1839039SAlexander V. Chernikov        ]
79*c1839039SAlexander V. Chernikov        self.runtest(test_meta)
80