Esempio n. 1
0
    def testHousekeepingToJson(self):
        timestamp = datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)

        housekeeping = Housekeeping(**housekeepingData)
        db.session.add(housekeeping)
        db.session.commit()
        self.assertTrue(isinstance(housekeeping.to_json(), dict))
Esempio n. 2
0
    def test_get_housekeeping_with_dynamic_filters_2(self):
        timestamp = datetime.datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)
        housekeepingData['temp_1'] = 11
        housekeepingData['temp_2'] = 12
        housekeepingData['temp_3'] = 13
        housekeeping = Housekeeping(**housekeepingData)

        for i in range(1, 25):
            channel = fake_power_channel_as_dict(i)
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)

        db.session.add(housekeeping)
        db.session.commit()

        with self.client:
            response = self.client.get('/api/housekeepinglog?temp_1=gt-10&temp_2=gt-11&temp_3=gt-12')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 1)
            response = self.client.get('/api/housekeepinglog?temp_1=gt-10&temp_2=gt-11&temp_3=gt-14')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 0)
Esempio n. 3
0
    def test_get_housekeeping_with_dynamic_filters_4(self):

        for i in range(15):
            timestamp = datetime.datetime.fromtimestamp(1570749472 + i)
            housekeepingData = fakeHousekeepingAsDict(timestamp)
            housekeepingData['battery_voltage'] = 16 + i
            housekeeping = Housekeeping(**housekeepingData)

            for i in range(1, 25):
                channel = fake_power_channel_as_dict(i)
                p = PowerChannels(**channel)
                housekeeping.channels.append(p)

            db.session.add(housekeeping)

        db.session.commit()

        with self.client:
            response = self.client.get('/api/housekeepinglog?battery_voltage=gt-20&battery_voltage=lt-24')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 3)

            response = self.client.get('/api/housekeepinglog?battery_voltage=gt-20&battery_voltage=lt-24&battery_voltage=eq-17')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 0)

            response = self.client.get('/api/housekeepinglog?battery_voltage=gt-20&limit=1&battery_voltage=lt-24')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 1)
Esempio n. 4
0
    def test_get_housekeeping_with_dynamic_filters_3(self):
        timestamp = datetime.datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)
        housekeepingData['battery_voltage'] = 16
        housekeepingData['watchdog_1'] = 140
        housekeepingData['panel_5_current'] = 0.5
        housekeeping = Housekeeping(**housekeepingData)

        for i in range(1, 25):
            channel = fake_power_channel_as_dict(i)
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)

        db.session.add(housekeeping)
        db.session.commit()

        with self.client:
            response = self.client.get('/api/housekeepinglog?battery_voltage=eq-16&watchdog_1=lt-150&panel_5_current=gt-0.2')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 1)
            response = self.client.get('/api/housekeepinglog?battery_voltage=eq-15&watchdog_1=lt-150&panel_5_current=gt-0.2')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 0)
Esempio n. 5
0
    def test_get_all_housekeeping_limit_by(self):
        timestamp = datetime.datetime.fromtimestamp(1570749472)
        housekeepingData1 = fakeHousekeepingAsDict(timestamp)
        housekeepingData2 = fakeHousekeepingAsDict(timestamp)

        housekeeping1 = Housekeeping(**housekeepingData1)
        db.session.add(housekeeping1)
        db.session.commit()

        housekeeping2 = Housekeeping(**housekeepingData2)
        db.session.add(housekeeping2)
        db.session.commit()

        with self.client:
            response = self.client.get('/api/housekeepinglog?limit=1')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 1)
            self.assertIn('Passive', data['data']['logs'][0]['satellite_mode'])
            self.assertIn('success', data['status'])
Esempio n. 6
0
    def test_get_all_housekeeping_order_by_date(self):
        """Ensure that housekeeping is returned by date"""
        timestamp1 = datetime.datetime.fromtimestamp(1570749472)
        timestamp2 = datetime.datetime.fromtimestamp(1570749502)
        housekeepingData1 = fakeHousekeepingAsDict(timestamp1)
        housekeepingData2 = fakeHousekeepingAsDict(timestamp2)

        housekeeping1 = Housekeeping(**housekeepingData1)
        db.session.add(housekeeping1)
        db.session.commit()

        housekeeping2 = Housekeeping(**housekeepingData2)
        db.session.add(housekeeping2)
        db.session.commit()

        with self.client:
            response = self.client.get('/api/housekeepinglog')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['logs']), 2)
            self.assertEqual(data['data']['logs'][0]['id'], 1)
            self.assertEqual(data['data']['logs'][1]['id'], 2)
            self.assertIn('success', data['status'])
