Exemplo n.º 1
0
 def test_tick(self):
     """
     Testing Sensor.tick
     """
     sensor = Sensor('127.0.0.1', '8000')
     sensor.measure = MagicMock(return_value=10)
     pump = Pump('127.0.0.1', '8000')
     pump.get_state = MagicMock(return_value='PUMP_OFF')
     pump.set_state = MagicMock(return_value='PUMP_OFF')
     decider = Decider(10, 0.1)
     decider.decide = MagicMock(return_value='PUMP_OFF')
     controller = Controller(sensor, pump, decider)
     self.assertTrue(controller.tick())
Exemplo n.º 2
0
    def test_integration_set_pump_state_fail(self):
        decider = Decider(target_height=3000, margin=500)
        pump = Pump('127.0.0.1', 8000)
        sensor = Sensor('127.0.0.1', 8000)

        pump.set_state = MagicMock(return_value=False)
        pump.get_state = MagicMock(return_value=Pump.PUMP_OFF)

        sensor.measure = MagicMock(return_value=3500)
        controller = Controller(sensor, pump, decider)

        result = controller.tick()
        self.assertEqual(result, False)
Exemplo n.º 3
0
    def test_decider_current_action_pumpoff_height_in_target_and_margin_range(
            self):
        decider = Decider(target_height=5000, margin=1000)
        pump = Pump('127.0.0.1', 8000)
        sensor = Sensor('127.0.0.1', 8000)
        controller = Controller(sensor, pump, decider)

        #equal to target + margin case
        result = decider.decide(current_height=4000,
                                current_action=Pump.PUMP_OFF,
                                actions=controller.actions)
        self.assertEqual(result, Pump.PUMP_OFF)

        #equal to target + margin case
        result = decider.decide(current_height=4000,
                                current_action=Pump.PUMP_OFF,
                                actions=controller.actions)
        self.assertEqual(result, Pump.PUMP_OFF)

        #in the range of (target - margin to target + margin)
        result = decider.decide(current_height=5800,
                                current_action=Pump.PUMP_OFF,
                                actions=controller.actions)
        self.assertEqual(result, Pump.PUMP_OFF)

        #in the range of (target - margin to target + margin)
        result = decider.decide(current_height=4200,
                                current_action=Pump.PUMP_OFF,
                                actions=controller.actions)
        self.assertEqual(result, Pump.PUMP_OFF)
Exemplo n.º 4
0
    def setUp(self):
        """Set up controller for test"""

        self.sensor = Sensor('127.0.0.1', 8000)
        self.pump = Pump('127.0.0.1', 8000)
        self.decider = Decider(10, 0.05)
        self.controller = Controller(self.sensor, self.pump, self.decider)
 def setUp(self):
     """
     This method does a setup for integration testing raterregulation
     """
     self.pump = Pump('127.0.0.1', 1000)
     self.sensor = Sensor('127.0.0.2', 2000)
     self.decider = Decider(100, 0.05)
     self.controller = Controller(self.sensor, self.pump, self.decider)
Exemplo n.º 6
0
class ControllerTests(unittest.TestCase):
    """
    Unit tests for the Controller class
    """
    def setUp(self):
        """
        Set up method for test_controller
        """
        self.sensor = Sensor('127.0.0.1', 8000)
        self.sensor.measure = MagicMock(return_value=100)
        self.pump = Pump('127.0.0.1', 8000)
        self.pump.set_state = MagicMock(return_value=True)
        self.pump.get_state = MagicMock(return_value=self.pump.PUMP_OFF)
        self.decider = Decider(100, .10)
        self.decider.decide = MagicMock(return_value=self.pump.PUMP_OFF)
        self.controller = Controller(self.sensor, self.pump, self.decider)
        self.controller.tick()

        self.actions = {
            'PUMP_IN': self.pump.PUMP_IN,
            'PUMP_OUT': self.pump.PUMP_OUT,
            'PUMP_OFF': self.pump.PUMP_OFF
        }

    def test_controller(self):
        """
        Test controller and tick:
        1: Check sensor.measure for accuracy
        2: test pump.get_state for correct return
        3: decider.decide for correct 'decision'
        4: Test pump.set_state for expected mocked output
        5: Test sensor.measure return val is correct type
        6: Round-a-bout way of testing the try/except
        block of controller.tick() -- if pump.set_state
        returns False, it is because of a TypeError,
        checking that if it is False, it raises TypeError
        """
        self.assertEqual(100, self.sensor.measure())  # 1
        self.assertEqual(0, self.pump.get_state())  # 2
        self.assertEqual(0, self.decider.decide(100, 0, self.actions))  # 3
        self.assertEqual(True,
                         self.pump.set_state(self.actions['PUMP_OFF']))  # 4
        self.assertTrue(self.sensor.measure() == float(100))  # 5
        if self.pump.set_state(False):  # 6
            self.assertRaises(TypeError)
Exemplo n.º 7
0
 def test_decider_current_action_pump_off_height_less_than_target(self):
     decider = Decider(target_height=10000, margin=1000)
     pump = Pump('127.0.0.1', 8000)
     sensor = Sensor('127.0.0.1', 8000)
     controller = Controller(sensor, pump, decider)
     result = decider.decide(current_height=5000,
                             current_action=Pump.PUMP_OFF,
                             actions=controller.actions)
     self.assertEqual(result, Pump.PUMP_IN)
Exemplo n.º 8
0
    def setUp(self):
        """
        This method does a setup for unit testing Controller
        """
        self.pump = Pump('127.0.0.1', 1000)
        self.sensor = Sensor('127.0.0.2', 2000)
        self.decider = Decider(100, 0.05)

        self.controller = Controller(self.sensor, self.pump, self.decider)
Exemplo n.º 9
0
    def setUp(self):
        """
        Set up method for test_controller
        """
        self.sensor = Sensor('127.0.0.1', 8000)
        self.sensor.measure = MagicMock(return_value=100)
        self.pump = Pump('127.0.0.1', 8000)
        self.pump.set_state = MagicMock(return_value=True)
        self.pump.get_state = MagicMock(return_value=self.pump.PUMP_OFF)
        self.decider = Decider(100, .10)
        self.decider.decide = MagicMock(return_value=self.pump.PUMP_OFF)
        self.controller = Controller(self.sensor, self.pump, self.decider)
        self.controller.tick()

        self.actions = {
            'PUMP_IN': self.pump.PUMP_IN,
            'PUMP_OUT': self.pump.PUMP_OUT,
            'PUMP_OFF': self.pump.PUMP_OFF
        }
Exemplo n.º 10
0
    def setUp(self):
        """
        setup
        :return:
        """
        self.pump = Pump('127.0.0.1', 8000)
        self.sensor = Sensor('127.1.1.3', 9000)
        self.decider = Decider(100, 0.05)

        self.controller = Controller(self.sensor, self.pump, self.decider)
Exemplo n.º 11
0
    def test_decider_current_action_pumpoff_height_greater_target_and_margin(
            self):
        decider = Decider(target_height=1000, margin=200)
        pump = Pump('127.0.0.1', 8000)
        sensor = Sensor('127.0.0.1', 8000)
        controller = Controller(sensor, pump, decider)

        result = decider.decide(current_height=1250,
                                current_action=Pump.PUMP_OFF,
                                actions=controller.actions)
        self.assertEqual(result, Pump.PUMP_OUT)
Exemplo n.º 12
0
 def setUp(self):
     """
     Setup for test_tick
     """
     self.sensor = Sensor('127.0.0.1', '8000')
     self.pump = Pump('127.0.0.1', '8001')
     self.decider = Decider(30, 0.05)
     self.sensor.measure = MagicMock(return_value=True)
     self.pump.set_state = MagicMock(return_value=True)
     self.pump.get_state = MagicMock(return_value="PUMP_IN")
     self.controller = Controller(self.sensor, self.pump, self.decider)
Exemplo n.º 13
0
class SensorTests(unittest.TestCase):
    """
        This method does a setup for unit testing Sensor
    """
    def setUp(self):
        """
        This method does a setup for unit testing Sensor
        """
        self.sensor = Sensor('127.0.0.2', 2000)

    def test_set_state(self):
        """
        This method tests the set_state for Sensor
        """
        self.sensor.measure = MagicMock(return_value=True)
        self.assertEqual(self.sensor.measure(), True)

    def test_get_state(self):
        """
        This method tests the get_state for Sensor
        """
        self.sensor.get_state = MagicMock(return_value=1)
        self.assertEqual(self.sensor.get_state(), 1)
