[DTrace-devel] [PATCH 2/5] test: Embellish the USDT multiprovider test

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Dec 20 22:24:52 UTC 2024


From: Eugene Loh <eugene.loh at oracle.com>

Add a probe to two providers, each probe with the same name but
different arguments.

Do so in a new, separate test since the older test used to trigger
some crashes, and we would like to continue to catch such problems.

Add -v to these probe-list tests to check attributes and arguments.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/triggers/Build                           |  5 +-
 .../usdt-tst-multiprov-dupprobe-prov.d        | 10 ++
 test/triggers/usdt-tst-multiprov-dupprobe.c   | 25 +++++
 test/unittest/usdt/tst.multiprov-dupprobe.r   | 93 +++++++++++++++++++
 test/unittest/usdt/tst.multiprov-dupprobe.r.p |  5 +
 test/unittest/usdt/tst.multiprov-dupprobe.sh  | 11 +++
 test/unittest/usdt/tst.multiprovider.r        | 65 ++++++++++++-
 test/unittest/usdt/tst.multiprovider.r.p      |  5 +-
 test/unittest/usdt/tst.multiprovider.sh       |  6 +-
 9 files changed, 214 insertions(+), 11 deletions(-)
 create mode 100644 test/triggers/usdt-tst-multiprov-dupprobe-prov.d
 create mode 100644 test/triggers/usdt-tst-multiprov-dupprobe.c
 create mode 100644 test/unittest/usdt/tst.multiprov-dupprobe.r
 create mode 100755 test/unittest/usdt/tst.multiprov-dupprobe.r.p
 create mode 100755 test/unittest/usdt/tst.multiprov-dupprobe.sh

diff --git a/test/triggers/Build b/test/triggers/Build
index c50c265cc..3b5df3ece 100644
--- a/test/triggers/Build
+++ b/test/triggers/Build
@@ -14,7 +14,7 @@ EXTERNAL_64BIT_TRIGGERS = testprobe readwholedir mmap bogus-ioctl open delaydie
     visible-constructor visible-constructor-static visible-constructor-static-unstripped
 
 EXTERNAL_64BIT_SDT_TRIGGERS = usdt-tst-argmap usdt-tst-args usdt-tst-forker usdt-tst-defer \
-    usdt-tst-multiprovider usdt-tst-special
+    usdt-tst-multiprovider usdt-tst-multiprov-dupprobe usdt-tst-special
 EXTERNAL_64BIT_TRIGGERS += $(EXTERNAL_64BIT_SDT_TRIGGERS)
 
 EXTERNAL_32BIT_TRIGGERS := visible-constructor-32
@@ -210,6 +210,9 @@ usdt-tst-defer_PROV := usdt-tst-defer-prov.d
 # usdt-tst-multiprovider calls USDT probes based on dtrace -h
 usdt-tst-multiprovider_PROV := usdt-tst-multiprovider-prov.d
 
+# usdt-tst-multiprov-dupprobe calls USDT probes based on dtrace -h
+usdt-tst-multiprov-dupprobe_PROV := usdt-tst-multiprov-dupprobe-prov.d
+
 # usdt-tst-special calls USDT probes based on dtrace -h
 usdt-tst-special_CFLAGS := -fno-inline -O2
 usdt-tst-special_PROV := usdt-tst-special-prov.d
