59 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2020, Oracle and/or its affiliates. */3 4#include <test_progs.h>5 6#include "trace_printk.lskel.h"7 8#define SEARCHMSG "testing,testing"9 10static void trace_pipe_cb(const char *str, void *data)11{12 if (strstr(str, SEARCHMSG) != NULL)13 (*(int *)data)++;14}15 16void serial_test_trace_printk(void)17{18 struct trace_printk_lskel__bss *bss;19 struct trace_printk_lskel *skel;20 int err = 0, found = 0;21 22 skel = trace_printk_lskel__open();23 if (!ASSERT_OK_PTR(skel, "trace_printk__open"))24 return;25 26 ASSERT_EQ(skel->rodata->fmt[0], 'T', "skel->rodata->fmt[0]");27 skel->rodata->fmt[0] = 't';28 29 err = trace_printk_lskel__load(skel);30 if (!ASSERT_OK(err, "trace_printk__load"))31 goto cleanup;32 33 bss = skel->bss;34 35 err = trace_printk_lskel__attach(skel);36 if (!ASSERT_OK(err, "trace_printk__attach"))37 goto cleanup;38 39 /* wait for tracepoint to trigger */40 usleep(1);41 trace_printk_lskel__detach(skel);42 43 if (!ASSERT_GT(bss->trace_printk_ran, 0, "bss->trace_printk_ran"))44 goto cleanup;45 46 if (!ASSERT_GT(bss->trace_printk_ret, 0, "bss->trace_printk_ret"))47 goto cleanup;48 49 /* verify our search string is in the trace buffer */50 ASSERT_OK(read_trace_pipe_iter(trace_pipe_cb, &found, 1000),51 "read_trace_pipe_iter");52 53 if (!ASSERT_EQ(found, bss->trace_printk_ran, "found"))54 goto cleanup;55 56cleanup:57 trace_printk_lskel__destroy(skel);58}59