NAME it shows version
RUN bpftrace --version
EXPECT bpftrace v
TIMEOUT 1

NAME it shows usage with help flag
RUN bpftrace -h
EXPECT USAGE
TIMEOUT 1

NAME it shows usage with bad flag
RUN bpftrace -idonotexist
EXPECT USAGE
TIMEOUT 1

NAME errors on non existent file
RUN bpftrace non_existent_file.bt
EXPECT Error opening file 'non_existent_file.bt': No such file or directory
TIMEOUT 1

NAME it lists kprobes
RUN bpftrace -l | grep kprobes
EXPECT kprobe
TIMEOUT 1

NAME it lists tracepoints
RUN bpftrace -l | grep tracepoint
EXPECT tracepoint
TIMEOUT 1

NAME it lists software events
RUN bpftrace -l | grep software
EXPECT software
TIMEOUT 1

NAME it lists hardware events
RUN bpftrace -l | grep hardware
EXPECT hardware
TIMEOUT 1

NAME it lists kprobes with regex filter
RUN bpftrace -l "kprobe:*"
EXPECT kprobe:
TIMEOUT 1

NAME it lists tracepoints with regex filter
RUN bpftrace -l "tracepoint:raw_syscalls:*"
EXPECT tracepoint:raw_syscalls:sys_exit
TIMEOUT 1

NAME it lists software events with regex filter
RUN bpftrace -l "software:*"
EXPECT software
TIMEOUT 1

NAME it lists hardware events with regex filter
RUN bpftrace -l "hardware:*"
EXPECT hardware
TIMEOUT 1

NAME errors on invalid character in search expression
RUN bpftrace -l '\n'
EXPECT ERROR: invalid character in search expression
TIMEOUT 1

NAME pid fails validation with leading non-number
RUN bpftrace -p a1111
EXPECT ERROR: pid 'a1111' is not a valid number.
TIMEOUT 1

NAME pid fails validation with non-number in between
RUN bpftrace -p 111a1
EXPECT ERROR: pid '111a1' is not a valid number.
TIMEOUT 1

NAME pid fails validation with non-numeric argument
RUN bpftrace -p not_a_pid
EXPECT ERROR: pid 'not_a_pid' is not a valid number.
TIMEOUT 1

NAME libraries under /usr/include are in the search path
RUN bpftrace -e "$(echo "#include <sys/types.h>"; echo "BEGIN { exit(); }")" 2>&1
EXPECT ^((?!file not found).)*$
TIMEOUT 1

NAME non existent library include fails
RUN bpftrace -e "$(echo "#include <lol/no.h>"; echo "BEGIN { exit(); }")" 2>&1
EXPECT file not found
TIMEOUT 1

NAME defines work
RUN bpftrace -e "$(echo '#define _UNDERSCORE 314'; echo 'BEGIN { printf("%d\\n", _UNDERSCORE); exit(); }')"
EXPECT 314
TIMEOUT 1

NAME increment/decrement map
RUN bpftrace -e 'BEGIN { @x = 10; printf("%d", @x++); printf(" %d", ++@x); printf(" %d", @x--); printf(" %d\n", --@x); delete(@x); exit(); }'
EXPECT 10 12 12 10
TIMEOUT 1

NAME increment/decrement variable
RUN bpftrace -e 'BEGIN { $x = 10; printf("%d", $x++); printf(" %d", ++$x); printf(" %d", $x--); printf(" %d\n", --$x); exit(); }'
EXPECT 10 12 12 10
TIMEOUT 1
