set up shfmt

This commit is contained in:
ryleu
2026-04-10 19:53:49 -05:00
parent 760f6ddd19
commit 358380c23c
6 changed files with 275 additions and 277 deletions

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# Wait for a network interface to be up (not necessarily online) # Wait for a network interface to be up (not necessarily online)
while ! ip link show | grep -q "state UP"; do while ! ip link show | grep -q "state UP"; do
echo "[INFO] Waiting for active network interface..." echo "[INFO] Waiting for active network interface..."
sleep 1 sleep 1
done done
echo "[INFO] Network interface is up!" echo "[INFO] Network interface is up!"
@@ -16,9 +16,9 @@ echo "[INFO] Starting ROS node..."
# Source ROS 2 Humble setup script # Source ROS 2 Humble setup script
if command -v nixos-rebuild; then if command -v nixos-rebuild; then
echo "[INFO] running on NixOS" echo "[INFO] running on NixOS"
else else
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
fi fi
# Source your workspace setup script # Source your workspace setup script

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# Wait for a network interface to be up (not necessarily online) # Wait for a network interface to be up (not necessarily online)
while ! ip link show | grep -q "state UP"; do while ! ip link show | grep -q "state UP"; do
echo "[INFO] Waiting for active network interface..." echo "[INFO] Waiting for active network interface..."
sleep 1 sleep 1
done done
echo "[INFO] Network interface is up!" echo "[INFO] Network interface is up!"
@@ -16,9 +16,9 @@ echo "[INFO] Starting ROS node..."
# Source ROS 2 Humble setup script # Source ROS 2 Humble setup script
if command -v nixos-rebuild; then if command -v nixos-rebuild; then
echo "[INFO] running on NixOS" echo "[INFO] running on NixOS"
else else
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
fi fi
# Source your workspace setup script # Source your workspace setup script
@@ -26,4 +26,3 @@ source $SCRIPT_DIR/../install/setup.bash
# Launch the ROS 2 node # Launch the ROS 2 node
ros2 run headless_pkg headless_full ros2 run headless_pkg headless_full

View File

@@ -1,26 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
[[ -z "$ANCHOR_WS" ]] && ANCHOR_WS="$SCRIPT_DIR/.." [[ -z $ANCHOR_WS ]] && ANCHOR_WS="$SCRIPT_DIR/.."
[[ -z "$AUTONOMY_WS" ]] && AUTONOMY_WS="$HOME/rover-Autonomy" [[ -z $AUTONOMY_WS ]] && AUTONOMY_WS="$HOME/rover-Autonomy"
BAG_LOCATION="$HOME/bags/autostart" BAG_LOCATION="$HOME/bags/autostart"
[[ ! -d "$BAG_LOCATION" ]] && mkdir -p "$BAG_LOCATION" [[ ! -d $BAG_LOCATION ]] && mkdir -p "$BAG_LOCATION"
# Wait for a network interface to be up (not necessarily online) # Wait for a network interface to be up (not necessarily online)
while ! ip link show | grep -q "state UP"; do while ! ip link show | grep -q "state UP"; do
echo "[INFO] Waiting for active network interface..." echo "[INFO] Waiting for active network interface..."
sleep 1 sleep 1
done done
echo "[INFO] Network interface is up!" echo "[INFO] Network interface is up!"
if command -v nixos-rebuild; then if command -v nixos-rebuild; then
echo "[INFO] running on NixOS" echo "[INFO] running on NixOS"
else else
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
fi fi
source $ANCHOR_WS/install/setup.bash source $ANCHOR_WS/install/setup.bash
[[ -f $AUTONOMY_WS/install/setup.bash ]] && source $AUTONOMY_WS/install/setup.bash [[ -f $AUTONOMY_WS/install/setup.bash ]] && source $AUTONOMY_WS/install/setup.bash

View File

