Ejemplo n.º 1
0
    def setUp(self):
        """Set up some data that is reused in many tests"""

        self.manager = None

        self.dialect = 'ardupilotmega'
        self.version = 2.0
        self.mod = getpymavlinkpackage(self.dialect, self.version)
        self.mavUAS = self.mod.MAVLink(self,
                                       srcSystem=4,
                                       srcComponent=0,
                                       use_native=False)
        self.VehA = Vehicle(self.loop, "VehA", 255, 0, 4, 0, self.dialect,
                            self.version)
        self.VehA.onPacketTxAttach(self.vehSendFunc)
        self.VehA.hasInitial = True

        # The PaGS settings dir (just in source dir)
        self.settingsdir = os.path.join(os.getcwd(), ".PaGS")
        if not os.path.exists(self.settingsdir):
            os.makedirs(self.settingsdir)

        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir,
                                                   False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)
        self.manager.onPktTxAttach(self.txcallback)

        self.manager.addModule("internalPrinterModule")
Ejemplo n.º 2
0
    def test_command(self):
        """Test the loading and execution of user commands
        in modules"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)
        self.manager.onVehListAttach(self.getVehListCallbackMany)
        self.manager.onVehGetAttach(self.getVehicleCallbackMany)

        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")

        # load module
        self.manager.addModule("templateModule")

        # execute a command
        self.manager.onModuleCommandCallback(
            "VehB", "template do_stuff 1 \"the rest\"")

        # and invalid command
        self.manager.onModuleCommandCallback("VehB", "template do_nothing")

        # Command to not-initialised vehicle
        self.manager.onModuleCommandCallback(
            "VehC", "template do_stuff 1 \"the rest\"")

        # and assert
        assert self.manager.multiModules['templateModule'].printedout[
            "VehB"] == "Command not found: template do_nothing"
        assert self.manager.multiModules['templateModule'].calledStuff["VehB"] == "1,the rest"

        # VehC was not initialised, so the command should not be passed
        assert self.manager.multiModules['templateModule'].printedout[
            "VehC"] == "Cannot send command to vehicle - no packets received on link"
        assert "VehC" not in self.manager.multiModules['templateModule'].calledStuff
Ejemplo n.º 3
0
    def setUp(self):
        """Set up some data that is reused in many tests"""

        self.manager = None

        self.dialect = 'ardupilotmega'
        self.version = 2.0
        self.mod = getpymavlinkpackage(self.dialect, self.version)
        self.mavUAS = self.mod.MAVLink(self,
                                       srcSystem=4,
                                       srcComponent=0,
                                       use_native=False)
        self.VehA = Vehicle(self.loop, "VehA", 255, 0, 4, 0, self.dialect,
                            self.version)
        self.VehA.onPacketTxAttach(self.vehSendFunc)

        self.txPackets = {}
        self.txVehPackets = {}

        self.manager = moduleManager.moduleManager(self.loop, self.dialect,
                                                   self.version, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)
        self.manager.onPktTxAttach(self.txcallback)

        self.manager.addModule("PaGS.modules.internalPrinterModule")
Ejemplo n.º 4
0
    def __init__(self, dialect, mav, source_system, source_component, nogui,
                 multi, loop, initialModules):
        """
        Start up PaGS
        """

        self.source_system = source_system
        self.source_component = source_component
        self.dialect = dialect
        self.mav = mav

        # The PaGS settings dir
        self.settingsdir = os.path.join(str(Path.home()), ".PaGS")
        if not os.path.exists(self.settingsdir):
            os.makedirs(self.settingsdir)

        # logging.basicConfig(level=logging.DEBUG)
        self.loop = loop

        # Start the connection maxtrix
        self.connmtrx = ConnectionManager(self.loop, dialect, mav,
                                          source_system, source_component)

        # Dict of vehicles
        self.allvehicles = VehicleManager(self.loop)

        # Module manager
        self.modules = moduleManager.moduleManager(self.loop, self.settingsdir,
                                                   not nogui)

        # event links from connmaxtrix -> vehicle manager
        self.connmtrx.onPacketAttach(self.allvehicles.onPacketRecieved)

        # event links from vehicle manager -> connmatrix
        self.allvehicles.onPacketBufTxAttach(self.connmtrx.outgoingPacket)
        asyncio.ensure_future(
            self.allvehicles.onLinkAddAttach(self.connmtrx.addVehicleLink))
        asyncio.ensure_future(
            self.allvehicles.onLinkRemoveAttach(self.connmtrx.removeLink))

        # event links from module manager -> vehicle manager
        self.modules.onPktTxAttach(self.allvehicles.send_message)
        self.modules.onVehListAttach(self.allvehicles.get_vehiclelist)
        self.modules.onVehGetAttach(self.allvehicles.get_vehicle)

        # event links vehicle manager -> module manager
        self.allvehicles.onAddVehicleAttach(self.modules.addVehicle)
        self.allvehicles.onRemoveVehicleAttach(self.modules.removeVehicle)
        self.allvehicles.onPacketRxAttach(self.modules.incomingPacket)

        # Need to load initial modules
        for m in initialModules:
            self.modules.addModule(m)

        # redirect stdout to the terminal printer, if loaded
        # Thus print() can be used properly
        if self.modules.multiModules.get('modules.terminalModule'):
            sys.stdout = RedirPrint(
                self.modules.multiModules.get('modules.terminalModule').print)
Ejemplo n.º 5
0
    def test_guiStart(self):
        """Simple test of the GUI startup"""

        # need to reset for handling gui
        self.manager = moduleManager.moduleManager(self.loop, self.dialect,
                                                   self.version, True)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)
        self.manager.onPktTxAttach(self.txcallback)

        self.manager.addModule("PaGS.modules.internalPrinterModule")

        self.manager.addModule("PaGS.modules.paramModule")
Ejemplo n.º 6
0
    def test_cmd_do_stuff(self):
        """Test the do_stuff() command"""
        self.manager = moduleManager.moduleManager(self.loop, self.dialect,
                                                   self.version, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)

        self.manager.addModule("PaGS.modules.templateModule")

        # execute a command
        self.manager.onModuleCommandCallback(
            "VehA", "template do_stuff 1 \"the rest\"")

        # and assert
        assert self.manager.multiModules[
            'PaGS.modules.templateModule'].calledStuff["VehA"] == "1,the rest"
Ejemplo n.º 7
0
    async def test_startup(self):
        """ Test that we can cleanly startup and shutdown
        """
        # Start the connection maxtrix
        self.connmtrx = ConnectionManager(
            self.loop, self.dialect, self.version, 0, 0)

        # Dict of vehicles
        self.allvehicles = VehicleManager(self.loop)

        # Module manager
        self.allModules = moduleManager(
            self.loop, self.dialect, self.version, False)

        # and link them all together
        await self.doEventLinkages()
Ejemplo n.º 8
0
    async def test_singleConnection(self):
        """ Test that we can get a packet with a single
        vehicle with single connection
        """
        # Start the connection maxtrix
        self.connmtrx = ConnectionManager(
            self.loop, self.dialect, self.version, 0, 0)

        # Dict of vehicles
        self.allvehicles = VehicleManager(self.loop)

        # Module manager
        self.allModules = moduleManager(
            self.loop, self.dialect, self.version, False)

        # and link them all together
        await self.doEventLinkages()

        # add a link
        await self.allvehicles.add_vehicle("VehA", 255, 0, 4, 0,
                                           self.dialect, self.version, 'tcpserver:127.0.0.1:15000')

        # Start a remote connection (TCP)
        self.remoteClient = TCPConnection(rxcallback=self.newpacketcallback,
                                          dialect=self.dialect, mavversion=self.version,
                                          srcsystem=0, srccomp=0,
                                          server=False, name=self.cname)

        await asyncio.sleep(0.3)

        await self.loop.create_connection(lambda: self.remoteClient, self.ip, self.port)

        # wait for 0.02 sec
        await asyncio.sleep(0.02)

        # send a heartbeat packet
        pkt = self.mod.MAVLink_heartbeat_message(
            5, 4, 0, 0, 0, int(self.version))
        self.remoteClient.send_data(pkt.pack(self.mav, force_mavlink1=False))

        await asyncio.sleep(0.02)

        self.remoteClient.close()

        # assert the vehicle recieved the packet
        assert len(self.allvehicles.get_vehicle("VehA").latestPacketDict) == 1
        assert self.allvehicles.get_vehicle("VehA").latestPacketDict[0] == pkt
Ejemplo n.º 9
0
    async def test_addremoveModule(self):
        """Test adding and removal of module"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)

        self.manager.addModule("templateModule")

        assert len(self.manager.multiModules) == 1
        assert "template" in self.manager.commands
        assert len(self.manager.commands["template"]) == 2

        await self.manager.removeModule("templateModule")

        assert len(self.manager.multiModules) == 0
        assert "template" not in self.manager.commands
        assert "templateModule" not in self.manager.printers
