Skip to content

Commit

Permalink
Merge pull request #52 from cwruRobotics/install-on-boot-refactor-and…
Browse files Browse the repository at this point in the history
…-test

Install on boot refactor and unit test
  • Loading branch information
InvincibleRMC authored Nov 20, 2023
2 parents 20dac21 + 5a2b82a commit 3e3b6e6
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 13 deletions.
30 changes: 20 additions & 10 deletions src/pi/pi_main/pi_main/install_on_boot.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import os
import subprocess
import sys
import subprocess
import pathlib

from ament_index_python.packages import get_package_share_directory
from robot_upstart import Job
from robot_upstart.job import Job


def main() -> None:
Expand All @@ -20,16 +21,25 @@ def main() -> None:

os.symlink(launch_src, launch_dst)

udev_script = os.path.join(pi_main_share, 'udev_copy', 'udev_copy.py')
file_location = pathlib.Path(__file__).parent.resolve()
udev_script = os.path.join(file_location, 'udev_copy.py')

major_num = sys.version_info[0]
minor_num = sys.version_info[1]
udev_script = os.path.join(os.path.dirname(os.path.abspath(pi_main_share)), '../', 'lib',
f'python{major_num}.{minor_num}',
'site-packages', 'pi_main', 'udev_copy.py')
subprocess.call(['/usr/bin/sudo', 'python3', udev_script, pi_main_share])
cmd = ['/usr/bin/sudo', '/usr/bin/python3', udev_script, pi_main_share]

cwrubotix_job = Job(name='cwrubotix_pi', rmw='rmw_cyclonedds_cpp')
try:
p = subprocess.run(cmd, capture_output=True, check=True)
# Logs Error
except subprocess.CalledProcessError as e:
print(e.stderr)
sys.exit(1)

# Success Message
print(p.stdout.decode())

install_path = os.path.join(pi_main_share, "..", "..")
workspace_path = os.path.join(install_path, "setup.bash")
cwrubotix_job = Job(name='cwrubotix_pi', rmw='rmw_cyclonedds_cpp',
workspace_setup=workspace_path)
cwrubotix_job.symlink = True
cwrubotix_job.uninstall()
cwrubotix_job.add(package='pi_main', filename='launch/pi.launch.py')
Expand Down
1 change: 1 addition & 0 deletions src/pi/pi_main/pi_main/udev_copy.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
udev_dst_dir = os.path.join('/etc', 'udev', 'rules.d')

shutil.copytree(udev_src_dir, udev_dst_dir, dirs_exist_ok=True)
print("Copying udev rules.")
4 changes: 1 addition & 3 deletions src/pi/pi_main/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
(os.path.join('share', package_name, 'launch'),
glob('launch/*launch.[pxy][yma]*')),
(os.path.join('share', package_name, 'udev_rules'),
glob('udev_rules/*')),
(os.path.join('share', package_name, 'udev_copy'),
glob('pi_main/udev_copy.py'))
glob('udev_rules/*'))
],
install_requires=['setuptools', 'flake8==4.0.1', 'mypy >= 1.7'],
zip_safe=True,
Expand Down
25 changes: 25 additions & 0 deletions src/pi/pi_main/test/test_install_on_boot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import os

from pi_main.install_on_boot import main

ROS_DISTRO = os.getenv("ROS_DISTRO")

EXPECTED_SYSTEM_FILES = [f"/etc/ros/{ROS_DISTRO}/cwrubotix_pi.d/.installed_files",
f"/etc/ros/{ROS_DISTRO}/cwrubotix_pi.d/pi.launch.py",
"/usr/sbin/cwrubotix_pi-start",
"/usr/sbin/cwrubotix_pi-stop"]


def test_install_on_boot() -> None:
"""Test that file copying and systemd are made."""
main()

# Test for rules files being copied correctly
# Could be split into a separate test but main() does both
actual_rules_files = set(os.listdir(os.path.join("/etc", "udev", "rules.d")))
expected_rules_files = set(["i2c.rules", "camera.rules", "pixhawk.rules"])
assert expected_rules_files.issubset(actual_rules_files)

# Checks for files created by robot_upstart
for file in EXPECTED_SYSTEM_FILES:
assert os.path.isfile(file)

0 comments on commit 3e3b6e6

Please sign in to comment.