@@ -3,8 +3,8 @@
repo_root="$(git rev-parse --show-toplevel)" repo_root="$(git rev-parse --show-toplevel)"
if [[ -z $repo_root ]]; then if [[ -z $repo_root ]]; then
echo "script must be run from within the rover-ros2 repo" >&2 echo "script must be run from within the rover-ros2 repo" >&2
exit 1 exit 1
fi fi
cd $repo_root cd $repo_root
@@ -12,9 +12,9 @@ cd $repo_root
echo "this will nuke all of your current un-commited git changes, including any changes to submodules and any gitignored files. is this okay? (y/N)" echo "this will nuke all of your current un-commited git changes, including any changes to submodules and any gitignored files. is this okay? (y/N)"
read okay read okay
if [[ ! "$okay" = "y" ]]; then if [[ ! $okay == "y" ]]; then
echo "you didn't say exactly 'y'. aborting." >&2 echo "you didn't say exactly 'y'. aborting." >&2
exit 2 exit 2
fi fi
echo echo
@@ -30,9 +30,8 @@ echo "in theory that should've done it. let's make sure"
status=$(git status --porcelain) status=$(git status --porcelain)
echo $status echo $status
if [[ -z $status ]]; then if [[ -z $status ]]; then
echo "nice, all clean!" echo "nice, all clean!"
else else
echo "uhh that's not supposed to be there. this is probably a bug in this script. good luck!" >&2 echo "uhh that's not supposed to be there. this is probably a bug in this script. good luck!" >&2
exit 3 exit 3
fi fi

View File