Ejemplo n.º 10
0
    def test_printer(self):
        """Test the printer function (output)
        for the modules"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)
        self.manager.onVehListAttach(self.getVehListCallbackMany)

        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")

        # load module
        self.manager.addModule("templateModule")

        # print some text
        self.manager.printVeh("VehB", "test text")
        self.manager.printVeh("VehC", "test text2")

        assert self.manager.multiModules['templateModule'].printedout["VehB"] == "test text"
        assert self.manager.multiModules['templateModule'].printedout["VehC"] == "test text2"
Ejemplo n.º 11
0
    def test_addRemoveVehicleAfterModule(self):
        """Test adding and removing vehicles prior
        to module loading"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)
        self.manager.onVehListAttach(self.getVehListCallbackMany)
        # self.manager.onVehGetAttach(self.getVehicleCallback)

        # simulate some vehicles being added
        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")
        # and being removed
        self.manager.removeVehicle("VehB")

        # load module
        self.manager.addModule("templateModule")

        assert self.manager.multiModules['templateModule'].theVeh == [
            "VehA", "VehC"]
Ejemplo n.º 12
0
    def test_addremoveModule(self):
        """Test adding and removal of module"""
        self.manager = moduleManager.moduleManager(
            self.loop, self.dialect, self.version, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)

        self.manager.addModule("PaGS.modules.templateModule")

        assert len(self.manager.multiModules) == 1
        assert "template" in self.manager.commands
        assert len(self.manager.commands["template"]) == 2

        self.manager.removeModule("PaGS.modules.templateModule")

        assert len(self.manager.multiModules) == 0
        assert "template" not in self.manager.commands
        assert "PaGS.modules.templateModule" not in self.manager.printers