diff --git a/test/triggers/usdt-tst-multiprov-dupprobe-prov.d b/test/triggers/usdt-tst-multiprov-dupprobe-prov.d
new file mode 100644
index 000000000..04ef7245b
--- /dev/null
+++ b/test/triggers/usdt-tst-multiprov-dupprobe-prov.d
@@ -0,0 +1,10 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+provider prova { probe entrya(); probe entrye(int a, char *b); };
+provider provb { probe entryb(); probe entryc(int a, char *b) : (char * b, int a); };
+provider provc { probe entryd(); probe entrye(char *a, int b); };
diff --git a/test/triggers/usdt-tst-multiprov-dupprobe.c b/test/triggers/usdt-tst-multiprov-dupprobe.c
new file mode 100644
index 000000000..2d5fa5fb5
--- /dev/null
+++ b/test/triggers/usdt-tst-multiprov-dupprobe.c
@@ -0,0 +1,25 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * A trigger with multiple providers in it.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include "usdt-tst-multiprov-dupprobe-prov.h"
+
+int main(int argc, char **argv)
+{
+	PROVA_ENTRYA();
+	PROVA_ENTRYE(123, "bar");
+	PROVB_ENTRYB();
+	PROVB_ENTRYC(666, "foo");
+	PROVC_ENTRYD();
+	PROVC_ENTRYE("baz", 456);
+	usleep(5 * 1000 * 1000);
+	return 0;
+}
diff --git a/test/unittest/usdt/tst.multiprov-dupprobe.r b/test/unittest/usdt/tst.multiprov-dupprobe.r
new file mode 100644
index 000000000..69764f6e9
--- /dev/null
+++ b/test/unittest/usdt/tst.multiprov-dupprobe.r
@@ -0,0 +1,93 @@
+PRID provaPID usdt-tst-multiprov-dupprobe main entrya
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
+PRID provaPID usdt-tst-multiprov-dupprobe main entrye
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		args[0]: int
+		args[1]: char *
+
+PRID provbPID usdt-tst-multiprov-dupprobe main entryb
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
+PRID provbPID usdt-tst-multiprov-dupprobe main entryc
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		args[0]: char *
+		args[1]: int
+
+PRID provcPID usdt-tst-multiprov-dupprobe main entryd
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
+PRID provcPID usdt-tst-multiprov-dupprobe main entrye
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		args[0]: char *
+		args[1]: int
+
diff --git a/test/unittest/usdt/tst.multiprov-dupprobe.r.p b/test/unittest/usdt/tst.multiprov-dupprobe.r.p
new file mode 100755
index 000000000..5d11db2d4
--- /dev/null
+++ b/test/unittest/usdt/tst.multiprov-dupprobe.r.p
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Remove banner.
+# Replace numerical values with generic PRID and PID labels.
+grep -v '^ *ID' | sed 's,^[0-9][0-9]*,PRID,; s,prov\(.\)[0-9]*,prov\1PID,; s,  *, ,g'
diff --git a/test/unittest/usdt/tst.multiprov-dupprobe.sh b/test/unittest/usdt/tst.multiprov-dupprobe.sh
new file mode 100755
index 000000000..80b147974
--- /dev/null
+++ b/test/unittest/usdt/tst.multiprov-dupprobe.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+#
+# Oracle Linux DTrace.
+# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
+# Licensed under the Universal Permissive License v 1.0 as shown at
+# http://oss.oracle.com/licenses/upl.
+#
+
+dtrace=$1
+
+exec $dtrace $dt_flags -lv -P 'prov*' -c `pwd`/test/triggers/usdt-tst-multiprov-dupprobe
diff --git a/test/unittest/usdt/tst.multiprovider.r b/test/unittest/usdt/tst.multiprovider.r
index 60a15c01e..873bac49e 100644
--- a/test/unittest/usdt/tst.multiprovider.r
+++ b/test/unittest/usdt/tst.multiprovider.r
@@ -1,4 +1,61 @@
-ID provaPID usdt-tst-multiprovider main entrya
-ID provbPID usdt-tst-multiprovider main entryb
-ID provbPID usdt-tst-multiprovider main entryc
-ID provcPID usdt-tst-multiprovider main entryd
+PRID provaPID usdt-tst-multiprovider main entrya
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
+PRID provbPID usdt-tst-multiprovider main entryb
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
+PRID provbPID usdt-tst-multiprovider main entryc
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		args[0]: char *
+		args[1]: int
+
+PRID provcPID usdt-tst-multiprovider main entryd
+
+	Probe Description Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Attributes
+		Identifier Names: Private
+		Data Semantics: Private
+		Dependency Class: Unknown
+
+	Argument Types
+		None
+
diff --git a/test/unittest/usdt/tst.multiprovider.r.p b/test/unittest/usdt/tst.multiprovider.r.p
index ae8493e3d..5d11db2d4 100755
--- a/test/unittest/usdt/tst.multiprovider.r.p
+++ b/test/unittest/usdt/tst.multiprovider.r.p
@@ -1,2 +1,5 @@
 #!/bin/sh
-grep -v '^ *ID' | sed 's,^[0-9]*,ID,; s,prov\(.\)[0-9]*,prov\1PID,; s,  *, ,g'
+
+# Remove banner.
+# Replace numerical values with generic PRID and PID labels.
+grep -v '^ *ID' | sed 's,^[0-9][0-9]*,PRID,; s,prov\(.\)[0-9]*,prov\1PID,; s,  *, ,g'
diff --git a/test/unittest/usdt/tst.multiprovider.sh b/test/unittest/usdt/tst.multiprovider.sh
index d5b72c2be..e84a24b7e 100755
--- a/test/unittest/usdt/tst.multiprovider.sh
+++ b/test/unittest/usdt/tst.multiprovider.sh
@@ -5,11 +5,7 @@
 # Licensed under the Universal Permissive License v 1.0 as shown at
 # http://oss.oracle.com/licenses/upl.
 #
-if [ $# != 1 ]; then
-	echo expected one argument: '<'dtrace-path'>'
-	exit 2
-fi
 
 dtrace=$1
 
-exec $dtrace $dt_flags -l -P 'prov*' -c `pwd`/test/triggers/usdt-tst-multiprovider
+exec $dtrace $dt_flags -lv -P 'prov*' -c `pwd`/test/triggers/usdt-tst-multiprovider
-- 
2.43.5




More information about the DTrace-devel mailing list