@@ -7,8 +7,8 @@ set -o pipefail
repo_root="$(git rev-parse --show-toplevel)" repo_root="$(git rev-parse --show-toplevel)"
if [[ -z $repo_root ]]; then if [[ -z $repo_root ]]; then
echo "script must be run from within the rover-ros2 repo" >&2 echo "script must be run from within the rover-ros2 repo" >&2
exit 1 exit 1
fi fi
cd "$repo_root" cd "$repo_root"
@@ -23,78 +23,78 @@ TESTS_PASSED=0
TESTS_FAILED=0 TESTS_FAILED=0
log() { log() {
echo -e "${BOLD}${YELLOW}info:${NC} ${1}" echo -e "${BOLD}${YELLOW}info:${NC} ${1}"
} }
pass() { pass() {
echo -e "${BOLD}${GREEN}pass:${NC} ${1}" echo -e "${BOLD}${GREEN}pass:${NC} ${1}"
TESTS_PASSED=$((TESTS_PASSED + 1)) TESTS_PASSED=$((TESTS_PASSED + 1))
} }
fail() { fail() {
echo -e "${BOLD}${RED}fail:${NC} ${1}" echo -e "${BOLD}${RED}fail:${NC} ${1}"
TESTS_FAILED=$((TESTS_FAILED + 1)) TESTS_FAILED=$((TESTS_FAILED + 1))
} }
cleanup() { cleanup() {
log "cleaning up" log "cleaning up"
if [[ -n $ANCHOR_PID ]]; then if [[ -n $ANCHOR_PID ]]; then
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
wait "$ANCHOR_PID" 2>/dev/null || true wait "$ANCHOR_PID" 2>/dev/null || true
fi fi
if [[ -n $SOCAT_PID ]]; then if [[ -n $SOCAT_PID ]]; then
kill -INT "$SOCAT_PID" 2>/dev/null || true kill -INT "$SOCAT_PID" 2>/dev/null || true
wait "$SOCAT_PID" 2>/dev/null || true wait "$SOCAT_PID" 2>/dev/null || true
fi fi
rm -f /tmp/ttyACM9 /tmp/ttyOUT 2>/dev/null || true rm -f /tmp/ttyACM9 /tmp/ttyOUT 2>/dev/null || true
} }
trap cleanup EXIT trap cleanup EXIT
source_ros2() { source_ros2() {
source install/setup.bash source install/setup.bash
} }
wait_for_topic() { wait_for_topic() {
local topic="$1" local topic="$1"
local timeout="${2:-5}" local timeout="${2:-5}"
local count=0 local count=0
while ! ros2 topic list 2>/dev/null | grep -q "^${topic}$"; do while ! ros2 topic list 2>/dev/null | grep -q "^${topic}$"; do
sleep 0.5 sleep 0.5
count=$((count + 1)) count=$((count + 1))
if [[ $count -ge $((timeout * 2)) ]]; then if [[ $count -ge $((timeout * 2)) ]]; then
return 1 return 1
fi fi
done done
return 0 return 0
} }
test_mock_connector() { test_mock_connector() {
log "testing mock connector" log "testing mock connector"
log "starting anchor with mock connector" log "starting anchor with mock connector"
setsid ros2 run anchor_pkg anchor --ros-args -p connector:=mock & setsid ros2 run anchor_pkg anchor --ros-args -p connector:=mock &
ANCHOR_PID=$! ANCHOR_PID=$!
sleep 2 sleep 2
if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then
fail "mock connector: anchor failed to start" fail "mock connector: anchor failed to start"
return 1 return 1
fi fi
if ! wait_for_topic "/anchor/to_vic/relay" 10; then if ! wait_for_topic "/anchor/to_vic/relay" 10; then
fail "mock connector: topics not available" fail "mock connector: topics not available"
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
return 1 return 1
fi fi
log "anchor started successfully" log "anchor started successfully"
# relay -> debug # relay -> debug
log "testing relay -> debug" log "testing relay -> debug"
local debug_output local debug_output
debug_output=$(timeout 5 bash -c ' debug_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/to_vic/debug & ros2 topic echo --once /anchor/to_vic/debug &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -102,17 +102,17 @@ test_mock_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if [[ -n "$debug_output" ]] && echo "$debug_output" | grep -q "can_relay_tovic,core,50"; then if [[ -n $debug_output ]] && echo "$debug_output" | grep -q "can_relay_tovic,core,50"; then
pass "mock connector: relay -> debug" pass "mock connector: relay -> debug"
else else
fail "mock connector: relay -> debug" fail "mock connector: relay -> debug"
fi fi
# mock_mcu -> from_vic/core # mock_mcu -> from_vic/core
log "testing mock_mcu (core) -> from_vic/core" log "testing mock_mcu (core) -> from_vic/core"
local core_output="" local core_output=""
core_output=$(timeout 5 bash -c ' core_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/from_vic/core & ros2 topic echo --once /anchor/from_vic/core &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -120,17 +120,17 @@ test_mock_connector() {
wait $ECHO_PID || true wait $ECHO_PID || true
' 2>/dev/null || true) || core_output="" ' 2>/dev/null || true) || core_output=""
if [[ -n "$core_output" ]] && echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 10"; then if [[ -n $core_output ]] && echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 10"; then
pass "mock connector: mock_mcu -> from_vic/core" pass "mock connector: mock_mcu -> from_vic/core"
else else
fail "mock connector: mock_mcu -> from_vic/core" fail "mock connector: mock_mcu -> from_vic/core"
fi fi
# mock_mcu -> from_vic/arm # mock_mcu -> from_vic/arm
log "testing mock_mcu (arm) -> from_vic/arm" log "testing mock_mcu (arm) -> from_vic/arm"
local arm_output local arm_output
arm_output=$(timeout 5 bash -c ' arm_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/from_vic/arm & ros2 topic echo --once /anchor/from_vic/arm &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -138,17 +138,17 @@ test_mock_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if [[ -n "$arm_output" ]] && echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 55"; then if [[ -n $arm_output ]] && echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 55"; then
pass "mock connector: mock_mcu -> from_vic/arm" pass "mock connector: mock_mcu -> from_vic/arm"
else else
fail "mock connector: mock_mcu -> from_vic/arm" fail "mock connector: mock_mcu -> from_vic/arm"
fi fi
# mock_mcu -> from_vic/bio # mock_mcu -> from_vic/bio
log "testing mock_mcu (citadel) -> from_vic/bio" log "testing mock_mcu (citadel) -> from_vic/bio"
local bio_output local bio_output
bio_output=$(timeout 5 bash -c ' bio_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/from_vic/bio & ros2 topic echo --once /anchor/from_vic/bio &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -156,17 +156,17 @@ test_mock_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if echo "$bio_output" | grep -q "mcu_name: citadel" && echo "$bio_output" | grep -q "command_id: 20"; then if echo "$bio_output" | grep -q "mcu_name: citadel" && echo "$bio_output" | grep -q "command_id: 20"; then
pass "mock connector: mock_mcu -> from_vic/bio" pass "mock connector: mock_mcu -> from_vic/bio"
else else
fail "mock connector: mock_mcu -> from_vic/bio" fail "mock connector: mock_mcu -> from_vic/bio"
fi fi
# relay_string -> debug # relay_string -> debug
log "testing relay_string -> debug" log "testing relay_string -> debug"
local relay_string_output local relay_string_output
relay_string_output=$(timeout 5 bash -c ' relay_string_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/to_vic/debug & ros2 topic echo --once /anchor/to_vic/debug &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -174,55 +174,55 @@ test_mock_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if [[ -n "$relay_string_output" ]] && echo "$relay_string_output" | grep -q "test_raw_string_data"; then if [[ -n $relay_string_output ]] && echo "$relay_string_output" | grep -q "test_raw_string_data"; then
pass "mock connector: relay_string -> debug" pass "mock connector: relay_string -> debug"
else else
fail "mock connector: relay_string -> debug" fail "mock connector: relay_string -> debug"
fi fi
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
wait "$ANCHOR_PID" 2>/dev/null || true wait "$ANCHOR_PID" 2>/dev/null || true
ANCHOR_PID="" ANCHOR_PID=""
} }
test_serial_connector() { test_serial_connector() {
log "testing serial connector" log "testing serial connector"
log "creating virtual serial ports with socat" log "creating virtual serial ports with socat"
socat pty,raw,echo=0,link=/tmp/ttyACM9 pty,raw,echo=0,link=/tmp/ttyOUT 2>/dev/null & socat pty,raw,echo=0,link=/tmp/ttyACM9 pty,raw,echo=0,link=/tmp/ttyOUT 2>/dev/null &
SOCAT_PID=$! SOCAT_PID=$!
sleep 2 sleep 2
if ! kill -0 "$SOCAT_PID" 2>/dev/null; then if ! kill -0 "$SOCAT_PID" 2>/dev/null; then
fail "serial connector: failed to create virtual serial ports" fail "serial connector: failed to create virtual serial ports"
return 1 return 1
fi fi
log "starting anchor with serial connector (override: /tmp/ttyACM9)" log "starting anchor with serial connector (override: /tmp/ttyACM9)"
setsid ros2 run anchor_pkg anchor --ros-args -p connector:=serial -p serial_override:=/tmp/ttyACM9 & setsid ros2 run anchor_pkg anchor --ros-args -p connector:=serial -p serial_override:=/tmp/ttyACM9 &
ANCHOR_PID=$! ANCHOR_PID=$!
sleep 2 sleep 2
if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then
fail "serial connector: anchor failed to start" fail "serial connector: anchor failed to start"
kill -INT "$SOCAT_PID" 2>/dev/null || true kill -INT "$SOCAT_PID" 2>/dev/null || true
return 1 return 1
fi fi
if ! wait_for_topic "/anchor/to_vic/relay" 10; then if ! wait_for_topic "/anchor/to_vic/relay" 10; then
fail "serial connector: topics not available" fail "serial connector: topics not available"
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
kill -INT "$SOCAT_PID" 2>/dev/null || true kill -INT "$SOCAT_PID" 2>/dev/null || true
return 1 return 1
fi fi
pass "serial connector: anchor starts with virtual serial" pass "serial connector: anchor starts with virtual serial"
# relay_string -> debug # relay_string -> debug
log "testing relay_string -> debug" log "testing relay_string -> debug"
local relay_string_output local relay_string_output
relay_string_output=$(timeout 5 bash -c ' relay_string_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/to_vic/debug & ros2 topic echo --once /anchor/to_vic/debug &
ECHO_PID=$! ECHO_PID=$!
sleep 0.5 sleep 0.5
@@ -230,49 +230,49 @@ test_serial_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if [[ -n "$relay_string_output" ]] && echo "$relay_string_output" | grep -q "serial_test_string"; then if [[ -n $relay_string_output ]] && echo "$relay_string_output" | grep -q "serial_test_string"; then
pass "serial connector: relay_string -> debug" pass "serial connector: relay_string -> debug"
else else
fail "serial connector: relay_string -> debug" fail "serial connector: relay_string -> debug"
fi fi
log "serial data transfer tests skipped (virtual pty limitation)" log "serial data transfer tests skipped (virtual pty limitation)"
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
wait "$ANCHOR_PID" 2>/dev/null || true wait "$ANCHOR_PID" 2>/dev/null || true
ANCHOR_PID="" ANCHOR_PID=""
kill -INT "$SOCAT_PID" 2>/dev/null || true kill -INT "$SOCAT_PID" 2>/dev/null || true
wait "$SOCAT_PID" 2>/dev/null || true wait "$SOCAT_PID" 2>/dev/null || true
SOCAT_PID="" SOCAT_PID=""
} }
test_can_connector() { test_can_connector() {
log "testing CAN connector" log "testing CAN connector"
log "starting anchor with CAN connector (override: vcan0)" log "starting anchor with CAN connector (override: vcan0)"
setsid ros2 run anchor_pkg anchor --ros-args -p connector:=can -p can_override:=vcan0 & setsid ros2 run anchor_pkg anchor --ros-args -p connector:=can -p can_override:=vcan0 &
ANCHOR_PID=$! ANCHOR_PID=$!
sleep 2 sleep 2
if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then
fail "CAN connector: anchor failed to start" fail "CAN connector: anchor failed to start"
return 1 return 1
fi fi
if ! wait_for_topic "/anchor/to_vic/relay" 10; then if ! wait_for_topic "/anchor/to_vic/relay" 10; then
fail "CAN connector: topics not available" fail "CAN connector: topics not available"
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
return 1 return 1
fi fi
log "anchor started successfully" log "anchor started successfully"
sleep 1 sleep 1
# relay -> CAN bus # relay -> CAN bus
log "testing relay -> CAN bus" log "testing relay -> CAN bus"
local can_output local can_output
can_output=$(timeout 8 bash -c ' can_output=$(timeout 8 bash -c '
candump -n 1 vcan0 & candump -n 1 vcan0 &
DUMP_PID=$! DUMP_PID=$!
sleep 1 sleep 1
@@ -282,18 +282,18 @@ test_can_connector() {
wait $DUMP_PID wait $DUMP_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
# core=1, int16x4=2, cmd=30 -> id = (1<<8)|(2<<6)|30 = 0x19E # core=1, int16x4=2, cmd=30 -> id = (1<<8)|(2<<6)|30 = 0x19E
if echo "$can_output" | grep -qi "19E"; then if echo "$can_output" | grep -qi "19E"; then
pass "CAN connector: relay -> CAN bus" pass "CAN connector: relay -> CAN bus"
else else
fail "CAN connector: relay -> CAN bus (got: $can_output)" fail "CAN connector: relay -> CAN bus (got: $can_output)"
fi fi
# CAN -> from_vic/core # CAN -> from_vic/core
log "testing CAN bus -> from_vic/core" log "testing CAN bus -> from_vic/core"
local core_output local core_output
core_output=$(timeout 5 bash -c ' core_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/from_vic/core & ros2 topic echo --once /anchor/from_vic/core &
ECHO_PID=$! ECHO_PID=$!
sleep 1 sleep 1
@@ -303,17 +303,17 @@ test_can_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 15"; then if echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 15"; then
pass "CAN connector: CAN -> from_vic/core" pass "CAN connector: CAN -> from_vic/core"
else else
fail "CAN connector: CAN -> from_vic/core" fail "CAN connector: CAN -> from_vic/core"
fi fi
# CAN -> from_vic/arm # CAN -> from_vic/arm
log "testing CAN bus -> from_vic/arm" log "testing CAN bus -> from_vic/arm"
local arm_output local arm_output
arm_output=$(timeout 5 bash -c ' arm_output=$(timeout 5 bash -c '
ros2 topic echo --once /anchor/from_vic/arm & ros2 topic echo --once /anchor/from_vic/arm &
ECHO_PID=$! ECHO_PID=$!
sleep 1 sleep 1
@@ -323,17 +323,17 @@ test_can_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 20"; then if echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 20"; then
pass "CAN connector: CAN -> from_vic/arm" pass "CAN connector: CAN -> from_vic/arm"
else else
fail "CAN connector: CAN -> from_vic/arm" fail "CAN connector: CAN -> from_vic/arm"
fi fi
# double data type # double data type
log "testing CAN double data type" log "testing CAN double data type"
local double_output local double_output
double_output=$(timeout 8 bash -c ' double_output=$(timeout 8 bash -c '
ros2 topic echo --once /anchor/from_vic/core & ros2 topic echo --once /anchor/from_vic/core &
ECHO_PID=$! ECHO_PID=$!
sleep 1 sleep 1
@@ -345,17 +345,17 @@ test_can_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if echo "$double_output" | grep -q "mcu_name: core" && echo "$double_output" | grep -q "command_id: 5"; then if echo "$double_output" | grep -q "mcu_name: core" && echo "$double_output" | grep -q "command_id: 5"; then
pass "CAN connector: double data type" pass "CAN connector: double data type"
else else
fail "CAN connector: double data type" fail "CAN connector: double data type"
fi fi
# float32x2 data type # float32x2 data type
log "testing CAN float32x2 data type" log "testing CAN float32x2 data type"
local float_output local float_output
float_output=$(timeout 8 bash -c ' float_output=$(timeout 8 bash -c '
ros2 topic echo --once /anchor/from_vic/core & ros2 topic echo --once /anchor/from_vic/core &
ECHO_PID=$! ECHO_PID=$!
sleep 1 sleep 1
@@ -367,81 +367,81 @@ test_can_connector() {
wait $ECHO_PID wait $ECHO_PID
' 2>/dev/null) || true ' 2>/dev/null) || true
if echo "$float_output" | grep -q "mcu_name: core" && echo "$float_output" | grep -q "command_id: 10"; then if echo "$float_output" | grep -q "mcu_name: core" && echo "$float_output" | grep -q "command_id: 10"; then
pass "CAN connector: float32x2 data type" pass "CAN connector: float32x2 data type"
else else
fail "CAN connector: float32x2 data type" fail "CAN connector: float32x2 data type"
fi fi
kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true
wait "$ANCHOR_PID" 2>/dev/null || true wait "$ANCHOR_PID" 2>/dev/null || true
ANCHOR_PID="" ANCHOR_PID=""
} }
check_prerequisites() { check_prerequisites() {
log "checking prerequisites" log "checking prerequisites"
local missing=0 local missing=0
if [[ ! -f install/setup.bash ]]; then if [[ ! -f install/setup.bash ]]; then
fail "install/setup.bash not found; run 'colcon build' first" fail "install/setup.bash not found; run 'colcon build' first"
missing=1 missing=1
fi fi
if ! command -v socat &>/dev/null; then if ! command -v socat &>/dev/null; then
fail "socat not found; install it or use 'nix develop'" fail "socat not found; install it or use 'nix develop'"
missing=1 missing=1
fi fi
if ! command -v cansend &>/dev/null || ! command -v candump &>/dev/null; then if ! command -v cansend &>/dev/null || ! command -v candump &>/dev/null; then
fail "can-utils (cansend/candump) not found; install it or use 'nix develop'" fail "can-utils (cansend/candump) not found; install it or use 'nix develop'"
missing=1 missing=1
fi fi
if ! ip link show vcan0 &>/dev/null; then if ! ip link show vcan0 &>/dev/null; then
fail "vcan0 interface not found" fail "vcan0 interface not found"
log " create it with:" log " create it with:"
log " sudo ip link add dev vcan0 type vcan" log " sudo ip link add dev vcan0 type vcan"
log " sudo ip link set vcan0 up" log " sudo ip link set vcan0 up"
missing=1 missing=1
elif ! ip link show vcan0 | grep -q ",UP"; then elif ! ip link show vcan0 | grep -q ",UP"; then
fail "vcan0 exists but is not UP" fail "vcan0 exists but is not UP"
log " enable it with: sudo ip link set vcan0 up" log " enable it with: sudo ip link set vcan0 up"
missing=1 missing=1
fi fi
if [[ $missing -eq 1 ]]; then if [[ $missing -eq 1 ]]; then
echo "" echo ""
log "prerequisites not met" log "prerequisites not met"
exit 1 exit 1
fi fi
log "all prerequisites met" log "all prerequisites met"
} }
main() { main() {
echo "" echo ""
log "anchor connector test suite" log "anchor connector test suite"
echo "" echo ""
check_prerequisites check_prerequisites
log "sourcing ROS2 workspace" log "sourcing ROS2 workspace"
source_ros2 source_ros2
test_mock_connector test_mock_connector
test_serial_connector test_serial_connector
test_can_connector test_can_connector
echo "" echo ""
log "test summary" log "test summary"
echo -e "${BOLD}${GREEN}passed:${NC} $TESTS_PASSED" echo -e "${BOLD}${GREEN}passed:${NC} $TESTS_PASSED"
echo -e "${BOLD}${RED}failed:${NC} $TESTS_FAILED" echo -e "${BOLD}${RED}failed:${NC} $TESTS_FAILED"
echo "" echo ""
if [[ $TESTS_FAILED -gt 0 ]]; then if [[ $TESTS_FAILED -gt 0 ]]; then
exit 1 exit 1
fi fi
exit 0 exit 0
} }
main "$@" main "$@"

View File

@@ -1,8 +1,9 @@
{ pkgs, ... }: { ... }:
{ {
projectRootFile = "flake.nix"; projectRootFile = "flake.nix";
programs = { programs = {
nixfmt.enable = true; nixfmt.enable = true;
black.enable = true; black.enable = true;
shfmt.enable = true;
}; };
} }