Esempio n. 7
0
 def test_get_housekeeping_with_valid_start_and_end_date_locally(self):
     for i in range(10):
         timestamp = datetime.datetime.fromtimestamp(1570749472 + i * 100)
         db.session.add(Housekeeping(**fakeHousekeepingAsDict(timestamp)))
     db.session.commit()
     start_ts = datetime.datetime.fromtimestamp(1570749472 + 5 + 200).isoformat()
     end_ts = datetime.datetime.fromtimestamp(1570749472 + 5 + 600).isoformat()
     local_args = MultiDict([
         ('last_beacon_time', f'ge-{start_ts}'),
         ('last_beacon_time', f'le-{end_ts}')
     ])
     endpoint = HousekeepingLogList()
     data, status_code = endpoint.get(local_args=local_args)
     self.assertEqual(status_code, 200)
     self.assertEqual(len(data['data']['logs']), 4)
Esempio n. 8
0
 def test_get_housekeeping_with_valid_end_date(self):
     for i in range(10):
         timestamp = datetime.datetime.fromtimestamp(1570749472 + i * 100)
         db.session.add(Housekeeping(**fakeHousekeepingAsDict(timestamp)))
     db.session.commit()
     with self.client:
         end_ts = datetime.datetime.fromtimestamp(1570749472 + 5 + 700).isoformat()
         url = '/api/housekeepinglog'
         query_string = MultiDict([
             ('last_beacon_time', f'le-{end_ts}')
         ])
         response = self.client.get(url, query_string=query_string)
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 200)
         self.assertEqual(len(data['data']['logs']), 8)
Esempio n. 9
0
    def test_get_housekeeping_with_dynamic_filters_5_invalid_attribute(self):
        timestamp = datetime.datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)
        housekeepingData['temp_1'] = 11
        housekeeping = Housekeeping(**housekeepingData)

        for i in range(1, 25):
            channel = fake_power_channel_as_dict(i)
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)
        db.session.add(housekeeping)
        db.session.commit()
        with self.client:
            response = self.client.get('/api/housekeepinglog?tempp_1=gt-12')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 400)
