Skip to content

Commit

Permalink
test.lua: Port the test_uprobes suite
Browse files Browse the repository at this point in the history
  • Loading branch information
vmg committed Mar 30, 2016
1 parent b2a64a7 commit 72d7aa3
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions tests/lua/test_uprobes.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
require("test_helper")
local ffi = require("ffi")

ffi.cdef[[
int getpid(void);
void malloc_stats(void);
]]

TestUprobes = {}

function TestUprobes:test_simple_library()
local text = [[
#include <uapi/linux/ptrace.h>
BPF_TABLE("array", int, u64, stats, 1);
static void incr(int idx) {
u64 *ptr = stats.lookup(&idx);
if (ptr)
++(*ptr);
}
int count(struct pt_regs *ctx) {
u32 pid = bpf_get_current_pid_tgid();
if (pid == PID)
incr(0);
return 0;
}]]

local pid = tonumber(ffi.C.getpid())
local text = text:gsub("PID", tostring(pid))

local b = BPF:new{text=text}
b:attach_uprobe{name="c", sym="malloc_stats", fn_name="count"}
b:attach_uprobe{name="c", sym="malloc_stats", fn_name="count", retprobe=true}

assert_equals(BPF.num_open_uprobes(), 2)

ffi.C.malloc_stats()

local stats = b:get_table("stats")
assert_equals(tonumber(stats:get(0)), 2)
end

function TestUprobes:test_simple_binary()
local text = [[
#include <uapi/linux/ptrace.h>
BPF_TABLE("array", int, u64, stats, 1);
static void incr(int idx) {
u64 *ptr = stats.lookup(&idx);
if (ptr)
++(*ptr);
}
int count(struct pt_regs *ctx) {
u32 pid = bpf_get_current_pid_tgid();
incr(0);
return 0;
}]]

local b = BPF:new{text=text}
b:attach_uprobe{name="/usr/bin/python", sym="main", fn_name="count"}
b:attach_uprobe{name="/usr/bin/python", sym="main", fn_name="count", retprobe=true}

os.spawn("/usr/bin/python -V")

local stats = b:get_table("stats")
assert_true(tonumber(stats:get(0)) >= 2)
end

function TestUprobes:teardown()
BPF.cleanup_probes()
end

os.exit(LuaUnit.run())

0 comments on commit 72d7aa3

Please sign in to comment.