add loop breaker to test 2

This commit is contained in:
matt committed 2026-10-17 23:45:22 -07:00
1 parent 0b4bb35962
commit 44fa740532
2 files changed
+78 -47

No files matched your search

+77 -46
View File
@@ -1,46 +1,77 @@
pipeline {
agent any
// ------------------------------------------------------------------
// Global environment variables – change as needed
// ------------------------------------------------------------------
environment {
DEBIAN_IP = 'debian_machine_ip'
SSH_CREDENTIALS_ID = 'jenkins_root_ssh'
REMOTE_SCRIPT = '/opt/ble-test/ble_api/api/ble.py'
DEBIAN_IP = 'debian_machine_ip'
SSH_CREDENTIALS_ID = 'jenkins_root_ssh'
REMOTE_SCRIPT = '/opt/ble-test/ble_api/api/ble.py'
}
// ------------------------------------------------------------------
// Build parameters (visible to the user)
// ------------------------------------------------------------------
parameters {
string(name: 'host_ip', defaultValue: '172.20.20.51', description: 'IP of the host that runs the BLE test')
string(name: 'test_count', defaultValue: '25', description: 'Number of test iterations')
string(name: 'BT_USB_ID', defaultValue: '0bda:c821', description: 'USB ID of the BLE dongle')
string(name: 'host_ip', defaultValue: '', description: 'IP of the host that runs the BLE test')
string(name: 'test_count', defaultValue: '1000', description: 'Number of test iterations')
string(name: 'BT_USB_ID', defaultValue: '0001', description: 'USB ID of the BLE dongle')
}
// ------------------------------------------------------------------
// Stages
// ------------------------------------------------------------------
stages {
// ---------------------------------------------------------------
// 1️⃣ Prepare a unique screen session name
// ---------------------------------------------------------------
stage('Prepare Screen Name') {
steps {
script {
// epoch seconds truncated to the last 6 digits
def epochSec = System.currentTimeMillis() / 1000
env.SCREEN_SESSION = "ble_test_${String.format('%06d', epochSec % 1_000_000)}"
}
}
}
// ---------------------------------------------------------------
// 2️⃣ Verify / install screen (runs only once)
// ---------------------------------------------------------------
stage('Ensure screen is present') {
steps {
sshagent([env.SSH_CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
# If screen is missing, install it
if ! command -v screen > /dev/null; then
echo "screen not found – installing"
apt-get update && apt-get install -y screen
fi
EOF
"""
}
}
}
// ---------------------------------------------------------------
// 3️⃣ Run the BLE test in a detached screen session
// ---------------------------------------------------------------
stage('Run BLE Test') {
steps {
// ----- 1. Compute a 6‑digit hash from the epoch seconds
script {
// epoch seconds at the moment the build starts
def epochSec = System.currentTimeMillis() / 1000
// keep only the last 6 decimal digits
def hash = String.format("%06d", epochSec % 1_000_000)
env.SCREEN_SESSION = "ble_test_${hash}"
}
// ----- 2. Retry SSH 3× in case of a transient hiccup
retry(3) {
// ----- 3. Timeout the whole test (adjust as needed)
timeout(time: 5, unit: 'MINUTES') {
timeout(time: 8, unit: 'HOURS') {
sshagent([env.SSH_CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
# Ensure screen is present
if ! command -v screen > /dev/null; then
echo "screen not found - installing"
apt-get update && apt-get install -y screen
fi
# Start the test in a detached screen session
screen -dmS ${env.SCREEN_SESSION} bash -c '
echo "===== BLE test starting: \$(date)" > /tmp/ble_test.log
@@ -52,17 +83,13 @@ pipeline {
python3 -u ${REMOTE_SCRIPT} ${params.test_count} 2>&1 | tee -a /tmp/ble_test.log
echo "===== BLE test finished: \$(date)" >> /tmp/ble_test.log
'
# Give screen a moment to spin up
sleep 2
EOF
"""
}
// Small pause so the screen session has a chance to start
sh 'sleep 2'
// Verify that the test reported completion
// Verify that the test finished
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
@@ -71,30 +98,34 @@ pipeline {
if grep -q "BLE test finished" /tmp/ble_test.log; then
echo "Test completed successfully."
else
echo "Test did NOT finish - aborting build."
echo "Test did NOT finish – aborting build."
exit 1
fi
EOF
"""
} // end timeout
} // end retry
} // end steps
} // end stage
} // end stages
}
}
}
}
}
// ----- 4. Clean up the screen session on the remote host
// ------------------------------------------------------------------
// Post‑build cleanup – kill the remote screen session
// ------------------------------------------------------------------
post {
always {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
if screen -list | grep -q ${env.SCREEN_SESSION}; then
screen -S ${env.SCREEN_SESSION} -X quit
fi
EOF
"""
sshagent([env.SSH_CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
if screen -list | grep -q ${env.SCREEN_SESSION}; then
screen -S ${env.SCREEN_SESSION} -X quit
fi
EOF
"""
}
}
}
}
+1 -1
View File
@@ -291,7 +291,7 @@ def test(test_count = 0, bt_usb_id = None) -> None:
log.info(f" Scanning MACs: {mac_list}")
test_list = mac_list
while not test_result:
if test_count > 20:
if test_loop_count > 20:
reset_adapter()
reset_count = reset_count + 1
test_loop_count = 0