Esempio n. 10
0
    def test_get_housekeeping(self):
        """Test getting a housekeeping log"""
        timestamp = datetime.datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)

        housekeeping = Housekeeping(**housekeepingData)

        for i in range(1, 25):
            channel = fake_power_channel_as_dict(i)
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)

        db.session.add(housekeeping)
        db.session.commit()

        with self.client:
            response = self.client.get(f'/api/housekeepinglog/{housekeeping.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertIn('Passive', data['data']['satellite_mode'])
            self.assertEqual(1.7, data['data']['battery_voltage'])
            self.assertEqual(14, data['data']['no_MCU_resets'])
            self.assertIn(str(timestamp), data['data']['last_beacon_time'])
            self.assertEqual(6000, data['data']['watchdog_1'])
            self.assertEqual(11, data['data']['watchdog_2'])
            self.assertEqual(0, data['data']['watchdog_3'])
            self.assertEqual(1.1, data['data']['panel_1_current'])
            self.assertEqual(1.0, data['data']['panel_2_current'])
            self.assertEqual(1.2, data['data']['panel_3_current'])
            self.assertEqual(1.0, data['data']['panel_4_current'])
            self.assertEqual(1.0, data['data']['panel_5_current'])
            self.assertEqual(1.0, data['data']['panel_6_current'])
            self.assertEqual(11.0, data['data']['temp_1'])
            self.assertEqual(11.0, data['data']['temp_2'])
            self.assertEqual(14.0, data['data']['temp_3'])
            self.assertEqual(12.0, data['data']['temp_4'])
            self.assertEqual(11.0, data['data']['temp_5'])
            self.assertEqual(10.0, data['data']['temp_6'])
            for i in range(1, 25):
                self.assertEqual(data['data']['channels'][i-1]['id'], i)
                # \/ Should probably be housekeeping.id or smth instead of just 1
                self.assertEqual(data['data']['channels'][i-1]['hk_id'], 1)
                self.assertEqual(data['data']['channels'][i-1]['channel_no'], i)
                self.assertEqual(data['data']['channels'][i-1]['enabled'], True)
                self.assertEqual(data['data']['channels'][i-1]['current'], 0.0)
            self.assertIn('success', data['status'])
Esempio n. 11
0
 def test_get_housekeeping_with_invalid_start_and_valid_end_date(self):
     for i in range(10):
         timestamp = datetime.datetime.fromtimestamp(1570749472 + i * 100)
         db.session.add(Housekeeping(**fakeHousekeepingAsDict(timestamp)))
     db.session.commit()
     with self.client:
         start_ts = "ubinoanciwnaw"
         end_ts = datetime.datetime.fromtimestamp(1570749472 + 5 + 600).isoformat()
         url = '/api/housekeepinglog'
         filter_string = f'last_beacon_time=ge-{start_ts}&last_beacon_time=le-{end_ts}'
         query_string = MultiDict([
             ('last_beacon_time', f'ge-{start_ts}'),
             ('last_beacon_time', f'le-{end_ts}')
         ])
         response = self.client.get(url, query_string=query_string)
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 400)
Esempio n. 12
0
    def post(self, local_data=None):
        """Endpoint for creating a new Housekeeping log

        :param json_string local_data: This should be used in place of the POST body that would be used through HTTP, used for local calls.

        :returns: response_object, status_code
        :rtype: tuple (dict, int)
        """
        if not local_data:
            post_data = request.get_json()
        else:
            post_data = json.loads(local_data)

        try:
            validated_data = self.validator.load(post_data)
        except ValidationError as err:
            response_object = {
                'status': 'fail',
                'message': 'Invalid payload',
                'errors': err.messages
            }
            return response_object, 400

        channels = validated_data.pop('channels')
        housekeeping = Housekeeping(**validated_data)

        for channel in channels:
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)

        db.session.add(housekeeping)
        db.session.commit()

        response_object = {
            'status':
            'success',
            'message':
            f'Housekeeping Log with timestamp {housekeeping.last_beacon_time} was added!'
        }

        return response_object, 201
Esempio n. 13
0
    def testAddHousekeepingEntry(self):
        timestamp = datetime.fromtimestamp(1570749472)
        housekeepingData = fakeHousekeepingAsDict(timestamp)

        housekeeping = Housekeeping(**housekeepingData)

        for i in range(1, 25):
            channel = fake_power_channel_as_dict(i)
            p = PowerChannels(**channel)
            housekeeping.channels.append(p)

        db.session.add(housekeeping)
        db.session.commit()
        self.assertTrue(housekeeping.id)
        self.assertEqual(housekeeping.satellite_mode, 'Passive')
        self.assertEqual(housekeeping.battery_voltage, 1.7)
        self.assertEqual(housekeeping.current_in, 1.2)
        self.assertEqual(housekeeping.no_MCU_resets, 14)
        self.assertEqual(housekeeping.last_beacon_time, timestamp)
        self.assertEqual(housekeeping.watchdog_1, 6000)
        self.assertEqual(housekeeping.watchdog_2, 11)
        self.assertEqual(housekeeping.watchdog_3, 0)
        self.assertEqual(housekeeping.panel_1_current, 1.1)
        self.assertEqual(housekeeping.panel_2_current, 1.0)
        self.assertEqual(housekeeping.panel_3_current, 1.2)
        self.assertEqual(housekeeping.panel_4_current, 1.0)
        self.assertEqual(housekeeping.panel_5_current, 1.0)
        self.assertEqual(housekeeping.panel_6_current, 1.0)
        self.assertEqual(housekeeping.temp_1, 11.0)
        self.assertEqual(housekeeping.temp_2, 11.0)
        self.assertEqual(housekeeping.temp_3, 14.0)
        self.assertEqual(housekeeping.temp_4, 12.0)
        self.assertEqual(housekeeping.temp_5, 11.0)
        self.assertEqual(housekeeping.temp_6, 10.0)
        for i in range(1, 25):
            self.assertEqual(housekeeping.channels[i - 1].id, i)
            self.assertEqual(housekeeping.channels[i - 1].hk_id, 1)
            self.assertEqual(housekeeping.channels[i - 1].channel_no, i)
            self.assertEqual(housekeeping.channels[i - 1].enabled, True)
            self.assertEqual(housekeeping.channels[i - 1].current, 0.0)
