| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0-or-later |
| # description: Test monitor reactor setting |
| # requires: available_reactors |
| |
| test_monitor_reactor() { |
| local monitor="$1" |
| local prefix="$2" # nested monitors |
| |
| while read -r reactor; do |
| [ "$reactor" = nop ] && continue |
| |
| echo "$reactor" > "monitors/$prefix$monitor/reactors" |
| grep -q "\\[$reactor\\]" "monitors/$prefix$monitor/reactors" |
| done < available_reactors |
| |
| echo nop > "monitors/$prefix$monitor/reactors" |
| grep -q "\\[nop\\]" "monitors/$prefix$monitor/reactors" |
| } |
| |
| test_container_monitor() { |
| local monitor="$1" |
| local nested |
| |
| while read -r reactor; do |
| [ "$reactor" = nop ] && continue |
| |
| echo "$reactor" > "monitors/$monitor/reactors" |
| grep -q "\\[$reactor\\]" "monitors/$monitor/reactors" |
| |
| for nested_dir in "monitors/$monitor"/*; do |
| [ -d "$nested_dir" ] || continue |
| nested=$(basename "$nested_dir") |
| grep -q "\\[$reactor\\]" "monitors/$monitor/$nested/reactors" |
| done |
| done < available_reactors |
| test -n "$nested" |
| |
| echo nop > "monitors/$monitor/reactors" |
| grep -q "\\[nop\\]" "monitors/$monitor/reactors" |
| |
| for nested_dir in "monitors/$monitor"/*; do |
| [ -d "$nested_dir" ] || continue |
| nested=$(basename "$nested_dir") |
| grep -q "\\[nop\\]" "monitors/$monitor/$nested/reactors" |
| done |
| |
| for nested_dir in "monitors/$monitor"/*; do |
| [ -d "$nested_dir" ] || continue |
| nested=$(basename "$nested_dir") |
| test_monitor_reactor "$nested" "$monitor/" |
| done |
| } |
| |
| for monitor_dir in monitors/*; do |
| monitor=$(basename "$monitor_dir") |
| |
| if find "$monitor_dir" -mindepth 1 -type d | grep -q .; then |
| test_container_monitor "$monitor" |
| else |
| test_monitor_reactor "$monitor" |
| fi |
| done |
| |
| monitor=$(ls /sys/kernel/tracing/rv/monitors -1 | head -n 1) |
| test -f "monitors/$monitor/reactors" |
| ! echo non_existent_reactor > "monitors/$monitor/reactors" || false |
| ! grep -q "\\[non_existent_reactor\\]" "monitors/$monitor/reactors" || false |