Files
MeshCore/test/test_full_infrastructure_selection.sh
T

132 lines
5.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
source build.sh
fail() { echo "test_full_infrastructure_selection: $*" >&2; exit 1; }
# Resolve real board inheritance, but never compile or flash firmware.
init_project_context >/dev/null
assert_auto_unified() (
local plain=$1 expected=$2
BUILD_PROFILE_OVERRIDE=auto
BUILD_PROFILE_EXPLICIT=0
SINGLE_TARGET_FULL_BUILD=0
RESOLVED_BUILD_TARGETS=("$plain")
configure_effective_build_profile build-firmware >/dev/null
[ "${RESOLVED_BUILD_TARGETS[*]}" = "$expected" ] || fail "$plain selected the wrong target"
[ "$SINGLE_TARGET_FULL_BUILD" = 1 ] || fail "$plain bypassed the unified recipe"
[ "$AUTO_PREFER_FULL_BUILD" = 0 ] || fail "$plain still schedules a plain Full artifact"
local -a built=()
run_logged_build_targets() {
[ "$FIRMWARE_FILENAME_INFIX" = full-usb-wifi ] || fail "wrong artifact name"
[ "$ESP32_FULL_BUILD" = 1 ] || fail "lost expanded partitions"
[ "$PACKET_LOGGING_OVERRIDE" = on ] || fail "lost USB packet logging"
[ "$MQTT_BRIDGE_OVERRIDE" = on ] || fail "lost MQTT"
[ "$MESHDEBUG_OVERRIDE" = off ] || fail "enabled verbose debug"
built+=("$@")
}
run_command build-firmware >/dev/null
[ "${built[*]}" = "$expected" ] || fail "auto emitted duplicate Full artifacts"
built=()
run_full_esp32_build_targets all "$plain" "$expected" >/dev/null
[ "${built[*]}" = "$expected" ] || fail "matrix emitted duplicate Full artifacts"
)
assert_auto_unified heltec_v4_r8_repeater heltec_v4_r8_repeater_observer_mqtt
assert_auto_unified heltec_v4_r8_room_server heltec_v4_r8_room_server_observer_mqtt
assert_auto_unified heltec_v4_r8_tft_repeater heltec_v4_r8_tft_repeater_observer_mqtt
assert_auto_unified Heltec_T190_repeater_ Heltec_T190_repeater_observer_mqtt
assert_auto_unified LilyGo_TLora_V2_1_1_6_room_server LilyGo_TLora_V2_1_1_6_room_server_observer_mqtt_
assert_auto_unified heltec_v4_r8_repeater_observer_mqtt heltec_v4_r8_repeater_observer_mqtt
# Portable images and exact reduced OTA identities must not be consolidated.
for target in heltec_v4_r8_repeater heltec_v4_r8_room_server \
heltec_v4_r8_repeater_lora_ota_no_external_sensors; do
(
BUILD_PROFILE_OVERRIDE=standard
BUILD_PROFILE_EXPLICIT=1
SINGLE_TARGET_FULL_BUILD=0
RESOLVED_BUILD_TARGETS=("$target")
configure_effective_build_profile build-firmware >/dev/null
[ "${RESOLVED_BUILD_TARGETS[*]}" = "$target" ] || fail "lost portable target $target"
[ "$BUILD_PROFILE_EFFECTIVE" = standard ] || fail "expanded portable image $target"
[ "$SINGLE_TARGET_FULL_BUILD" = 0 ] || fail "portable image entered Full pipeline"
)
done
for target in Tbeam_SX1262_repeater Tbeam_SX1276_repeater \
Tbeam_SX1262_room_server Tbeam_SX1276_room_server \
LilyGo_TLora_V2_1_1_6_repeater \
heltec_v4_r8_repeater_lora_ota_no_external_sensors \
RAK_4631_repeater_bridge_rs232_serial1_lora_ota_no_external_sensors; do
if get_unified_full_infrastructure_target "$target" >/dev/null; then
fail "consolidated a distinct capacity/OTA contract: $target"
fi
done
(
PIO_ENV_BOARD_BY_NAME[heltec_v4_r8_repeater_observer_mqtt]=different_board
if get_unified_full_infrastructure_target heltec_v4_r8_repeater >/dev/null; then
fail "accepted a different physical board"
fi
)
# Direct observer promotion must use the matrix's exact output recipe even if
# interactive flags previously requested MQTT without USB logging. Stop at the
# existing-artifact check to exercise the real build entry point without pio run.
(
ESP32_FULL_BUILD=0
BUILD_PROFILE_EFFECTIVE=standard
BUILD_PROFILE_OVERRIDE=auto
BUILD_PROFILE_EXPLICIT=0
FIRMWARE_VERSION=vtest
RESUME_BUILD_OUTPUT=1
FIRMWARE_FILENAME_INFIX=""
MESHDEBUG_OVERRIDE=on
PACKET_LOGGING_OVERRIDE=off
MQTT_BRIDGE_OVERRIDE=off
MQTT_DEBUG_OVERRIDE=on
observed_filename=""
observed_output=""
build_artifacts_exist() {
observed_filename=$2
observed_output="$PACKET_LOGGING_OVERRIDE/$MQTT_BRIDGE_OVERRIDE/$MESHDEBUG_OVERRIDE/$MQTT_DEBUG_OVERRIDE"
return 0
}
build_firmware heltec_v4_r8_repeater_observer_mqtt >/dev/null
[[ "$observed_filename" == heltec_v4_r8_repeater_observer_mqtt-full-usb-wifi-ota-vtest-* ]] \
|| fail "direct observer kept a duplicate name"
[ "$observed_output" = on/on/off/off ] || fail "direct observer differs from unified recipe"
[ "$PACKET_LOGGING_OVERRIDE/$MQTT_BRIDGE_OVERRIDE/$MESHDEBUG_OVERRIDE/$MQTT_DEBUG_OVERRIDE" = off/off/on/on ] \
|| fail "observer output settings leaked into subsequent builds"
)
(
standard_built=""
full_built=""
REQUIRE_OTA_UPDATES=0
run_logged_build_targets() {
if [ "$ESP32_FULL_BUILD" = 0 ]; then standard_built="$*"; else full_built="$*"; fi
}
run_logging_matrix_build_targets heltec_v4_r8_repeater \
heltec_v4_r8_repeater_lora_ota_no_external_sensors \
heltec_v4_r8_repeater_observer_mqtt >/dev/null
[ "$standard_built" = 'heltec_v4_r8_repeater heltec_v4_r8_repeater_lora_ota_no_external_sensors' ] \
|| fail "matrix removed a portable build"
[ "$full_built" = heltec_v4_r8_repeater_observer_mqtt ] || fail "matrix duplicated Full"
[ "$ESP32_LORA_OTA_APP_LIMIT" = 1310720 ] || fail "changed the 1.25 MiB portable limit"
)
# The default build settings retain power saving; this does not overwrite
# preferences already stored on a device.
[ "$FIRMWARE_PROFILE_OVERRIDE" = cascade ] || fail "default profile changed"
PLATFORMIO_BUILD_FLAGS=""
apply_firmware_profile_overrides
[[ "$PLATFORMIO_BUILD_FLAGS" == *-DDEFAULT_POWERSAVING_ENABLED=1* ]] || fail "device power saving disabled"
[[ "$PLATFORMIO_BUILD_FLAGS" == *-DDEFAULT_RXPS_ENABLED=1* ]] || fail "RX power saving disabled"
echo "test_full_infrastructure_selection: OK"