Esempio n. 14
0
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.get(self.get_server_url())

        db.drop_all()
        db.create_all()
        db.session.commit()

        # seed the database for testing
        timestamp = datetime.fromtimestamp(1570749472)
        for i in range(20):
            housekeepingData = fakeHousekeepingAsDict(timestamp + timedelta(
                minutes=i * 15))
            housekeeping = Housekeeping(**housekeepingData)

            for i in range(1, 25):
                channel = fake_power_channel_as_dict(i)
                p = PowerChannels(**channel)
                housekeeping.channels.append(p)

            db.session.add(housekeeping)
        db.session.commit()

        commands = {
            'ping': (0, False),
            'get-hk': (0, False),
            'turn-on': (1, True),
            'turn-off': (1, True),
            'set-fs': (1, True),
            'upload-fs': (0, False)
        }

        for name, (num_args, is_danger) in commands.items():
            c = add_telecommand(command_name=name,
                                num_arguments=num_args,
                                is_dangerous=is_danger)

        command = Telecommands.query.filter_by(command_name='ping').first()
        flightschedule = add_flight_schedule(creation_date=timestamp,
                                             upload_date=timestamp,
                                             status=2,
                                             execution_time=timestamp)
        flightschedule_commands = add_command_to_flightschedule(
            timestamp=timestamp,
            flightschedule_id=flightschedule.id,
            command_id=command.id)

        add_user(username='******', password='******', is_admin=True)
        add_user(username='******', password='******', is_admin=False)
        add_user(username='******', password='******', is_admin=False)
        command = Telecommands.query.filter_by(command_name='turn-on').first()
        flightschedule_commands = add_command_to_flightschedule(
            timestamp=timestamp,
            flightschedule_id=flightschedule.id,
            command_id=command.id)

        flightschedulecommand_arg = add_arg_to_flightschedulecommand(
            index=0,
            argument='5',
            flightschedule_command_id=flightschedule_commands.id)

        message = add_message_to_communications(timestamp=timestamp,
                                                message='ping',
                                                sender='user',
                                                receiver='comm')

        now = datetime.utcnow()
        add_passover(timestamp=now - timedelta(seconds=10))
        for i in range(1, 20):
            p = add_passover(timestamp=now + timedelta(minutes=i * 5))

        db.session.commit()
Esempio n. 15
0
def seed_db():
    """Seed the database with a set of users and flight schedules
    """
    timestamp = datetime.fromtimestamp(1570749472)
    for x in range(20):
        # 20 days
        for y in range(3):
            # 3 entries per day
            housekeepingData = fakeHousekeepingAsDict(
                timestamp + timedelta(days=x, minutes=y * 15))
            if (x + y) % 10 == 0:
                housekeepingData['satellite_mode'] = 'Danger'

            housekeeping = Housekeeping(**housekeepingData)

            for i in range(1, 25):
                channel = fake_power_channel_as_dict(i)
                p = PowerChannels(**channel)
                housekeeping.channels.append(p)

            db.session.add(housekeeping)
    db.session.commit()

    commands = {
        'ping': (0, False),
        'get-hk': (0, False),
        'turn-on': (1, True),
        'turn-off': (1, True),
        'upload-fs': (0, False),
        'adjust-attitude': (1, True),
        'magnetometer': (0, False),
        'imaging': (0, False)
    }

    for name, (num_args, is_danger) in commands.items():
        c = add_telecommand(command_name=name,
                            num_arguments=num_args,
                            is_dangerous=is_danger)

    command = Telecommands.query.filter_by(command_name='ping').first()
    flightschedule = add_flight_schedule(creation_date=timestamp,
                                         upload_date=timestamp,
                                         status=2,
                                         execution_time=timestamp)
    flightschedule_commands = add_command_to_flightschedule(
        timestamp=timestamp,
        flightschedule_id=flightschedule.id,
        command_id=command.id)

    add_user(username='******', password='******', is_admin=True)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=True)

    command = Telecommands.query.filter_by(command_name='turn-on').first()
    flightschedule_commands = add_command_to_flightschedule(
        timestamp=timestamp,
        flightschedule_id=flightschedule.id,
        command_id=command.id)

    flightschedulecommand_arg = add_arg_to_flightschedulecommand(
        index=0,
        argument='5',
        flightschedule_command_id=flightschedule_commands.id)

    message = add_message_to_communications(timestamp=timestamp,
                                            message='ping',
                                            sender='user',
                                            receiver='comm')

    now = datetime.utcnow()
    add_passover(timestamp=now - timedelta(seconds=10))
    for i in range(1, 20):
        p = add_passover(timestamp=now + timedelta(minutes=i * 5))
