def test_normalize_none(self):
     """UNIT test: services.common.slots.normalize_slots (robustness)
     Nones and empties test.
     """
     self.assertCountEqual([], slots.normalize_slots(None),
                           '[] is the expected response to (None)')
     self.assertCountEqual([], slots.normalize_slots([]),
                           '[] is the expected response to ([])')
 def test_normalize_none(self):
     """UNIT test: services.common.slots.normalize_slots (robustness)
     Nones and empties test.
     """
     self.assertCountEqual(
         [], slots.normalize_slots(None),
         '[] is the expected response to (None)'
     )
     self.assertCountEqual(
         [], slots.normalize_slots([]),
         '[] is the expected response to ([])'
     )
Beispiel #3
0
    def get_availability_slots(groundstation, interval=None):
        """
        This method generates the availability slots for this set of rules.
        :param groundstation; Reference to the ground station
        :param interval: Time interval for slot generation
        """
        if interval is None:
            if satnet_settings.TESTING:
                interval = AvailabilityRuleManager.create_test_window()
            else:
                interval = simulation.OrbitalSimulator.get_simulation_window()

        add_rules, remove_rules = AvailabilityRuleManager\
            .get_applicable_rule_values(groundstation, interval=interval)

        logger.info(
            misc.list_2_string(
                AvailabilityRule.objects.all().values(),
                name='@get_availabilit_slots.rules'
            )
        )
        logger.info(
            '>>> @get_availabilit_slots.interval = ' + slots.string(interval)
        )

        # 0) We obtain the applicable slots from the database
        add_slots = []
        for r in add_rules:
            add_slots += AvailabilityRuleManager.generate_available_slots(
                r, interval=interval
            )

        remove_slots = []
        for r in remove_rules:
            remove_slots += AvailabilityRuleManager.generate_available_slots(
                r, interval=interval
            )

        # 1) First, raw slots must be sorted and normalized.
        add_slots = slots.normalize_slots(
            sorted(add_slots, key=lambda s: s[1])
        )
        remove_slots = slots.normalize_slots(
            sorted(remove_slots, key=lambda s: s[0])
        )

        # 2) Sorted and normalized slots can be merged to generated the final
        # availability slots.
        return slots.merge_slots(add_slots, remove_slots)
    def test_normalize_complex_2(self):
        """UNIT test: services.common.slots.normalize_slots (complex case #2)
        Case COMPLEX#2 for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE COMPLEX#2: continuous ABC')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(),
             misc.get_today_utc() + timedelta(hours=1))
        t = (misc.get_today_utc() + timedelta(hours=2),
             misc.get_today_utc() + timedelta(hours=4))
        u = (misc.get_today_utc() + timedelta(hours=3),
             misc.get_today_utc() + timedelta(hours=5))
        v = (misc.get_today_utc() + timedelta(hours=4),
             misc.get_today_utc() + timedelta(hours=4, minutes=10))

        expected_s = [s, (t[0], u[1])]
        actual_s = slots.normalize_slots([s, t, u, v])

        if self.__verbose_testing:
            misc.print_list([s, t, u, v], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(
            expected_s, actual_s, 'CASE COMPLEX#1: Wrong result!'
        )
    def test_normalize_complex_1(self):
        """UNIT test: services.common.slots.normalize_slots (complex case #1)
        Case COMPLEX#1 for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE COMPLEX#1: ABC')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(),
             misc.get_today_utc() + timedelta(hours=1))
        t = (misc.get_today_utc() + timedelta(hours=2),
             misc.get_today_utc() + timedelta(hours=4))

        u = (misc.get_today_utc() + timedelta(hours=5),
             misc.get_today_utc() + timedelta(hours=7))
        v = (misc.get_today_utc() + timedelta(hours=6),
             misc.get_today_utc() + timedelta(hours=9))

        w = (misc.get_today_utc() + timedelta(hours=10),
             misc.get_today_utc() + timedelta(hours=15))
        x = (misc.get_today_utc() + timedelta(hours=11),
             misc.get_today_utc() + timedelta(hours=14))

        expected_s = [s, t, (u[0], v[1]), w]
        actual_s = slots.normalize_slots([s, t, u, v, w, x])

        if self.__verbose_testing:
            misc.print_list([s, t, u, v, w, x], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(
            expected_s, actual_s, 'CASE COMPLEX#1: Wrong result!'
        )
    def test_normalize_complex_2(self):
        """UNIT test: services.common.slots.normalize_slots (complex case #2)
        Case COMPLEX#2 for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE COMPLEX#2: continuous ABC')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(), misc.get_today_utc() + timedelta(hours=1))
        t = (misc.get_today_utc() + timedelta(hours=2),
             misc.get_today_utc() + timedelta(hours=4))
        u = (misc.get_today_utc() + timedelta(hours=3),
             misc.get_today_utc() + timedelta(hours=5))
        v = (misc.get_today_utc() + timedelta(hours=4),
             misc.get_today_utc() + timedelta(hours=4, minutes=10))

        expected_s = [s, (t[0], u[1])]
        actual_s = slots.normalize_slots([s, t, u, v])

        if self.__verbose_testing:
            misc.print_list([s, t, u, v], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(expected_s, actual_s,
                              'CASE COMPLEX#1: Wrong result!')
    def test_normalize_complex_1(self):
        """UNIT test: services.common.slots.normalize_slots (complex case #1)
        Case COMPLEX#1 for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE COMPLEX#1: ABC')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(), misc.get_today_utc() + timedelta(hours=1))
        t = (misc.get_today_utc() + timedelta(hours=2),
             misc.get_today_utc() + timedelta(hours=4))

        u = (misc.get_today_utc() + timedelta(hours=5),
             misc.get_today_utc() + timedelta(hours=7))
        v = (misc.get_today_utc() + timedelta(hours=6),
             misc.get_today_utc() + timedelta(hours=9))

        w = (misc.get_today_utc() + timedelta(hours=10),
             misc.get_today_utc() + timedelta(hours=15))
        x = (misc.get_today_utc() + timedelta(hours=11),
             misc.get_today_utc() + timedelta(hours=14))

        expected_s = [s, t, (u[0], v[1]), w]
        actual_s = slots.normalize_slots([s, t, u, v, w, x])

        if self.__verbose_testing:
            misc.print_list([s, t, u, v, w, x], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(expected_s, actual_s,
                              'CASE COMPLEX#1: Wrong result!')
Beispiel #8
0
    def get_availability_slots(groundstation, interval=None):
        """
        This method generates the availability slots for this set of rules.
        :param groundstation; Reference to the ground station
        :param interval: Time interval for slot generation
        """
        if interval is None:
            if satnet_settings.TESTING:
                interval = AvailabilityRuleManager.create_test_window()
            else:
                interval = simulation.OrbitalSimulator.get_simulation_window()

        add_rules, remove_rules = AvailabilityRuleManager\
            .get_applicable_rule_values(groundstation, interval=interval)

        logger.info(
            misc.list_2_string(AvailabilityRule.objects.all().values(),
                               name='@get_availabilit_slots.rules'))
        logger.info('>>> @get_availabilit_slots.interval = ' +
                    slots.string(interval))

        # 0) We obtain the applicable slots from the database
        add_slots = []
        for r in add_rules:
            add_slots += AvailabilityRuleManager.generate_available_slots(
                r, interval=interval)

        remove_slots = []
        for r in remove_rules:
            remove_slots += AvailabilityRuleManager.generate_available_slots(
                r, interval=interval)

        # 1) First, raw slots must be sorted and normalized.
        add_slots = slots.normalize_slots(sorted(add_slots,
                                                 key=lambda s: s[1]))
        remove_slots = slots.normalize_slots(
            sorted(remove_slots, key=lambda s: s[0]))

        # 2) Sorted and normalized slots can be merged to generated the final
        # availability slots.
        return slots.merge_slots(add_slots, remove_slots)
    def test_normalize_c(self):
        """UNIT test: services.common.slots.normalize_slots (case C)
        Case C for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE C')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(), misc.get_today_utc() + timedelta(hours=5))
        t = (misc.get_today_utc() + timedelta(hours=1),
             misc.get_today_utc() + timedelta(hours=4))

        expected_s = [s]
        actual_s = slots.normalize_slots([s, t])

        if self.__verbose_testing:
            misc.print_list([s, t], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(expected_s, actual_s, 'CASE C: Wrong result!')
Beispiel #10
0
    def test_normalize_c(self):
        """UNIT test: services.common.slots.normalize_slots (case C)
        Case C for normalizing slots.
        """
        if self.__verbose_testing:
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
            print('TESTING NORMALIZE, CASE C')
            print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')

        s = (misc.get_today_utc(),
             misc.get_today_utc() + timedelta(hours=5))
        t = (misc.get_today_utc() + timedelta(hours=1),
             misc.get_today_utc() + timedelta(hours=4))

        expected_s = [s]
        actual_s = slots.normalize_slots([s, t])

        if self.__verbose_testing:
            misc.print_list([s, t], name='RAW slots')
            misc.print_list(actual_s, name='(A) slots')
            misc.print_list(expected_s, name='(EXPECTED) slots')

        self.assertCountEqual(expected_s, actual_s, 'CASE C: Wrong result!')