diff mbox series

[lttng-tools] testapp: gen-ust-events: added help and sync-before-first-event

Message ID 20210401163633.839259-1-wallinux@gmail.com
State New
Headers show
Series [lttng-tools] testapp: gen-ust-events: added help and sync-before-first-event | expand

Commit Message

Anders Wallin April 1, 2021, 4:36 p.m. UTC
- added verbose option to print traces
- added sync-before-first-event to wait on file before first event
- added help option
- added missing short option "-e"
- don't allow negative wait times

Signed-off-by: Anders Wallin <wallinux at gmail.com>
---
 .../testapp/gen-ust-events/gen-ust-events.c   | 95 ++++++++++++++++---
 1 file changed, 82 insertions(+), 13 deletions(-)

Comments

Mathieu Desnoyers April 7, 2021, 3:29 p.m. UTC | #1
----- On Apr 1, 2021, at 12:36 PM, lttng-dev lttng-dev at lists.lttng.org wrote:

> - added verbose option to print traces
> - added sync-before-first-event to wait on file before first event
> - added help option
> - added missing short option "-e"
> - don't allow negative wait times

I don't think this is needed. Will explain in the next patch.

Thanks,

Mathieu

> 
> Signed-off-by: Anders Wallin <wallinux at gmail.com>
> ---
> .../testapp/gen-ust-events/gen-ust-events.c   | 95 ++++++++++++++++---
> 1 file changed, 82 insertions(+), 13 deletions(-)
> 
> diff --git a/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> index df1e58e4..5fefb2d8 100644
> --- a/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> +++ b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> @@ -28,6 +28,15 @@
> #define TRACEPOINT_DEFINE
> #include "tp.h"
> 
> +/* #define NDEBUG */
> +
> +#ifndef NDEBUG
> +int verbose;
> +#define TRACE(format, ...) { if (verbose) printf(" ---TRACE: " format,
> __VA_ARGS__); }
> +#else
> +#define TRACE(format, ...)
> +#endif
> +
> static struct option long_options[] =
> {
> 	/* These options set a flag. */
> @@ -38,9 +47,33 @@ static struct option long_options[] =
> 	{"sync-before-last-event-touch", required_argument, 0, 'c'},
> 	{"sync-before-exit", required_argument, 0, 'd'},
> 	{"sync-before-exit-touch", required_argument, 0, 'e'},
> +	{"sync-before-first-event", required_argument, 0, 'f'},
> +	{"help", no_argument, 0, 'h'},
> +#ifndef NDEBUG
> +	{"verbose", no_argument, 0, 'v'},
> +#endif
> 	{0, 0, 0, 0}
> };
> 
> +const char *program_name;
> +
> +static void print_usage(void)
> +{
> +	printf("Usage:  %s options\n", program_name);
> +	printf("  -h  --help                                    Display this usage
> information\n"
> +#ifndef NDEBUG
> +	       "  -v  --verbose                                 Print verbose
> messages\n"
> +#endif
> +	       "  -i  --iter [iterations]                       Number of iterations,
> default=100, forever=-1\n"
> +	       "  -w  --wait [usec]                             Time in usec between
> events, default=0\n"
> +	       "  -a  --sync-after-first-event [filename]       Create file after
> first event\n"
> +	       "  -b  --sync-before-last-event [filename]       Wait for file before
> writing last event\n"
> +	       "  -c  --sync-before-last-event-touch [filename] Create file after last
> event\n"
> +	       "  -d  --sync-before-exit [filename]             Wait for file before
> exit\n"
> +	       "  -e  --sync-before-exit-touch [filename]       Create file before
> exit\n"
> +	       "  -f  --sync-before-first-event [filename]      Wait for file before
> creating the first event\n");
> +}
> +
> int main(int argc, char **argv)
> {
> 	unsigned int i, netint;
> @@ -54,7 +87,7 @@ int main(int argc, char **argv)
> 	uint32_t net_values[] = { 1, 2, 3 };
> 	int nr_iter = 100, ret = 0, first_event_file_created = 0;
> 	useconds_t nr_usec = 0;
> -	char *after_first_event_file_path = NULL;
> +	char *after_first_event_file_path_touch = NULL;
> 	char *before_last_event_file_path = NULL;
> 	/*
> 	 * Touch a file to indicate that all events except one were
> @@ -65,16 +98,20 @@ int main(int argc, char **argv)
> 	char *before_exit_file_path_touch = NULL;
> 	/* Wait on file before exiting */
> 	char *before_exit_file_path = NULL;
> +	/* Wait on file before starting */
> +	char *before_first_event_file_path = NULL;
> +
> +	program_name = argv[0];
> 
> 	for (i = 0; i < 3; i++) {
> 		net_values[i] = htonl(net_values[i]);
> 	}
> 
> -	while ((option = getopt_long(argc, argv, "i:w:a:b:c:d:",
> +	while ((option = getopt_long(argc, argv, "i:w:a:b:c:d:e:f:hv",
> 			long_options, &option_index)) != -1) {
> 		switch (option) {
> 		case 'a':
> -			after_first_event_file_path = strdup(optarg);
> +			after_first_event_file_path_touch = strdup(optarg);
> 			break;
> 		case 'b':
> 			before_last_event_file_path = strdup(optarg);
> @@ -88,22 +125,30 @@ int main(int argc, char **argv)
> 		case 'e':
> 			before_exit_file_path_touch = strdup(optarg);
> 			break;
> +		case 'f':
> +			before_first_event_file_path = strdup(optarg);
> +			break;
> 		case 'i':
> 			nr_iter = atoi(optarg);
> 			break;
> +#ifndef NDEBUG
> +		case 'v':
> +			verbose = 1;
> +			break;
> +#endif
> 		case 'w':
> -			nr_usec = atoi(optarg);
> +			/* only postive values are valid */
> +			nr_usec = (atoi(optarg) < 0) ? 0 : atoi(optarg);
> 			break;
> -		case '?':
> -			/* getopt_long already printed an error message. */
> +		case 'h':
> 		default:
> -			ret = -1;
> +			print_usage();
> 			goto end;
> 		}
> 	}
> 
> 	if (optind != argc) {
> -		fprintf(stderr, "Error: takes long options only.\n");
> +		fprintf(stderr, "Error: takes options only.\n");
> 
> 		/*
> 		 * Aborting the test program for now because callers typically don't check
> @@ -113,6 +158,7 @@ int main(int argc, char **argv)
> 		 * we should eventually ensure that all scripts test and report the test
> 		 * app return values.
> 		 */
> +		print_usage();
> 		abort();
> 
> 		ret = -1;
> @@ -125,9 +171,23 @@ int main(int argc, char **argv)
> 		goto end;
> 	}
> 
> +	TRACE("iter: %i\n", nr_iter);
> +	TRACE("wait: %i (usec)\n", nr_usec);
> +
> +	if (before_first_event_file_path) {
> +		TRACE("before_first_event_file_path(%i): %s\n",
> +		      -1, before_first_event_file_path);
> +		ret = wait_on_file(before_first_event_file_path);
> +		if (ret != 0) {
> +			goto end;
> +		}
> +	}
> +
> 	for (i = 0; nr_iter < 0 || i < nr_iter; i++) {
> 		if (nr_iter >= 0 && i == nr_iter - 1) {
> 			if (before_last_event_file_path_touch) {
> +				TRACE("before_last_event_file_path_touch(%i): %s\n",
> +				      i, before_last_event_file_path_touch);
> 				ret = create_file(before_last_event_file_path_touch);
> 				if (ret != 0) {
> 					goto end;
> @@ -139,6 +199,8 @@ int main(int argc, char **argv)
> 			 * event.
> 			 */
> 			if (before_last_event_file_path) {
> +				TRACE("before_last_event_file_path(%i): %s\n",
> +				      i, before_last_event_file_path);
> 				ret = wait_on_file(before_last_event_file_path);
> 				if (ret != 0) {
> 					goto end;
> @@ -153,9 +215,10 @@ int main(int argc, char **argv)
> 		 * First loop we create the file if asked to indicate
> 		 * that at least one tracepoint has been hit.
> 		 */
> -		if (after_first_event_file_path && first_event_file_created == 0) {
> -			ret = create_file(after_first_event_file_path);
> -
> +		if (after_first_event_file_path_touch && first_event_file_created == 0) {
> +			TRACE("after_first_event_file_path_touch(%i): %s\n",
> +			      i, after_first_event_file_path_touch);
> +			ret = create_file(after_first_event_file_path_touch);
> 			if (ret != 0) {
> 				goto end;
> 			} else {
> @@ -164,7 +227,7 @@ int main(int argc, char **argv)
> 		}
> 
> 		if (nr_usec) {
> -		        if (usleep_safe(nr_usec)) {
> +			if (usleep_safe(nr_usec)) {
> 				ret = -1;
> 				goto end;
> 			}
> @@ -175,22 +238,28 @@ int main(int argc, char **argv)
> 	}
> 
> 	if (before_exit_file_path_touch) {
> +		TRACE("before_exit_file_path_touch(%i): %s\n",
> +		      i, before_exit_file_path_touch);
> 		ret = create_file(before_exit_file_path_touch);
> 		if (ret != 0) {
> 			goto end;
> 		}
> 	}
> 	if (before_exit_file_path) {
> +		TRACE("before_exit_file_path(%i): %s\n",
> +		      i, before_exit_file_path);
> 		ret = wait_on_file(before_exit_file_path);
> 		if (ret != 0) {
> 			goto end;
> 		}
> 	}
> end:
> -	free(after_first_event_file_path);
> +	TRACE("end status: %i\n", ret);
> +	free(after_first_event_file_path_touch);
> 	free(before_last_event_file_path);
> 	free(before_last_event_file_path_touch);
> 	free(before_exit_file_path);
> 	free(before_exit_file_path_touch);
> +	free(before_first_event_file_path);
> 	exit(!ret ? EXIT_SUCCESS : EXIT_FAILURE);
> }
> --
> 2.31.1
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
diff mbox series

Patch

diff --git a/tests/utils/testapp/gen-ust-events/gen-ust-events.c b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
index df1e58e4..5fefb2d8 100644
--- a/tests/utils/testapp/gen-ust-events/gen-ust-events.c
+++ b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
@@ -28,6 +28,15 @@ 
 #define TRACEPOINT_DEFINE
 #include "tp.h"
 
+/* #define NDEBUG */
+
+#ifndef NDEBUG
+int verbose;
+#define TRACE(format, ...) { if (verbose) printf(" ---TRACE: " format, __VA_ARGS__); }
+#else
+#define TRACE(format, ...)
+#endif
+
 static struct option long_options[] =
 {
 	/* These options set a flag. */
@@ -38,9 +47,33 @@  static struct option long_options[] =
 	{"sync-before-last-event-touch", required_argument, 0, 'c'},
 	{"sync-before-exit", required_argument, 0, 'd'},
 	{"sync-before-exit-touch", required_argument, 0, 'e'},
+	{"sync-before-first-event", required_argument, 0, 'f'},
+	{"help", no_argument, 0, 'h'},
+#ifndef NDEBUG
+	{"verbose", no_argument, 0, 'v'},
+#endif
 	{0, 0, 0, 0}
 };
 
+const char *program_name;
+
+static void print_usage(void)
+{
+	printf("Usage:  %s options\n", program_name);
+	printf("  -h  --help                                    Display this usage information\n"
+#ifndef NDEBUG
+	       "  -v  --verbose                                 Print verbose messages\n"
+#endif
+	       "  -i  --iter [iterations]                       Number of iterations, default=100, forever=-1\n"
+	       "  -w  --wait [usec]                             Time in usec between events, default=0\n"
+	       "  -a  --sync-after-first-event [filename]       Create file after first event\n"
+	       "  -b  --sync-before-last-event [filename]       Wait for file before writing last event\n"
+	       "  -c  --sync-before-last-event-touch [filename] Create file after last event\n"
+	       "  -d  --sync-before-exit [filename]             Wait for file before exit\n"
+	       "  -e  --sync-before-exit-touch [filename]       Create file before exit\n"
+	       "  -f  --sync-before-first-event [filename]      Wait for file before creating the first event\n");
+}
+
 int main(int argc, char **argv)
 {
 	unsigned int i, netint;
@@ -54,7 +87,7 @@  int main(int argc, char **argv)
 	uint32_t net_values[] = { 1, 2, 3 };
 	int nr_iter = 100, ret = 0, first_event_file_created = 0;
 	useconds_t nr_usec = 0;
-	char *after_first_event_file_path = NULL;
+	char *after_first_event_file_path_touch = NULL;
 	char *before_last_event_file_path = NULL;
 	/*
 	 * Touch a file to indicate that all events except one were
@@ -65,16 +98,20 @@  int main(int argc, char **argv)
 	char *before_exit_file_path_touch = NULL;
 	/* Wait on file before exiting */
 	char *before_exit_file_path = NULL;
+	/* Wait on file before starting */
+	char *before_first_event_file_path = NULL;
+
+	program_name = argv[0];
 
 	for (i = 0; i < 3; i++) {
 		net_values[i] = htonl(net_values[i]);
 	}
 
-	while ((option = getopt_long(argc, argv, "i:w:a:b:c:d:",
+	while ((option = getopt_long(argc, argv, "i:w:a:b:c:d:e:f:hv",
 			long_options, &option_index)) != -1) {
 		switch (option) {
 		case 'a':
-			after_first_event_file_path = strdup(optarg);
+			after_first_event_file_path_touch = strdup(optarg);
 			break;
 		case 'b':
 			before_last_event_file_path = strdup(optarg);
@@ -88,22 +125,30 @@  int main(int argc, char **argv)
 		case 'e':
 			before_exit_file_path_touch = strdup(optarg);
 			break;
+		case 'f':
+			before_first_event_file_path = strdup(optarg);
+			break;
 		case 'i':
 			nr_iter = atoi(optarg);
 			break;
+#ifndef NDEBUG
+		case 'v':
+			verbose = 1;
+			break;
+#endif
 		case 'w':
-			nr_usec = atoi(optarg);
+			/* only postive values are valid */
+			nr_usec = (atoi(optarg) < 0) ? 0 : atoi(optarg);
 			break;
-		case '?':
-			/* getopt_long already printed an error message. */
+		case 'h':
 		default:
-			ret = -1;
+			print_usage();
 			goto end;
 		}
 	}
 
 	if (optind != argc) {
-		fprintf(stderr, "Error: takes long options only.\n");
+		fprintf(stderr, "Error: takes options only.\n");
 
 		/*
 		 * Aborting the test program for now because callers typically don't check
@@ -113,6 +158,7 @@  int main(int argc, char **argv)
 		 * we should eventually ensure that all scripts test and report the test
 		 * app return values.
 		 */
+		print_usage();
 		abort();
 
 		ret = -1;
@@ -125,9 +171,23 @@  int main(int argc, char **argv)
 		goto end;
 	}
 
+	TRACE("iter: %i\n", nr_iter);
+	TRACE("wait: %i (usec)\n", nr_usec);
+
+	if (before_first_event_file_path) {
+		TRACE("before_first_event_file_path(%i): %s\n",
+		      -1, before_first_event_file_path);
+		ret = wait_on_file(before_first_event_file_path);
+		if (ret != 0) {
+			goto end;
+		}
+	}
+
 	for (i = 0; nr_iter < 0 || i < nr_iter; i++) {
 		if (nr_iter >= 0 && i == nr_iter - 1) {
 			if (before_last_event_file_path_touch) {
+				TRACE("before_last_event_file_path_touch(%i): %s\n",
+				      i, before_last_event_file_path_touch);
 				ret = create_file(before_last_event_file_path_touch);
 				if (ret != 0) {
 					goto end;
@@ -139,6 +199,8 @@  int main(int argc, char **argv)
 			 * event.
 			 */
 			if (before_last_event_file_path) {
+				TRACE("before_last_event_file_path(%i): %s\n",
+				      i, before_last_event_file_path);
 				ret = wait_on_file(before_last_event_file_path);
 				if (ret != 0) {
 					goto end;
@@ -153,9 +215,10 @@  int main(int argc, char **argv)
 		 * First loop we create the file if asked to indicate
 		 * that at least one tracepoint has been hit.
 		 */
-		if (after_first_event_file_path && first_event_file_created == 0) {
-			ret = create_file(after_first_event_file_path);
-
+		if (after_first_event_file_path_touch && first_event_file_created == 0) {
+			TRACE("after_first_event_file_path_touch(%i): %s\n",
+			      i, after_first_event_file_path_touch);
+			ret = create_file(after_first_event_file_path_touch);
 			if (ret != 0) {
 				goto end;
 			} else {
@@ -164,7 +227,7 @@  int main(int argc, char **argv)
 		}
 
 		if (nr_usec) {
-		        if (usleep_safe(nr_usec)) {
+			if (usleep_safe(nr_usec)) {
 				ret = -1;
 				goto end;
 			}
@@ -175,22 +238,28 @@  int main(int argc, char **argv)
 	}
 
 	if (before_exit_file_path_touch) {
+		TRACE("before_exit_file_path_touch(%i): %s\n",
+		      i, before_exit_file_path_touch);
 		ret = create_file(before_exit_file_path_touch);
 		if (ret != 0) {
 			goto end;
 		}
 	}
 	if (before_exit_file_path) {
+		TRACE("before_exit_file_path(%i): %s\n",
+		      i, before_exit_file_path);
 		ret = wait_on_file(before_exit_file_path);
 		if (ret != 0) {
 			goto end;
 		}
 	}
 end:
-	free(after_first_event_file_path);
+	TRACE("end status: %i\n", ret);
+	free(after_first_event_file_path_touch);
 	free(before_last_event_file_path);
 	free(before_last_event_file_path_touch);
 	free(before_exit_file_path);
 	free(before_exit_file_path_touch);
+	free(before_first_event_file_path);
 	exit(!ret ? EXIT_SUCCESS : EXIT_FAILURE);
 }