From 4bb5f0b0dcbd4c7bd09342be42f3b062a78c27ed Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Tue, 5 May 2020 12:19:13 -0400 Subject: [PATCH] Tests: `gen-ust-nevents`: add syncpoints MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Adds two sync points: `--sync-in-main`: create a file when `gen-ust-nevents` when app is in main, `--sync-before-first-event`: wait on a file before starting to generate any events. Those two sync points allow for tests to do work when the testapp has reached main BUT before any events are generated. This is useful to perform actions on a UST channel once tracing has started and is active on a particular app. For example, we want to test a scenario where events are enabled once an app is already generating other events. Signed-off-by: Francis Deslauriers Signed-off-by: Jérémie Galarneau Change-Id: Id501c8b373e1a9b43aad6caef11672fe6c30a55a --- .../testapp/gen-ust-nevents/gen-ust-nevents.c | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tests/utils/testapp/gen-ust-nevents/gen-ust-nevents.c b/tests/utils/testapp/gen-ust-nevents/gen-ust-nevents.c index abbc72e12..ec71023de 100644 --- a/tests/utils/testapp/gen-ust-nevents/gen-ust-nevents.c +++ b/tests/utils/testapp/gen-ust-nevents/gen-ust-nevents.c @@ -27,6 +27,8 @@ static struct option long_options[] = /* These options set a flag. */ {"iter", required_argument, 0, 'i'}, {"wait", required_argument, 0, 'w'}, + {"create-in-main", required_argument, 0, 'm'}, + {"wait-before-first-event", required_argument, 0, 'b'}, {0, 0, 0, 0} }; @@ -39,10 +41,18 @@ int main(int argc, char **argv) float flt = 2222.0; unsigned int nr_iter = 100; useconds_t nr_usec = 0; + char *wait_before_first_event_file_path = NULL; + char *create_in_main_file_path = NULL; - while ((option = getopt_long(argc, argv, "i:w:", + while ((option = getopt_long(argc, argv, "i:w:b:m:", long_options, &option_index)) != -1) { switch (option) { + case 'b': + wait_before_first_event_file_path = strdup(optarg); + break; + case 'm': + create_in_main_file_path = strdup(optarg); + break; case 'i': nr_iter = atoi(optarg); break; @@ -62,6 +72,23 @@ int main(int argc, char **argv) goto end; } + /* + * The two following sync points allow for tests to do work after the + * app has started BUT before it generates any events. + */ + if (create_in_main_file_path) { + ret = create_file(create_in_main_file_path); + if (ret != 0) { + goto end; + } + } + + if (wait_before_first_event_file_path) { + ret = wait_on_file(wait_before_first_event_file_path); + if (ret != 0) { + goto end; + } + } for (i = 0; i < nr_iter; i++) { netint = htonl(i); @@ -87,5 +114,7 @@ int main(int argc, char **argv) } end: - exit(!ret ? EXIT_SUCCESS : EXIT_FAILURE); + free(create_in_main_file_path); + free(wait_before_first_event_file_path); + exit(!ret ? EXIT_SUCCESS : EXIT_FAILURE); } -- 2.34.1