Merge tag 'powerpc-5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[linux-2.6-microblaze.git] / tools / testing / selftests / bpf / prog_tests / varlen.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2020 Facebook */
3
4 #include <test_progs.h>
5 #include <time.h>
6 #include "test_varlen.skel.h"
7
8 #define CHECK_VAL(got, exp) \
9         CHECK((got) != (exp), "check", "got %ld != exp %ld\n", \
10               (long)(got), (long)(exp))
11
12 void test_varlen(void)
13 {
14         int duration = 0, err;
15         struct test_varlen* skel;
16         struct test_varlen__bss *bss;
17         struct test_varlen__data *data;
18         const char str1[] = "Hello, ";
19         const char str2[] = "World!";
20         const char exp_str[] = "Hello, \0World!\0";
21         const int size1 = sizeof(str1);
22         const int size2 = sizeof(str2);
23
24         skel = test_varlen__open_and_load();
25         if (CHECK(!skel, "skel_open", "failed to open skeleton\n"))
26                 return;
27         bss = skel->bss;
28         data = skel->data;
29
30         err = test_varlen__attach(skel);
31         if (CHECK(err, "skel_attach", "skeleton attach failed: %d\n", err))
32                 goto cleanup;
33
34         bss->test_pid = getpid();
35
36         /* trigger everything */
37         memcpy(bss->buf_in1, str1, size1);
38         memcpy(bss->buf_in2, str2, size2);
39         bss->capture = true;
40         usleep(1);
41         bss->capture = false;
42
43         CHECK_VAL(bss->payload1_len1, size1);
44         CHECK_VAL(bss->payload1_len2, size2);
45         CHECK_VAL(bss->total1, size1 + size2);
46         CHECK(memcmp(bss->payload1, exp_str, size1 + size2), "content_check",
47               "doesn't match!\n");
48
49         CHECK_VAL(data->payload2_len1, size1);
50         CHECK_VAL(data->payload2_len2, size2);
51         CHECK_VAL(data->total2, size1 + size2);
52         CHECK(memcmp(data->payload2, exp_str, size1 + size2), "content_check",
53               "doesn't match!\n");
54
55         CHECK_VAL(data->payload3_len1, size1);
56         CHECK_VAL(data->payload3_len2, size2);
57         CHECK_VAL(data->total3, size1 + size2);
58         CHECK(memcmp(data->payload3, exp_str, size1 + size2), "content_check",
59               "doesn't match!\n");
60
61         CHECK_VAL(data->payload4_len1, size1);
62         CHECK_VAL(data->payload4_len2, size2);
63         CHECK_VAL(data->total4, size1 + size2);
64         CHECK(memcmp(data->payload4, exp_str, size1 + size2), "content_check",
65               "doesn't match!\n");
66 cleanup:
67         test_varlen__destroy(skel);
68 }