Skip to content
Snippets Groups Projects
Commit 141963da authored by bbartels's avatar bbartels Committed by ucart
Browse files

quad: add valgrind to CI

parent 2447b64a
No related branches found
No related tags found
No related merge requests found
image: ruby:2.3
before_script:
- apt-get update -qq && apt-get install -y -qq libbluetooth-dev cmake
- apt-get update -qq && apt-get install -y -qq libbluetooth-dev cmake valgrind
stages:
- build
......
......@@ -39,8 +39,8 @@ test: all
$(MAKE) -C src/computation_graph test
$(MAKE) -C src/quad_app test
ruby scripts/tests/test_safety_checks.rb
ruby scripts/tests/test_memory_integrity.rb
# ruby scripts/tests/test_unix_uart.rb
# ruby scripts/tests/run_virtual_test_flight.rb
clean:
rm -rf $(INCDIR) $(LIBDIR) $(OUTDIR) $(EXEDIR)
......
#!/usr/bin/env ruby
# Test Flight
#
# A simple virtual test flight (take off, hover, and set back down)
# with valgrind, in order to detect memory leaks
script_dir = File.expand_path(File.dirname(__FILE__))
require script_dir + "/testing_library"
bin_dir = script_dir + "/../../bin/"
Dir.chdir(bin_dir)
puts("Firing up the quad...")
# Start virtual quad
quad = Process.spawn("valgrind --leak-check=full --log-file=./valgrind.out ./virt-quad")
delay_spin_cursor(3)
set_gear GEAR_OFF
set_flap FLAP_ON
##################
# Begin Flight!
##################
begin
puts("Starting flight...")
# Set initial quad orientation (flat on ground, facing forward)
`./virt-quad set i2c_imu_x 0`
`./virt-quad set i2c_imu_y 0`
`./virt-quad set i2c_imu_z -1`
`./virt-quad set rc_roll 0.498`
`./virt-quad set rc_pitch 0.497`
`./virt-quad set rc_yaw 0.498`
puts("Turning on GEAR...")
set_gear GEAR_ON
sleep 0.015
puts("Increasing Thrust to half maximum...")
for i in (THROTTLE_MIN..THROTTLE_MID).step(0.01)
set_throttle(i)
sleep 0.005
end
puts("Hovering for 5 seconds")
delay_spin_cursor(5)
puts("Switching to autonomous and hovering for 5 seconds")
set_flap FLAP_ON
delay_spin_cursor(5)
puts("Switch back to manual, relaxing thrust to zero")
set_flap FLAP_OFF
i = THROTTLE_MID
while i > THROTTLE_MIN
i -= 0.01
set_throttle(i)
sleep 0.005
end
puts("Swiching off GEAR...")
set_gear GEAR_OFF
# puts("Collecting logs...")
# msg = ""
# misses = 0
# fifo = File::open(UART_TX)
# while misses < 10
# puts "trying..."
# if fifo.eof?
# misses += 1
# next
# end
# msg += fifo.read()
# end
# fifo.close()
# puts msg
puts("Flight ended successfully.");
ensure
Process.kill(2, quad)
sleep 1 # wait for valgrind to write to file
# Process the valgrind file
file = File.open("./valgrind.out")
everything = file.readlines
last_line = everything.last
errors = last_line.scanf("%s ERROR SUMMARY: %d errors %s")
if errors[1] > 0
puts everything
puts "Memory Integrity Check Failed."
Kernel.exit(1)
end
puts "Memory Integrity Check Passed."
end
......@@ -83,7 +83,7 @@ Timeout::timeout(60) {
puts("Check that motors turn on")
set_throttle THROTTLE_MID
spinner = Thread.new { delay_spin_cursor(5) }
spinner = Thread.new { delay_spin_cursor(3) }
motors = get_motor_averages(100, 3)
spinner.exit
p motors
......@@ -92,7 +92,7 @@ Timeout::timeout(60) {
puts("Check that when quad is tilted, motors respond correctly")
puts("Tilting forwards...")
`./virt-quad set i2c_imu_x 0.25`
spinner = Thread.new { delay_spin_cursor(5) }
spinner = Thread.new { delay_spin_cursor(3) }
motors = get_motor_averages(100, 3)
spinner.exit
p motors
......@@ -102,7 +102,7 @@ Timeout::timeout(60) {
assert_operator(motors[2], :>, motors[3])
puts("Tilting backwards...")
`./virt-quad set i2c_imu_x -0.25`
spinner = Thread.new { delay_spin_cursor(5) }
spinner = Thread.new { delay_spin_cursor(3) }
motors = get_motor_averages(100, 3)
spinner.exit
p motors
......@@ -113,7 +113,7 @@ Timeout::timeout(60) {
puts("Tilting right...")
`./virt-quad set i2c_imu_x 0`
`./virt-quad set i2c_imu_y 0.25`
spinner = Thread.new { delay_spin_cursor(5) }
spinner = Thread.new { delay_spin_cursor(3) }
motors = get_motor_averages(100, 3)
spinner.exit
p motors
......@@ -123,7 +123,7 @@ Timeout::timeout(60) {
assert_operator(motors[1], :<, motors[3])
puts("Tilting left...")
`./virt-quad set i2c_imu_y -0.25`
spinner = Thread.new { delay_spin_cursor(5) }
spinner = Thread.new { delay_spin_cursor(3) }
motors = get_motor_averages(100, 3)
spinner.exit
p motors
......
......@@ -33,6 +33,7 @@ UART_TX = "virt-quad-fifos/uart-tx"
require 'test/unit/assertions'
require 'timeout'
require 'thread'
require 'scanf'
include Test::Unit::Assertions
# Utility functions
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment