xref: /aosp_15_r20/external/bcc/tests/python/test_rlimit.py (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*387f9dfdSAndroid Build Coastguard Worker#
3*387f9dfdSAndroid Build Coastguard Worker# USAGE: test_usdt.py
4*387f9dfdSAndroid Build Coastguard Worker#
5*387f9dfdSAndroid Build Coastguard Worker# Copyright 2018 Facebook, Inc
6*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License")
7*387f9dfdSAndroid Build Coastguard Worker
8*387f9dfdSAndroid Build Coastguard Workerfrom __future__ import print_function
9*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF
10*387f9dfdSAndroid Build Coastguard Workerfrom unittest import main, skipUnless, TestCase
11*387f9dfdSAndroid Build Coastguard Workerfrom utils import kernel_version_ge
12*387f9dfdSAndroid Build Coastguard Workerimport os, resource
13*387f9dfdSAndroid Build Coastguard Worker
14*387f9dfdSAndroid Build Coastguard Worker@skipUnless(not kernel_version_ge(5, 11), "Since d5299b67dd59 \"bpf: Memcg-based memory accounting for bpf maps\""\
15*387f9dfdSAndroid Build Coastguard Worker                                          ",map mem has been counted against memcg, not rlimit")
16*387f9dfdSAndroid Build Coastguard Workerclass TestRlimitMemlock(TestCase):
17*387f9dfdSAndroid Build Coastguard Worker    def testRlimitMemlock(self):
18*387f9dfdSAndroid Build Coastguard Worker        text = b"""
19*387f9dfdSAndroid Build Coastguard WorkerBPF_HASH(unused, u64, u64, 65536);
20*387f9dfdSAndroid Build Coastguard Workerint test() { return 0; }
21*387f9dfdSAndroid Build Coastguard Worker"""
22*387f9dfdSAndroid Build Coastguard Worker        # save the original memlock limits
23*387f9dfdSAndroid Build Coastguard Worker        memlock_limit = resource.getrlimit(resource.RLIMIT_MEMLOCK)
24*387f9dfdSAndroid Build Coastguard Worker
25*387f9dfdSAndroid Build Coastguard Worker        # set a small RLIMIT_MEMLOCK limit
26*387f9dfdSAndroid Build Coastguard Worker        resource.setrlimit(resource.RLIMIT_MEMLOCK, (4096, 4096))
27*387f9dfdSAndroid Build Coastguard Worker
28*387f9dfdSAndroid Build Coastguard Worker        # below will fail
29*387f9dfdSAndroid Build Coastguard Worker        failed = 0
30*387f9dfdSAndroid Build Coastguard Worker        try:
31*387f9dfdSAndroid Build Coastguard Worker            b = BPF(text=text, allow_rlimit=False)
32*387f9dfdSAndroid Build Coastguard Worker        except:
33*387f9dfdSAndroid Build Coastguard Worker            failed = 1
34*387f9dfdSAndroid Build Coastguard Worker        self.assertEqual(failed, 1)
35*387f9dfdSAndroid Build Coastguard Worker
36*387f9dfdSAndroid Build Coastguard Worker        # below should succeed
37*387f9dfdSAndroid Build Coastguard Worker        b = BPF(text=text, allow_rlimit=True)
38*387f9dfdSAndroid Build Coastguard Worker
39*387f9dfdSAndroid Build Coastguard Worker        # reset to the original memlock limits
40*387f9dfdSAndroid Build Coastguard Worker        resource.setrlimit(resource.RLIMIT_MEMLOCK, memlock_limit)
41*387f9dfdSAndroid Build Coastguard Worker
42*387f9dfdSAndroid Build Coastguard Workerif __name__ == "__main__":
43*387f9dfdSAndroid Build Coastguard Worker    main()
44