selftests/bpf: Add tests for ring__*_pos
authorMartin Kelly <martin.kelly@crowdstrike.com>
Mon, 25 Sep 2023 21:50:37 +0000 (14:50 -0700)
committerAndrii Nakryiko <andrii@kernel.org>
Mon, 25 Sep 2023 23:22:42 +0000 (16:22 -0700)
Add tests for the new APIs ring__producer_pos and ring__consumer_pos.

Signed-off-by: Martin Kelly <martin.kelly@crowdstrike.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230925215045.2375758-7-martin.kelly@crowdstrike.com
tools/testing/selftests/bpf/prog_tests/ringbuf.c

index ac104dc652e32a7d5e8ff515300224a18b5f4524..994a36a2b5893c6b93e45ca8aacfc0a0460695e5 100644 (file)
@@ -91,6 +91,8 @@ static void ringbuf_subtest(void)
        int err, cnt, rb_fd;
        int page_size = getpagesize();
        void *mmap_ptr, *tmp_ptr;
+       struct ring *ring;
+       unsigned long cons_pos, prod_pos;
 
        skel = test_ringbuf_lskel__open();
        if (CHECK(!skel, "skel_open", "skeleton open failed\n"))
@@ -162,6 +164,10 @@ static void ringbuf_subtest(void)
 
        trigger_samples();
 
+       ring = ring_buffer__ring(ringbuf, 0);
+       if (!ASSERT_OK_PTR(ring, "ring_buffer__ring_idx_0"))
+               goto cleanup;
+
        /* 2 submitted + 1 discarded records */
        CHECK(skel->bss->avail_data != 3 * rec_sz,
              "err_avail_size", "exp %ld, got %ld\n",
@@ -176,6 +182,14 @@ static void ringbuf_subtest(void)
              "err_prod_pos", "exp %ld, got %ld\n",
              3L * rec_sz, skel->bss->prod_pos);
 
+       /* verify getting this data directly via the ring object yields the same
+        * results
+        */
+       cons_pos = ring__consumer_pos(ring);
+       ASSERT_EQ(cons_pos, 0, "ring_cons_pos");
+       prod_pos = ring__producer_pos(ring);
+       ASSERT_EQ(prod_pos, 3 * rec_sz, "ring_prod_pos");
+
        /* poll for samples */
        err = ring_buffer__poll(ringbuf, -1);