Ejemplo n.º 13
0
    def test_addRemoveVehicle(self):
        """Test adding and removing a vehicle"""
        self.manager = moduleManager.moduleManager(
            self.loop, self.dialect, self.version, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)

        self.manager.addModule("PaGS.modules.templateModule")

        # simulate some vehicles being added
        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")

        assert self.manager.multiModules['PaGS.modules.templateModule'].theVeh == [
            "VehA", "VehB", "VehC"]

        # and being removed
        self.manager.removeVehicle("VehB")

        assert self.manager.multiModules['PaGS.modules.templateModule'].theVeh == [
            "VehA", "VehC"]
Ejemplo n.º 14
0
    def test_inoutPacket(self):
        """Test packets going in and out"""
        self.manager = moduleManager.moduleManager(
            self.loop, self.dialect, self.version, False)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)

        self.manager.addModule("PaGS.modules.templateModule")

        # And create the callback for packet tx/rx between vehicle and modules
        self.manager.onPktTxAttach(self.txcallback)

        # send an incoming packet. The template module will send it back out
        # again
        pkt = self.mod.MAVLink_heartbeat_message(
            5, 4, 0, 0, 0, int(self.version))
        self.manager.incomingPacket("VehA", pkt, "link1")

        assert self.manager.multiModules["PaGS.modules.templateModule"].pkts == 1
        print(self.txPackets)
        assert self.txPackets["VehA"] == 0  # the packet type
