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