xref: /aosp_15_r20/external/bcc/tests/python/test_bpf_log.py (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc.
3*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License")
4*387f9dfdSAndroid Build Coastguard Worker
5*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF
6*387f9dfdSAndroid Build Coastguard Workerfrom simulation import Simulation
7*387f9dfdSAndroid Build Coastguard Workerimport sys
8*387f9dfdSAndroid Build Coastguard Workerimport os
9*387f9dfdSAndroid Build Coastguard Workerimport tempfile
10*387f9dfdSAndroid Build Coastguard Workerfrom unittest import main, TestCase
11*387f9dfdSAndroid Build Coastguard Worker
12*387f9dfdSAndroid Build Coastguard Worker
13*387f9dfdSAndroid Build Coastguard Workererror_msg = "R0 invalid mem access 'map_value_or_null'\n"
14*387f9dfdSAndroid Build Coastguard Worker
15*387f9dfdSAndroid Build Coastguard Workertext = b"""
16*387f9dfdSAndroid Build Coastguard Worker       #include <uapi/linux/ptrace.h>
17*387f9dfdSAndroid Build Coastguard Worker       #include <bcc/proto.h>
18*387f9dfdSAndroid Build Coastguard Worker       BPF_HASH(t1, int, int, 10);
19*387f9dfdSAndroid Build Coastguard Worker       int sim_port(struct __sk_buff *skb) {
20*387f9dfdSAndroid Build Coastguard Worker           int x = 0, *y;
21*387f9dfdSAndroid Build Coastguard Worker       """
22*387f9dfdSAndroid Build Coastguard Workerrepeat = b"""
23*387f9dfdSAndroid Build Coastguard Worker           y = t1.lookup(&x);
24*387f9dfdSAndroid Build Coastguard Worker           if (!y) return 0;
25*387f9dfdSAndroid Build Coastguard Worker           x = *y;
26*387f9dfdSAndroid Build Coastguard Worker         """
27*387f9dfdSAndroid Build Coastguard Workerend = b"""
28*387f9dfdSAndroid Build Coastguard Worker           y = t1.lookup(&x);
29*387f9dfdSAndroid Build Coastguard Worker           x = *y;
30*387f9dfdSAndroid Build Coastguard Worker           return 0;
31*387f9dfdSAndroid Build Coastguard Worker        }
32*387f9dfdSAndroid Build Coastguard Worker      """
33*387f9dfdSAndroid Build Coastguard Workerfor i in range(0,300):
34*387f9dfdSAndroid Build Coastguard Worker    text += repeat
35*387f9dfdSAndroid Build Coastguard Workertext += end
36*387f9dfdSAndroid Build Coastguard Worker
37*387f9dfdSAndroid Build Coastguard Workerclass TestBPFProgLoad(TestCase):
38*387f9dfdSAndroid Build Coastguard Worker
39*387f9dfdSAndroid Build Coastguard Worker    def setUp(self):
40*387f9dfdSAndroid Build Coastguard Worker        self.fp = tempfile.TemporaryFile()
41*387f9dfdSAndroid Build Coastguard Worker        os.dup2(self.fp.fileno(), sys.stderr.fileno())
42*387f9dfdSAndroid Build Coastguard Worker
43*387f9dfdSAndroid Build Coastguard Worker    def tearDown(self):
44*387f9dfdSAndroid Build Coastguard Worker        self.fp.close()
45*387f9dfdSAndroid Build Coastguard Worker
46*387f9dfdSAndroid Build Coastguard Worker
47*387f9dfdSAndroid Build Coastguard Worker    def test_log_debug(self):
48*387f9dfdSAndroid Build Coastguard Worker        b = BPF(text=text, debug=2)
49*387f9dfdSAndroid Build Coastguard Worker        try:
50*387f9dfdSAndroid Build Coastguard Worker            ingress = b.load_func(b"sim_port",BPF.SCHED_CLS)
51*387f9dfdSAndroid Build Coastguard Worker        except Exception:
52*387f9dfdSAndroid Build Coastguard Worker            self.fp.flush()
53*387f9dfdSAndroid Build Coastguard Worker            self.fp.seek(0)
54*387f9dfdSAndroid Build Coastguard Worker            self.assertEqual(error_msg in self.fp.read().decode(), True)
55*387f9dfdSAndroid Build Coastguard Worker
56*387f9dfdSAndroid Build Coastguard Worker
57*387f9dfdSAndroid Build Coastguard Worker    def test_log_no_debug(self):
58*387f9dfdSAndroid Build Coastguard Worker        b = BPF(text=text, debug=0)
59*387f9dfdSAndroid Build Coastguard Worker        try:
60*387f9dfdSAndroid Build Coastguard Worker            ingress = b.load_func(b"sim_port",BPF.SCHED_CLS)
61*387f9dfdSAndroid Build Coastguard Worker        except Exception:
62*387f9dfdSAndroid Build Coastguard Worker            self.fp.flush()
63*387f9dfdSAndroid Build Coastguard Worker            self.fp.seek(0)
64*387f9dfdSAndroid Build Coastguard Worker            self.assertEqual(error_msg in self.fp.read().decode(), True)
65*387f9dfdSAndroid Build Coastguard Worker
66*387f9dfdSAndroid Build Coastguard Worker
67*387f9dfdSAndroid Build Coastguard Workerif __name__ == "__main__":
68*387f9dfdSAndroid Build Coastguard Worker    main()
69*387f9dfdSAndroid Build Coastguard Worker
70*387f9dfdSAndroid Build Coastguard Worker
71