[DTrace-devel] [PATCH v2] tests: Use distinct trigger for copyin* tests

eugene.loh at oracle.com eugene.loh at oracle.com
Sat Jan 14 19:39:05 UTC 2023


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

Many copyin* tests implement a trigger by running system("echo foo")
in the BEGIN probe.  This requires a destructive action, which is okay
but does make these "unit tests" rely on features unrelated to the tests.

The main problem, however, is that the check that the corresponding
write:entry probe has fired on the correct process becomes very weak
-- e.g., just checking that a particular char is '-'.  And in the case
of copyinto, this check is unnecessarily complicated.  Finally, if
such a process is not found, the test would hang.

Use @@trigger.  E.g., delaydie will quickly terminate, emiting a simple
message, which is all we need for these tests.

The existing predicates check being able to:
- cast the return value of copyin() to string
- use indexing on the cast value
- use indexing on the return value of copyinstr()
Each such predicate is replaced with a conditionalized printf.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/unittest/funcs/copyin/tst.copyin.d       | 12 ++++--------
 test/unittest/funcs/copyin/tst.copyin.r       |  7 ++++---
 .../copyinstr/tst.copyinstr-low-maxsize.d     | 12 ++++--------
 .../copyinstr/tst.copyinstr-low-maxsize.r     |  6 ++++--
 .../copyinstr/tst.copyinstr-no-maxsize.d      | 12 ++++--------
 .../copyinstr/tst.copyinstr-no-maxsize.r      |  6 ++++--
 test/unittest/funcs/copyinstr/tst.copyinstr.d | 12 ++++--------
 test/unittest/funcs/copyinstr/tst.copyinstr.r |  7 ++++---
 test/unittest/funcs/copyinto/tst.copyinto.d   | 19 ++++---------------
 test/unittest/funcs/copyinto/tst.copyinto.r   |  7 ++++---
 10 files changed, 40 insertions(+), 60 deletions(-)

diff --git a/test/unittest/funcs/copyin/tst.copyin.d b/test/unittest/funcs/copyin/tst.copyin.d
index 11d52a5a..f40ab1a7 100644
--- a/test/unittest/funcs/copyin/tst.copyin.d
+++ b/test/unittest/funcs/copyin/tst.copyin.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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.
  */
@@ -11,18 +11,14 @@
  * SECTION: Actions and Subroutines/copyin()
  *	    User Process Tracing/copyin() and copyinstr() Subroutines
  */
+/* @@trigger: delaydie */
 
 #pragma D option quiet
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo dtrace-copyin-test");
-}
 
 syscall::write:entry
-/(s = (string)copyin(arg1, 32))[6] == '-'/
+/pid == $target/
 {
+	printf("%s char match\n", (s = (string)copyin(arg1, 32))[4] == 'y' ? "good" : "BAD");
 	printf("'%s'", s);
 	exit(0);
 }
diff --git a/test/unittest/funcs/copyin/tst.copyin.r b/test/unittest/funcs/copyin/tst.copyin.r
index 05d2c96c..41e7b43d 100644
--- a/test/unittest/funcs/copyin/tst.copyin.r
+++ b/test/unittest/funcs/copyin/tst.copyin.r
@@ -1,3 +1,4 @@
-dtrace-copyin-test
-'dtrace-copyin-test
-'
+good char match
+'Delay in ns needed in delay env '
+-- @@stderr --
+Delay in ns needed in delay env var.
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.d b/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.d
index b7502c27..62cc1482 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.d
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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.
  */
@@ -11,18 +11,14 @@
  * SECTION: Actions and Subroutines/copyinstr()
  *	    User Process Tracing/copyin() and copyinstr() Subroutines
  */
+/* @@trigger: delaydie */
 
 #pragma D option quiet
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo dtrace-copyinstr-test");
-}
 
 syscall::write:entry
-/(s = copyinstr(arg1, 8))[6] == '-'/
+/pid == $target/
 {
+	printf("%s char match\n", (s = copyinstr(arg1, 8))[4] == 'y' ? "good" : "BAD");
 	printf("'%s'", s);
 	exit(0);
 }
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.r b/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.r
index 45ca768e..29b53983 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.r
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr-low-maxsize.r
@@ -1,2 +1,4 @@
-dtrace-copyinstr-test
-'dtrace-'
+good char match
+'Delay i'
+-- @@stderr --
+Delay in ns needed in delay env var.
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.d b/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.d
index 448fa7c5..f9094a40 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.d
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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.
  */