Ejemplo n.º 15
0
    async def test_guiStart(self):
        """Simple test of the GUI startup"""

        # need to reset for handling gui
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir,
                                                   True)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)
        self.manager.onPktTxAttach(self.txcallback)

        self.manager.addModule("internalPrinterModule")

        self.manager.addModule("PaGS.modules.statusModule")

        # Wait for param gui to load
        await asyncio.sleep(0.2)

        # Update the GUI with some status
        pkt = self.mod.MAVLink_sys_status_message(52485167, 35684399, 52461871,
                                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
        self.manager.multiModules["PaGS.modules.statusModule"].incomingPacket(
            "VehA", pkt)
Ejemplo n.º 16
0
    def test_moreCommand(self):
        """Test the stability of the command handler with all
        sorts of mangled user input"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)
        self.manager.onVehListAttach(self.getVehListCallbackMany)
        self.manager.onVehGetAttach(self.getVehicleCallbackMany)

        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")

        # load module
        self.manager.addModule("templateModule")

        # test the mangled inputs
        self.manager.onModuleCommandCallback("VehB", "")
        self.manager.onModuleCommandCallback("VehB", "template")
        self.manager.onModuleCommandCallback("VehB", "template do_stuff")
        self.manager.onModuleCommandCallback(
            "VehB", "template do_stuff 1 3 4 6 7")
        self.manager.onModuleCommandCallback("VehB", "template do_stuff \"4")
        self.manager.onModuleCommandCallback("VehB", "template:")
        self.manager.onModuleCommandCallback("VehB", "template do_stuff:")
        self.manager.onModuleCommandCallback("VehB", "template crash")
Ejemplo n.º 17
0
    def test_command(self):
        """Test the loading and execution of user commands
        in modules"""
        self.manager = moduleManager.moduleManager(
            self.loop, self.dialect, self.version, False)
        self.manager.onVehListAttach(self.getVehListCallbackMany)

        self.manager.addVehicle("VehB")
        self.manager.addVehicle("VehC")

        # load module
        self.manager.addModule("PaGS.modules.templateModule")

        # execute a command
        self.manager.onModuleCommandCallback(
            "VehB", "template do_stuff 1 \"the rest\"")

        # and invalid command
        self.manager.onModuleCommandCallback("VehB", "template do_nothing")

        # and assert
        assert self.manager.multiModules['PaGS.modules.templateModule'].printedout[
            "VehB"] == "Command not found: template do_nothing"
        assert self.manager.multiModules['PaGS.modules.templateModule'].calledStuff["VehB"] == "1,the rest"
Ejemplo n.º 18
0
    async def test_guiStart(self):
        """Simple test of the GUI startup"""

        # need to reset for handling gui
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir,
                                                   True)
        self.manager.onVehListAttach(self.getVehListCallback)
        self.manager.onVehGetAttach(self.getVehicleCallback)
        self.manager.onPktTxAttach(self.txcallback)

        self.manager.addModule("internalPrinterModule")

        self.manager.addModule("PaGS.modules.paramModule")

        # now all params downloaded
        self.VehA.paramstatus = True
        self.VehA.params = {"RC1_MIN": 1000, "RC2_MAX": 2000}
        self.VehA.params_type = {
            "RC1_MIN": self.mod.MAV_PARAM_TYPE_UINT16,
            "RC2_MAX": self.mod.MAV_PARAM_TYPE_UINT16
        }

        # Wait for param gui to load
        await asyncio.sleep(0.3)
Ejemplo n.º 19
0
    def test_manager(self):
        """Check initialisation"""
        self.manager = moduleManager.moduleManager(
            self.loop, self.dialect, self.version, False)

        assert len(self.manager.multiModules) == 0
Ejemplo n.º 20
0
    def test_manager(self):
        """Check initialisation"""
        self.manager = moduleManager.moduleManager(self.loop, self.settingsdir, False)

        assert len(self.manager.multiModules) == 0
Ejemplo n.º 21
0
    def __init__(self, dialect, mav, source_system, source_component, nogui,
                 multi, source, loop, initialModules):
        """
        Start up PaGS
        """

        # logging.basicConfig(level=logging.DEBUG)
        self.loop = loop

        # Start the connection maxtrix
        self.connmtrx = ConnectionManager(self.loop, dialect, mav,
                                          source_system, source_component)

        # Dict of vehicles
        self.allvehicles = VehicleManager(self.loop)

        # Module manager
        self.modules = moduleManager.moduleManager(self.loop, dialect, mav,
                                                   not nogui)

        # event links from connmaxtrix -> vehicle manager
        self.connmtrx.onPacketAttach(self.allvehicles.onPacketRecieved)

        # event links from vehicle manager -> connmatrix
        self.allvehicles.onPacketBufTxAttach(self.connmtrx.outgoingPacket)
        asyncio.ensure_future(
            self.allvehicles.onLinkAddAttach(self.connmtrx.addVehicleLink))
        asyncio.ensure_future(
            self.allvehicles.onLinkRemoveAttach(self.connmtrx.removeLink))

        # event links from module manager -> vehicle manager
        self.modules.onPktTxAttach(self.allvehicles.send_message)
        self.modules.onVehListAttach(self.allvehicles.get_vehiclelist)
        self.modules.onVehGetAttach(self.allvehicles.get_vehicle)

        # event links vehicle manager -> module manager
        self.allvehicles.onAddVehicleAttach(self.modules.addVehicle)
        self.allvehicles.onRemoveVehicleAttach(self.modules.removeVehicle)
        self.allvehicles.onPacketRxAttach(self.modules.incomingPacket)

        # Need to load initial modules
        for m in initialModules:
            self.modules.addModule(m)

        # redirect stdout to the terminal printer, if loaded
        # Thus print() can be used properly
        if self.modules.multiModules.get('modules.terminalModule'):
            sys.stdout = RedirPrint(
                self.modules.multiModules.get('modules.terminalModule').print)

        # Single or multi-vehicle?
        if multi != "":
            # TODO: figure out multivehicle parsing file
            pass
        else:
            # Create vehicles and links
            # Each sysID is assumed to be a different vehicle
            # Multiple links with the same sysid will create a multilink vehicle
            for connection in source:
                Vehname = "Veh_" + str(connection.split(':')[3])
                cn = connection.split(':')[0] + ":" + connection.split(
                    ':')[1] + ":" + connection.split(':')[2]
                asyncio.ensure_future(
                    self.allvehicles.add_vehicle(Vehname, source_system,
                                                 source_component,
                                                 connection.split(':')[3],
                                                 connection.split(':')[4],
                                                 dialect, mav, cn))