From 12b9928a5695240ef4475b5c48fbf313923c7738 Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Mon, 5 Aug 2019 14:43:27 +1000 Subject: [PATCH] Tools: autotest: break out a load_fence function --- Tools/autotest/apmrover2.py | 5 +---- Tools/autotest/arducopter.py | 15 +++------------ Tools/autotest/arduplane.py | 13 +++---------- Tools/autotest/common.py | 23 +++++++++++++++++++++++ Tools/autotest/quadplane.py | 2 +- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/Tools/autotest/apmrover2.py b/Tools/autotest/apmrover2.py index cf4ba40846..d1cab8a900 100644 --- a/Tools/autotest/apmrover2.py +++ b/Tools/autotest/apmrover2.py @@ -484,10 +484,7 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm) self.context_push() ex = None try: - avoid_filepath = os.path.join(self.mission_directory(), - "rover-fence-ac-avoid.txt") - self.mavproxy.send("fence load %s\n" % avoid_filepath) - self.mavproxy.expect("Loaded 6 geo-fence") + self.load_fence("rover-fence-ac-avoid.txt") self.set_parameter("FENCE_ENABLE", 0) self.set_parameter("PRX_TYPE", 10) self.set_parameter("RC10_OPTION", 40) # proximity-enable diff --git a/Tools/autotest/arducopter.py b/Tools/autotest/arducopter.py index 43ea913bfc..ff17ddab6d 100644 --- a/Tools/autotest/arducopter.py +++ b/Tools/autotest/arducopter.py @@ -661,10 +661,7 @@ class AutoTestCopter(AutoTest): self.progress("home: %s" % str(m)) self.start_subtest("ensure we can't arm if ouside fence") - fence = os.path.join(self.mission_directory(), - "fence-in-middle-of-nowhere.txt") - self.mavproxy.send('fence load %s\n' % fence) - self.mavproxy.expect("Loaded 6 geo-fence") + self.load_fence_using_mavproxy("fence-in-middle-of-nowhere.txt") self.delay_sim_time(5) # let fence check run so it loads-from-eeprom seen_statustext = False seen_command_ack = False @@ -3299,10 +3296,7 @@ class AutoTestCopter(AutoTest): self.context_push() ex = None try: - avoid_filepath = os.path.join(self.mission_directory(), - "copter-avoidance-fence.txt") - self.mavproxy.send("fence load %s\n" % avoid_filepath) - self.mavproxy.expect("Loaded 5 geo-fence") + self.load_fence("copter-avoidance-fence.txt") self.set_parameter("FENCE_ENABLE", 0) self.set_parameter("PRX_TYPE", 10) self.set_parameter("RC10_OPTION", 40) # proximity-enable @@ -3324,10 +3318,7 @@ class AutoTestCopter(AutoTest): self.context_push() ex = None try: - avoid_filepath = os.path.join(self.mission_directory(), - "copter-avoidance-fence.txt") - self.mavproxy.send("fence load %s\n" % avoid_filepath) - self.mavproxy.expect("Loaded 5 geo-fence") + self.load_fence("copter-avoidance-fence.txt") self.set_parameter("FENCE_ENABLE", 1) self.check_avoidance_corners() except Exception as e: diff --git a/Tools/autotest/arduplane.py b/Tools/autotest/arduplane.py index 3515c5b8a6..97e80e415e 100644 --- a/Tools/autotest/arduplane.py +++ b/Tools/autotest/arduplane.py @@ -959,10 +959,7 @@ class AutoTestPlane(AutoTest): try: self.progress("Checking for bizarre healthy-when-not-present-or-enabled") self.assert_fence_sys_status(False, False, True) - fence_filepath = os.path.join(self.mission_directory(), - "CMAC-fence.txt") - self.mavproxy.send("fence load %s\n" % fence_filepath) - self.mavproxy.expect("Loaded 6 geo-fence") + self.load_fence("CMAC-fence.txt") m = self.mav.recv_match(type='FENCE_STATUS', blocking=True, timeout=2) if m is not None: raise NotAchievedException("Got FENCE_STATUS unexpectedly"); @@ -997,8 +994,7 @@ class AutoTestPlane(AutoTest): # test a rather unfortunate behaviour: self.progress("Killing a live fence with fence-clear") - self.mavproxy.send("fence load %s\n" % fence_filepath) - self.mavproxy.expect("Loaded 6 geo-fence") + self.load_fence("CMAC-fence.txt") self.set_parameter("FENCE_ACTION", mavutil.mavlink.FENCE_ACTION_RTL) self.do_fence_enable() self.assert_fence_sys_status(True, True, True) @@ -1019,10 +1015,7 @@ class AutoTestPlane(AutoTest): def test_fence_breach_circle_at(self, loc, disable_on_breach=False): ex = None try: - fence_filepath = os.path.join(self.mission_directory(), - "CMAC-fence.txt") - self.mavproxy.send("fence load %s\n" % fence_filepath) - self.mavproxy.expect("Loaded 6 geo-fence") + self.load_fence("CMAC-fence.txt") want_radius = 100 # when ArduPlane is fixed, remove this fudge factor REALLY_BAD_FUDGE_FACTOR = 1.16 diff --git a/Tools/autotest/common.py b/Tools/autotest/common.py index c96632cf71..1cfb1fdb20 100644 --- a/Tools/autotest/common.py +++ b/Tools/autotest/common.py @@ -292,6 +292,29 @@ class AutoTest(ABC): self.reboot_sitl() self.fetch_parameters() + def count_lines_in_filepath(self, filepath): + return len([i for i in open(filepath)]) + + def load_fence_using_mavproxy(self, filename): + self.set_parameter("FENCE_TOTAL", 0) + filepath = os.path.join(self.mission_directory(), filename) + count = self.count_lines_in_filepath(filepath) + self.mavproxy.send('fence load %s\n' % filepath) + self.mavproxy.expect("Loaded %u geo-fence" % count) + tstart = self.get_sim_time_cached() + while True: + t2 = self.get_sim_time_cached() + if t2 - tstart > 10: + raise AutoTestTimeoutException("Failed to do load") + newcount = self.get_parameter("FENCE_TOTAL") + self.progress("fence total: %u want=%u" % (newcount, count)) + if count == newcount: + break + self.delay_sim_time(1) + + def load_fence(self, filename): + self.load_fence_using_mavproxy(filename) + def fetch_parameters(self): self.mavproxy.send("param fetch\n") self.mavproxy.expect("Received [0-9]+ parameters") diff --git a/Tools/autotest/quadplane.py b/Tools/autotest/quadplane.py index fec85551aa..4f1749cf48 100644 --- a/Tools/autotest/quadplane.py +++ b/Tools/autotest/quadplane.py @@ -113,7 +113,7 @@ class AutoTestQuadPlane(AutoTest): """Fly a mission from a file.""" self.progress("Flying mission %s" % filename) self.load_mission(filename) - self.mavproxy.send('fence load %s\n' % fence) + self.load_fence(fence) self.mavproxy.send('wp list\n') self.mavproxy.expect('Requesting [0-9]+ waypoints') self.wait_ready_to_arm()