Ejemplo n.º 1
0
class AppManagerTestCases(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()

        self.AM = AppManager()
        self.AM.init_app()
        self.AM.dataManager._store_permanent()

    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_register_device(self):
        config = {
            'device_id': 15,
            'device_class': 'name',
            'device_type': 'car',
            'address': 'home'
        }
        device = mock.Mock()
        self.AM.deviceManager.new_device = mock.Mock(return_value=device)
        self.AM.dataManager.save_device = mock.Mock()
        self.AM.dataManager.event_device_start = mock.Mock()

        # correct behaviour
        result = Response(True, None, None)
        self.assertEqual(self.AM.register_device(config), result)

        # exception in progress
        e = AttributeError("Device missing attribute")
        result = Response(False, None, e)
        self.AM.deviceManager.new_device = mock.Mock(side_effect=e)

        self.assertEqual(self.AM.register_device(config), result)

    def test_end_device(self):
        device_id = 23
        self.AM.deviceManager.remove_device = mock.Mock()
        self.AM.dataManager.update_experiment = mock.Mock()
        self.AM.dataManager.event_device_end = mock.Mock()

        # correct behaviour
        result = Response(True, None, None)
        self.assertEqual(self.AM.end_device(device_id), result)

        # exception in progress
        e = IdError('Connector with given ID: %s was not found' % device_id)
        self.AM.deviceManager.remove_device = mock.Mock(side_effect=KeyError)
        result = Response(False, None, e)
        self.assertEqual(self.AM.end_device(device_id), result)

    def test_command(self):
        config = {'device_id': 23, 'command_id': '3', 'arguments': '[30]'}
        result = Command(23, '3', [30], 'external')
        result.save_command_to_db = mock.Mock()

        device = mock.Mock()
        device.post_command = mock.Mock()
        self.AM.deviceManager.get_device = mock.Mock(return_value=device)

        # correct behaviour
        result = Response(True, None, None)
        command = mock.Mock()
        command.save_command_to_db = mock.Mock()
        self.AM._create_command = mock.Mock(return_value=device)
        self.assertEqual(self.AM.command(config), result)

        # exception in progress
        e = AttributeError("Command missing attribute")
        result = Response(False, None, e)
        self.AM.deviceManager.get_device = mock.Mock(side_effect=e)
        self.assertEqual(self.AM.command(config), result)

    def test_register_task(self):
        config = {
            'task_id': 23,
            'task_class': 'PSI',
            'task_type': 'PBR_measure_all'
        }
        task = mock.Mock()
        task.start = mock.Mock()
        self.AM.taskManager.create_task = mock.Mock(return_value=task)
        self.AM.dataManager.event_task_start = mock.Mock()

        # correct behaviour
        result = Response(True, None, None)
        self.assertEqual(self.AM.register_task(config), result)

        # exception in progress
        e = AttributeError("Task missing attribute")
        result = Response(False, None, e)
        self.AM.taskManager.create_task = mock.Mock(side_effect=e)
        self.assertEqual(self.AM.register_task(config), result)

    def test_end_task(self):
        task_id = 23
        self.AM.taskManager.remove_task = mock.Mock()
        self.AM.dataManager.event_task_end = mock.Mock()

        # correct behaviour
        result = Response(True, None, None)
        self.assertEqual(self.AM.end_task(task_id), result)

        # exception in progress
        e = IdError("Task with requested ID: 23 was not found")
        result = Response(False, None, e)
        self.AM.taskManager.remove_task = mock.Mock(side_effect=KeyError)
        self.assertEqual(self.AM.end_task(task_id), result)

    def test_ping(self):
        device_data = {'device_data': 'data01'}
        task_data = {'task_data': 'data02'}
        self.AM.deviceManager.ping = mock.Mock(return_value=device_data)
        self.AM.taskManager.ping = mock.Mock(return_value=task_data)

        # correct behaviour
        result = Response(True, {
            'devices': device_data,
            'tasks': task_data
        }, None)
        self.assertEqual(self.AM.ping(), result)

    def get_data(self):
        config = {
            'time': '20211010101010333',
            'device_id': 23,
            'type': 'values'
        }
        data = {'some random data': 123}
        self.AM.dataManager.get_data = mock.Mock(return_value=data)

        # correct behaviour
        result = Response(True, data, None)
        self.assertEqual(self.AM.get_data(config), result)

        # exception in progress
        e = AttributeError("Missing a key attribute.")
        result = Response(False, None, e)
        self.AM.dataManager.get_data = mock.Mock(side_effect=e)
        self.assertEqual(self.AM.get_data(config), result)

    def test_get_latest_data(self):
        config = {'device_id': 23, 'type': 'values'}
        data = {'some random data': 123}
        self.AM.dataManager.get_latest_data = mock.Mock(return_value=data)

        # correct behaviour
        result = Response(True, data, None)
        self.assertEqual(self.AM.get_latest_data(config), result)

        # exception in progress
        e = AttributeError("Missing a key attribute.")
        result = Response(False, None, e)
        self.AM.dataManager.get_latest_data = mock.Mock(side_effect=e)
        self.assertEqual(self.AM.get_latest_data(config), result)