Esempio n. 16
0
def demo_db():
    timestamp = datetime.fromtimestamp(1570749472)
    time2 = datetime.fromisoformat('2019-11-04 00:05:23.283+00:00')
    #time3 = datetime.fromisoformat('2019-11-05 00:08:43.203+00:00')
    #time4 = datetime.fromisoformat('2019-11-05 00:15:20.118+00:00')

    housekeepingData = fakeHousekeepingAsDict(timestamp)
    hkd2 = fakeHousekeepingAsDict(time2)
    #hkd3 = fakeHousekeepingAsDict(time3)
    #hkd4 = fakeHousekeepingAsDict(time4)

    housekeeping = Housekeeping(**housekeepingData)
    hk2 = Housekeeping(**hkd2)
    #hk3 = Housekeeping(**hkd3)
    #hk4 = Housekeeping(**hkd4)

    db.session.add(housekeeping)
    db.session.add(hk2)
    #db.session.add(hk3)
    #db.session.add(hk4)

    db.session.commit()

    add_user(username='******', password='******', is_admin=True)
    add_user(username='******', password='******', is_admin=True)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)
    add_user(username='******', password='******', is_admin=False)

    commands = {
        'ping': (0, False),
        'get-hk': (0, False),
        'turn-on': (1, True),
        'turn-off': (1, True),
        'set-fs': (1, True),
        'upload-fs': (0, False)
    }

    for name, (num_args, is_danger) in commands.items():
        c = add_telecommand(command_name=name,
                            num_arguments=num_args,
                            is_dangerous=is_danger)

    command = Telecommands.query.filter_by(command_name='ping').first()
    flightschedule = add_flight_schedule(creation_date=timestamp,
                                         upload_date=timestamp,
                                         status=2)
    flightschedule_commands = add_command_to_flightschedule(
        timestamp=timestamp,
        flightschedule_id=flightschedule.id,
        command_id=command.id)

    command = Telecommands.query.filter_by(command_name='turn-on').first()
    flightschedule_commands = add_command_to_flightschedule(
        timestamp=timestamp,
        flightschedule_id=flightschedule.id,
        command_id=command.id)

    flightschedulecommand_arg = add_arg_to_flightschedulecommand(
        index=0,
        argument='5',
        flightschedule_command_id=flightschedule_commands.id)

    message = add_message_to_communications(timestamp=timestamp,
                                            message='ping',
                                            sender='user',
                                            receiver='comm')

    command = Telecommands.query.filter_by(command_name='ping').first()
    flightschedule = add_flight_schedule(creation_date=time2,
                                         upload_date=time2,
                                         status=2)
    flightschedule_commands = add_command_to_flightschedule(
        timestamp=time2,
        flightschedule_id=flightschedule.id,
        command_id=command.id)

    flightschedulecommand_arg = add_arg_to_flightschedulecommand(
        index=1,
        argument='5',
        flightschedule_command_id=flightschedule_commands.id)

    message = add_message_to_communications(timestamp=time2,
                                            message='ping',
                                            sender='user',
                                            receiver='comm')

    now = datetime.utcnow()
    add_passover(timestamp=now - timedelta(seconds=10))
    for i in range(5):
        add_passover(timestamp=now + timedelta(minutes=i * 10))