Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install on boot refactor and unit test #52

Merged
merged 9 commits into from
Nov 20, 2023
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]
benjaminwp18 marked this conversation as resolved.
Show resolved Hide resolved

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 septate 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)