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