Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /* Copyright (c) 2021 Facebook */
0003 #include <test_progs.h>
0004 #include "timer.skel.h"
0005 
0006 static int timer(struct timer *timer_skel)
0007 {
0008     int err, prog_fd;
0009     LIBBPF_OPTS(bpf_test_run_opts, topts);
0010 
0011     err = timer__attach(timer_skel);
0012     if (!ASSERT_OK(err, "timer_attach"))
0013         return err;
0014 
0015     ASSERT_EQ(timer_skel->data->callback_check, 52, "callback_check1");
0016     ASSERT_EQ(timer_skel->data->callback2_check, 52, "callback2_check1");
0017 
0018     prog_fd = bpf_program__fd(timer_skel->progs.test1);
0019     err = bpf_prog_test_run_opts(prog_fd, &topts);
0020     ASSERT_OK(err, "test_run");
0021     ASSERT_EQ(topts.retval, 0, "test_run");
0022     timer__detach(timer_skel);
0023 
0024     usleep(50); /* 10 usecs should be enough, but give it extra */
0025     /* check that timer_cb1() was executed 10+10 times */
0026     ASSERT_EQ(timer_skel->data->callback_check, 42, "callback_check2");
0027     ASSERT_EQ(timer_skel->data->callback2_check, 42, "callback2_check2");
0028 
0029     /* check that timer_cb2() was executed twice */
0030     ASSERT_EQ(timer_skel->bss->bss_data, 10, "bss_data");
0031 
0032     /* check that there were no errors in timer execution */
0033     ASSERT_EQ(timer_skel->bss->err, 0, "err");
0034 
0035     /* check that code paths completed */
0036     ASSERT_EQ(timer_skel->bss->ok, 1 | 2 | 4, "ok");
0037 
0038     return 0;
0039 }
0040 
0041 /* TODO: use pid filtering */
0042 void serial_test_timer(void)
0043 {
0044     struct timer *timer_skel = NULL;
0045     int err;
0046 
0047     timer_skel = timer__open_and_load();
0048     if (!ASSERT_OK_PTR(timer_skel, "timer_skel_load"))
0049         goto cleanup;
0050 
0051     err = timer(timer_skel);
0052     ASSERT_OK(err, "timer");
0053 cleanup:
0054     timer__destroy(timer_skel);
0055 }