@@ -11,18 +11,14 @@
  * SECTION: Actions and Subroutines/copyinstr()
  *	    User Process Tracing/copyin() and copyinstr() Subroutines
  */
+/* @@trigger: delaydie */
 
 #pragma D option quiet
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo dtrace-copyinstr-test");
-}
 
 syscall::write:entry
-/(s = copyinstr(arg1))[6] == '-'/
+/pid == $target/
 {
+	printf("%s char match\n", (s = copyinstr(arg1))[4] == 'y' ? "good" : "BAD");
 	printf("'%s'", s);
 	exit(0);
 }
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.r b/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.r
index 2be678ab..51713be3 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.r
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr-no-maxsize.r
@@ -1,3 +1,5 @@
-dtrace-copyinstr-test
-'dtrace-copyinstr-test
+good char match
+'Delay in ns needed in delay env var.
 '
+-- @@stderr --
+Delay in ns needed in delay env var.
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr.d b/test/unittest/funcs/copyinstr/tst.copyinstr.d
index 09f382b3..f518e861 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr.d
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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.
  */
@@ -11,18 +11,14 @@
  * SECTION: Actions and Subroutines/copyinstr()
  *	    User Process Tracing/copyin() and copyinstr() Subroutines
  */
+/* @@trigger: delaydie */
 
 #pragma D option quiet
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo dtrace-copyinstr-test");
-}
 
 syscall::write:entry
-/(s = copyinstr(arg1, 32))[6] == '-'/
+/pid == $target/
 {
+	printf("%s char match\n", (s = copyinstr(arg1, 32))[4] == 'y' ? "good" : "BAD");
 	printf("'%s'", s);
 	exit(0);
 }
diff --git a/test/unittest/funcs/copyinstr/tst.copyinstr.r b/test/unittest/funcs/copyinstr/tst.copyinstr.r
index 2be678ab..2155df09 100644
--- a/test/unittest/funcs/copyinstr/tst.copyinstr.r
+++ b/test/unittest/funcs/copyinstr/tst.copyinstr.r
@@ -1,3 +1,4 @@
-dtrace-copyinstr-test
-'dtrace-copyinstr-test
-'
+good char match
+'Delay in ns needed in delay env'
+-- @@stderr --
+Delay in ns needed in delay env var.
diff --git a/test/unittest/funcs/copyinto/tst.copyinto.d b/test/unittest/funcs/copyinto/tst.copyinto.d
index b0ec658b..a4c5f770 100644
--- a/test/unittest/funcs/copyinto/tst.copyinto.d
+++ b/test/unittest/funcs/copyinto/tst.copyinto.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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.
  */
@@ -10,27 +10,16 @@
  *
  * SECTION: Actions and Subroutines/copyinto()
  */
+/* @@trigger: delaydie */
 
 #pragma D option quiet
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo dtrace-copyinto-test");
-}
-
-syscall::write:entry
-{
-	ptr = (char *)alloca(32);
-	copyinto(arg1, 32, ptr);
-	ok = ptr[6] == '-';
-}
 
 syscall::write:entry
-/ok/
+/pid == $target/
 {
 	ptr = (char *)alloca(32);
 	copyinto(arg1, 32, ptr);
+	printf("%s char match\n", ptr[4] == 'y' ? "good" : "BAD");
 	printf("'%s'", stringof(ptr));
 	exit(0);
 }
diff --git a/test/unittest/funcs/copyinto/tst.copyinto.r b/test/unittest/funcs/copyinto/tst.copyinto.r
index 44dd1c87..41e7b43d 100644
--- a/test/unittest/funcs/copyinto/tst.copyinto.r
+++ b/test/unittest/funcs/copyinto/tst.copyinto.r
@@ -1,3 +1,4 @@
-dtrace-copyinto-test
-'dtrace-copyinto-test
-'
+good char match
+'Delay in ns needed in delay env '
+-- @@stderr --
+Delay in ns needed in delay env var.
-- 
2.18.4




More information about the DTrace-devel mailing list