blob: 3fe1dceaf3b7ec986ac1291021b9dd9ae66b3d64 [file] [log] [blame]
Brenden Blanco14915e02015-10-06 12:05:25 -07001#!/usr/bin/env python
2# Copyright (c) PLUMgrid, Inc.
3# Licensed under the Apache License, Version 2.0 (the "License")
4
5from bcc import BPF
Brenden Blanco0dd24412016-02-17 00:26:14 -08006import ctypes as ct
Brenden Blanco14915e02015-10-06 12:05:25 -07007import random
8import time
9from unittest import main, TestCase
10
11class TestArray(TestCase):
12 def test_simple(self):
13 b = BPF(text="""BPF_TABLE("array", int, u64, table1, 128);""")
14 t1 = b["table1"]
Brenden Blanco0dd24412016-02-17 00:26:14 -080015 t1[ct.c_int(0)] = ct.c_ulonglong(100)
16 t1[ct.c_int(127)] = ct.c_ulonglong(1000)
Brenden Blanco14915e02015-10-06 12:05:25 -070017 for i, v in t1.items():
18 if i.value == 0:
19 self.assertEqual(v.value, 100)
20 if i.value == 127:
21 self.assertEqual(v.value, 1000)
22 self.assertEqual(len(t1), 128)
23
Brenden Blancof7767b52016-02-16 17:36:26 +010024 def test_native_type(self):
25 b = BPF(text="""BPF_TABLE("array", int, u64, table1, 128);""")
26 t1 = b["table1"]
Brenden Blanco0dd24412016-02-17 00:26:14 -080027 t1[0] = ct.c_ulonglong(100)
28 t1[-2] = ct.c_ulonglong(37)
29 t1[127] = ct.c_ulonglong(1000)
Brenden Blancof7767b52016-02-16 17:36:26 +010030 for i, v in t1.items():
31 if i.value == 0:
32 self.assertEqual(v.value, 100)
33 if i.value == 127:
34 self.assertEqual(v.value, 1000)
35 self.assertEqual(len(t1), 128)
36 self.assertEqual(t1[-2].value, 37)
37 self.assertEqual(t1[-1].value, t1[127].value)
38
Brenden Blanco0dd24412016-02-17 00:26:14 -080039 def test_perf_buffer(self):
40 self.counter = 0
41
42 class Data(ct.Structure):
43 _fields_ = [("ts", ct.c_ulonglong)]
44
45 def cb(cpu, data, size):
46 self.assertGreater(size, ct.sizeof(Data))
47 event = ct.cast(data, ct.POINTER(Data)).contents
48 self.counter += 1
49
50 text = """
51BPF_PERF_OUTPUT(events);
52int kprobe__sys_nanosleep(void *ctx) {
53 struct {
54 u64 ts;
55 } data = {bpf_ktime_get_ns()};
56 events.perf_submit(ctx, &data, sizeof(data));
57 return 0;
58}
59"""
60 b = BPF(text=text)
61 b["events"].open_perf_buffer(cb)
62 time.sleep(0.1)
63 b.kprobe_poll()
64 self.assertGreater(self.counter, 0)
65
Brenden Blanco14915e02015-10-06 12:05:25 -070066if __name__ == "__main__":
67 main()