From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org
Subject: [PATCH v3 2/5] trace-cmd: Unit test for tracefs_instance_file_append() API
Date: Wed, 26 Feb 2020 18:31:56 +0200 [thread overview]
Message-ID: <20200226163159.20232-3-tz.stoyanov@gmail.com> (raw)
In-Reply-To: <20200226163159.20232-1-tz.stoyanov@gmail.com>
A unit test for tracefs_instance_file_append() API is added.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
utest/tracefs-utest.c | 106 +++++++++++++++++++++++++++++++++---------
1 file changed, 84 insertions(+), 22 deletions(-)
diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c
index 3f57ecad..1dc15e1b 100644
--- a/utest/tracefs-utest.c
+++ b/utest/tracefs-utest.c
@@ -176,6 +176,86 @@ static void test_instance_file_read(struct tracefs_instance *inst, char *fname)
#define ALL_TRACERS "available_tracers"
#define CUR_TRACER "current_tracer"
#define PER_CPU "per_cpu"
+#define SYNTH_EVENTS "synthetic_events"
+static void test_trace_file_read(struct tracefs_instance *instance)
+{
+ test_instance_file_read(NULL, ALL_TRACERS);
+ test_instance_file_read(instance, ALL_TRACERS);
+}
+
+static void test_trace_file_write(struct tracefs_instance *instance)
+{
+ char *tracer;
+ char *file1;
+ char *file2;
+ int size;
+ int ret;
+
+ file1 = tracefs_instance_file_read(instance, ALL_TRACERS, NULL);
+ CU_TEST(file1 != NULL);
+ tracer = strtok(file1, " ");
+ CU_TEST(tracer != NULL);
+ ret = tracefs_instance_file_write(instance, CUR_TRACER, tracer);
+ CU_TEST(ret == strlen(tracer));
+ file2 = tracefs_instance_file_read(instance, CUR_TRACER, &size);
+ CU_TEST(file2 != NULL);
+ CU_TEST(size >= strlen(tracer));
+ CU_TEST(strncmp(file2, tracer, strlen(tracer)) == 0);
+ free(file1);
+ free(file2);
+}
+
+static bool check_file_line(struct tracefs_instance *instance,
+ char *fname, char *line, bool last)
+{
+ bool found = false;
+ char *buf = NULL;
+ char *l;
+ int n;
+
+ buf = tracefs_instance_file_read(instance, fname, &n);
+ if (!buf)
+ return 0;
+ l = strtok(buf, "\n");
+ while (l) {
+ if (strncmp(l, line, strlen(line)) == 0) {
+ if (last) {
+ if (strtok(NULL, "\n") == NULL)
+ found = true;
+ } else
+ found = true;
+ break;
+ }
+ l = strtok(NULL, "\n");
+ }
+ free(buf);
+ return found;
+}
+
+static void test_trace_file_append(struct tracefs_instance *instance)
+{
+ char *sevent1 = "first u64 start; u64 end; pid_t pid; u64 delta";
+ char *sevent2 = "second u64 start; u64 end; pid_t pid; u64 delta";
+ char buf[256];
+ int ret;
+
+ if (!tracefs_file_exist(NULL, SYNTH_EVENTS))
+ return;
+
+ CU_TEST(!check_file_line(NULL, SYNTH_EVENTS, sevent1, false));
+ ret = tracefs_instance_file_append(NULL, SYNTH_EVENTS, sevent1);
+ CU_TEST(ret == strlen(sevent1));
+ CU_TEST(check_file_line(NULL, SYNTH_EVENTS, sevent1, true));
+ ret = tracefs_instance_file_append(NULL, SYNTH_EVENTS, sevent2);
+ CU_TEST(ret == strlen(sevent2));
+ CU_TEST(check_file_line(NULL, SYNTH_EVENTS, sevent1, false));
+ CU_TEST(check_file_line(NULL, SYNTH_EVENTS, sevent2, true));
+ snprintf(buf, 256, "!%s", sevent1);
+ tracefs_instance_file_write(NULL, SYNTH_EVENTS, buf);
+ snprintf(buf, 256, "!%s", sevent2);
+ tracefs_instance_file_write(NULL, SYNTH_EVENTS, buf);
+}
+
static void test_instance_file(void)
{
struct tracefs_instance *instance = NULL;
@@ -186,11 +266,6 @@ static void test_instance_file(void)
char *inst_dir;
struct stat st;
char *fname;
- char *file1;
- char *file2;
- char *tracer;
- int size;
- int ret;
tdir = tracefs_get_tracing_dir();
CU_TEST(tdir != NULL);
@@ -232,26 +307,13 @@ static void test_instance_file(void)
inst_file = tracefs_instance_get_file(instance, ALL_TRACERS);
CU_TEST(inst_file != NULL);
CU_TEST(strcmp(fname, inst_file) == 0);
-
- test_instance_file_read(NULL, ALL_TRACERS);
- test_instance_file_read(instance, ALL_TRACERS);
-
- file1 = tracefs_instance_file_read(instance, ALL_TRACERS, NULL);
- CU_TEST(file1 != NULL);
- tracer = strtok(file1, " ");
- CU_TEST(tracer != NULL);
- ret = tracefs_instance_file_write(instance, CUR_TRACER, tracer);
- CU_TEST(ret == strlen(tracer));
- file2 = tracefs_instance_file_read(instance, CUR_TRACER, &size);
- CU_TEST(file2 != NULL);
- CU_TEST(size >= strlen(tracer));
- CU_TEST(strncmp(file2, tracer, strlen(tracer)) == 0);
- free(file1);
- free(file2);
-
tracefs_put_tracing_file(inst_file);
free(fname);
+ test_trace_file_read(instance);
+ test_trace_file_write(instance);
+ test_trace_file_append(instance);
+
CU_TEST(tracefs_file_exist(NULL, (char *)name) == false);
CU_TEST(tracefs_dir_exist(NULL, (char *)name) == false);
CU_TEST(tracefs_file_exist(instance, (char *)name) == false);
--
2.24.1
next prev parent reply other threads:[~2020-02-26 16:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-26 16:31 [PATCH v3 0/5] trace-cmd: SQL-like syntax for ftrace histograms configuration Tzvetomir Stoyanov (VMware)
2020-02-26 16:31 ` [PATCH v3 1/5] trace-cmd: Add new libtracefs API tracefs_instance_file_append() Tzvetomir Stoyanov (VMware)
2020-02-26 16:31 ` Tzvetomir Stoyanov (VMware) [this message]
2020-02-26 16:31 ` [PATCH v3 3/5] trace-cmd: Add new libtraceevent flag to suppress parsing warnings Tzvetomir Stoyanov (VMware)
2020-02-26 16:31 ` [PATCH v3 4/5] trace-cmd: Suppress parsing warnings in tracefs_local_events() API Tzvetomir Stoyanov (VMware)
2020-02-26 16:31 ` [PATCH v3 5/5] trace-cmd: Add "--sql" option to trace-cmd start and record sub commands Tzvetomir Stoyanov (VMware)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200226163159.20232-3-tz.stoyanov@gmail.com \
--to=tz.stoyanov@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).