summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Wilson <douglas.wilson@gmail.com>2021-11-26 13:04:00 +0000
committerDouglas Wilson <douglas.wilson@gmail.com>2021-12-13 14:07:04 +0000
commit4cf215d96db7683e0335cb4bbb55de83b03fd1e8 (patch)
tree4e42240e620705e864a342d486427d86173b423c
parent3600f51032f6b9f97630f5e728a24677d205d3f5 (diff)
downloadhaskell-4cf215d96db7683e0335cb4bbb55de83b03fd1e8.tar.gz
tests: Add a test for dtrace probe points
-rw-r--r--testsuite/tests/rts/Dtrace.hs10
-rw-r--r--testsuite/tests/rts/Makefile4
-rw-r--r--testsuite/tests/rts/all.T3
-rwxr-xr-xtestsuite/tests/rts/dtrace.sh4
-rw-r--r--testsuite/tests/rts/dtrace.stdout3
5 files changed, 24 insertions, 0 deletions
diff --git a/testsuite/tests/rts/Dtrace.hs b/testsuite/tests/rts/Dtrace.hs
new file mode 100644
index 0000000000..63ca194e23
--- /dev/null
+++ b/testsuite/tests/rts/Dtrace.hs
@@ -0,0 +1,10 @@
+{-# language NumericUnderscores #-}
+
+import Debug.Trace
+import Control.Concurrent
+
+main :: IO ()
+main = do
+ -- Pause for 500ms so we don't finish before bpftrace attaches
+ threadDelay 500_000
+ traceEventIO "dtrace works"
diff --git a/testsuite/tests/rts/Makefile b/testsuite/tests/rts/Makefile
index fe35bd4d2c..b59c96d109 100644
--- a/testsuite/tests/rts/Makefile
+++ b/testsuite/tests/rts/Makefile
@@ -147,3 +147,7 @@ EventlogOutput_IPE:
"$(TEST_HC)" -debug -finfo-table-map -v0 EventlogOutput.hs
./EventlogOutput +RTS -va 2> EventlogOutput_IPE.stderr.log
grep "IPE:" EventlogOutput_IPE.stderr.log
+
+.PHONY: dtrace
+dtrace:
+ ./dtrace.sh
diff --git a/testsuite/tests/rts/all.T b/testsuite/tests/rts/all.T
index a62585c6f4..ec3bfab4cf 100644
--- a/testsuite/tests/rts/all.T
+++ b/testsuite/tests/rts/all.T
@@ -503,3 +503,6 @@ test('decodeMyStack', normal, compile_and_run, ['-finfo-table-map'])
test('decodeMyStack_underflowFrames', [extra_run_opts('+RTS -kc8K -RTS')], compile_and_run, ['-finfo-table-map -rtsopts'])
# -finfo-table-map intentionally missing
test('decodeMyStack_emptyListForMissingFlag', [ignore_stdout, ignore_stderr], compile_and_run, [''])
+
+# this test is commented out because it requires bpftrace and sudo
+# test('dtrace', [extra_files(['Dtrace.hs', 'dtrace.sh'])], makefile_test, ['dtrace'])
diff --git a/testsuite/tests/rts/dtrace.sh b/testsuite/tests/rts/dtrace.sh
new file mode 100755
index 0000000000..c909a662f9
--- /dev/null
+++ b/testsuite/tests/rts/dtrace.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+"$TEST_HC" $TEST_HC_OPTS -eventlog Dtrace.hs -v0
+./Dtrace & sudo bpftrace -q -e "usdt::HaskellEvent:user__msg { printf(\"%s\n\", str(arg1)); }" -p $!
diff --git a/testsuite/tests/rts/dtrace.stdout b/testsuite/tests/rts/dtrace.stdout
new file mode 100644
index 0000000000..18ecfdcd00
--- /dev/null
+++ b/testsuite/tests/rts/dtrace.stdout
@@ -0,0 +1,3 @@
+dtrace works
+
+