From 38936cf4da9aaf752fdc9c2c56e00b9ddcad8530 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 5 Oct 2012 09:46:54 -0400 Subject: [PATCH] Implement liblttng-ust-fork daemon() override test Signed-off-by: Mathieu Desnoyers --- .gitignore | 1 + configure.ac | 1 + tests/Makefile.am | 3 +- tests/daemon/Makefile.am | 16 ++++++++++ tests/daemon/README | 2 ++ tests/daemon/daemon.c | 53 +++++++++++++++++++++++++++++++++ tests/daemon/run | 3 ++ tests/daemon/ust_tests_daemon.h | 47 +++++++++++++++++++++++++++++ 8 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 tests/daemon/Makefile.am create mode 100644 tests/daemon/README create mode 100644 tests/daemon/daemon.c create mode 100755 tests/daemon/run create mode 100644 tests/daemon/ust_tests_daemon.h diff --git a/.gitignore b/.gitignore index 076cd007..44676524 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ ust-consumerd/ust-consumerd tests/basic/basic tests/basic_long/basic_long +tests/daemon/daemon tests/demo/demo tests/dlopen/dlopen tests/exit-fast/exit-fast diff --git a/configure.ac b/configure.ac index ea732439..91ad8d93 100644 --- a/configure.ac +++ b/configure.ac @@ -330,6 +330,7 @@ AC_CONFIG_FILES([ tests/hello/Makefile tests/hello-static-lib/Makefile tests/hello.cxx/Makefile + tests/daemon/Makefile tests/demo/Makefile tests/fork/Makefile tests/ust-basic-tracing/Makefile diff --git a/tests/Makefile.am b/tests/Makefile.am index e79ab7ce..2b124228 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,4 +1,5 @@ -SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test demo hello.cxx +SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test \ + demo hello.cxx daemon #SUBDIRS = . hello2 basic basic_long simple_include snprintf test-nevents test-libustinstr-malloc dlopen same_line_marker trace_event register_test tracepoint libustctl_function_tests exit-fast dist_noinst_SCRIPTS = test_loop runtests trace_matches diff --git a/tests/daemon/Makefile.am b/tests/daemon/Makefile.am new file mode 100644 index 00000000..e6418266 --- /dev/null +++ b/tests/daemon/Makefile.am @@ -0,0 +1,16 @@ +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -Wsystem-headers + +noinst_PROGRAMS = daemon +daemon_SOURCES = daemon.c ust_tests_daemon.h +daemon_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la \ + $(top_builddir)/liblttng-ust-fork/liblttng-ust-fork.la + +if LTTNG_UST_BUILD_WITH_LIBDL +daemon_LDADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +daemon_LDADD += -lc +endif + +noinst_SCRIPTS = run +EXTRA_DIST = run diff --git a/tests/daemon/README b/tests/daemon/README new file mode 100644 index 00000000..3c96cb68 --- /dev/null +++ b/tests/daemon/README @@ -0,0 +1,2 @@ +This test checks if tracing works correctly in a child process created by +a daemon() call. diff --git a/tests/daemon/daemon.c b/tests/daemon/daemon.c new file mode 100644 index 00000000..c53074e7 --- /dev/null +++ b/tests/daemon/daemon.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2009 Pierre-Marc Fournier + * Copyright (C) 2011-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 of + * the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include + +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#include "ust_tests_daemon.h" + +int main(int argc, char **argv, char *env[]) +{ + int result; + + if (argc < 1) { + fprintf(stderr, "usage: daemon\n"); + exit(1); + } + + printf("daemon test program, parent pid is %d\n", getpid()); + tracepoint(ust_tests_daemon, before_daemon); + + result = daemon(0, 1); + if (result == 0) { + printf("Child pid is %d\n", getpid()); + + tracepoint(ust_tests_daemon, after_daemon_child, getpid()); + } else { + tracepoint(ust_tests_daemon, after_daemon_parent); + perror("daemon"); + exit(1); + } + + return 0; +} diff --git a/tests/daemon/run b/tests/daemon/run new file mode 100755 index 00000000..be0e287e --- /dev/null +++ b/tests/daemon/run @@ -0,0 +1,3 @@ +#!/bin/sh + +./daemon diff --git a/tests/daemon/ust_tests_daemon.h b/tests/daemon/ust_tests_daemon.h new file mode 100644 index 00000000..58b41a4f --- /dev/null +++ b/tests/daemon/ust_tests_daemon.h @@ -0,0 +1,47 @@ +#undef TRACEPOINT_PROVIDER +#define TRACEPOINT_PROVIDER ust_tests_daemon + +#if !defined(_TRACEPOINT_UST_TESTS_DAEMON_H) || defined(TRACEPOINT_HEADER_MULTI_READ) +#define _TRACEPOINT_UST_TESTS_DAEMON_H + +/* + * Copyright (C) 2012 Mathieu Desnoyers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + */ + +#include +#include + +TRACEPOINT_EVENT(ust_tests_daemon, before_daemon, + TP_ARGS(), + TP_FIELDS() +) + +TRACEPOINT_EVENT(ust_tests_daemon, after_daemon_child, + TP_ARGS(pid_t, pid), + TP_FIELDS( + ctf_integer(pid_t, pid, pid) + ) +) + +TRACEPOINT_EVENT(ust_tests_daemon, after_daemon_parent, + TP_ARGS(), + TP_FIELDS() +) + +#endif /* _TRACEPOINT_UST_TESTS_DAEMON_H */ + +#undef TRACEPOINT_INCLUDE_FILE +#define TRACEPOINT_INCLUDE_FILE ./ust_tests_daemon.h + +/* This part must be outside ifdef protection */ +#include -- 2.34.1