Exemplo n.º 14
0
def main_loop(conf_file, log_path, controll_method):
    Led.change(False)
    pilot = Pilot(controll_method)
    print("Ready")
    cmd = Pilot.CMD_NOP
    while True:
        last_cmd = cmd
        cmd = pilot.get_cmd()
        if cmd == Pilot.CMD_NOP:
            pass
        elif last_cmd == Pilot.CMD_NOP and cmd == Pilot.CMD_THROTTLE_ZERO:
            # start
            try:
                params = yaml.load(open(conf_file, "rt"))
            except:
                print("ERROR can not read conf file")
                raise
            if log_path is not None:
                # over write log_path if --log option is specifed
                params["log"]["path"] = log_path
            sensor = Sensor()
            dt = sensor.sampling_interval()
            controller = Controller(dt=dt, **params["controller"])
            print("ctrl start")
            pilot.initialize()
            alog = AttitudeLog(**params["log"])
            Led.change(True)
            with Thrust(params["body_const"]) as thrust:
                control_loop(pilot, sensor, controller, thrust, alog)
            print("ctrl end")
            Led.change(False)
            alog.add_info('param', params)
            alog.save()
            print("seve end")
        time.sleep(0.5)
        Led.toggle()
Exemplo n.º 15
0
class SensorTests(unittest.TestCase):
    """
    Unit tests for the Sensor class
    """
    def setUp(self):
        """
        setup for PumpTest class
        :return:
        """
        self.sensor = Sensor('127.1.1.3', 9000)

    def test_set_state(self):
        """
        test setting the state of pump
        :return:
        """
        self.sensor.measure = MagicMock(return_value=True)
        self.assertEqual(self.sensor.measure(), True)
 def test_all(self):
     """
     Run full test on all components of waterregulation
     """
     pump_address = Pump('127.0.0.1', '2048')
     sensor_address = Sensor('127.0.0.1', '2048')
     decider_margins = Decider(100, .10)
     controller_all = Controller(sensor_address, pump_address,
                                 decider_margins)
     controller_all.pump.set_state = MagicMock(return_value=True)
     for action in controller_all.actions.values():
         for water_level in range(25, 150, 100):
             # water level (mocked)
             controller_all.sensor.measure = \
                 MagicMock(return_value=water_level)
             # pump state (mocked)
             controller_all.pump.get_state = MagicMock(
                 return_value=decider_margins.decide(
                     water_level, action, controller_all.actions))
             controller_all.tick()
Exemplo n.º 17
0
 def setUp(self):
     """
     setup for PumpTest class
     :return:
     """
     self.sensor = Sensor('127.1.1.3', 9000)
 def setUp(self):
     self.sensor = Sensor('127.0.0.1', '168')
     self.pump = Pump('127.0.0.1', '168')
     self.decider = Decider(10, 0.5)
     self.controller = Controller(self.sensor, self.pump, self.decider)
Exemplo n.º 19
0
 def setUp(self):
     """
     This method does a setup for unit testing Sensor
     """
     self.sensor = Sensor('127.0.0.2', 2000)
Exemplo n.º 20
0
def get_args() -> Dict:
    ap = ArgumentParser()

    ap.add_argument("-f",
                    "--" + CONFIG_FILE_PATH_OPT,
                    required=True,
                    help="Path to configuration file to be used by node.")
    ap.add_argument("-c",
                    "--" + CONFIG_HEADER_OPT,
                    required=True,
                    help="Which section of config file to use.")

    return vars(ap.parse_args())


if __name__ == "__main__":
    logger.info("Starting up.")
    args = get_args()
    config = Configuration(args[CONFIG_FILE_PATH_OPT], args[CONFIG_HEADER_OPT])

    logger.info("Configuration parsed: " + str(config))

    logger.info("Starting sensor.")
    try:
        sensor = Sensor(config)
        sensor.start()
    except KeyboardInterrupt as e:
        logger.info("Keyboard interrupt. Stopping sensor")
        sensor.stop()