Beispiel #1
0
 def setUp(self):
     self.package = self.create_source_package(
         name='dummy-package', version='1.0.0', repository='default')
     self.debian_policy = self.create_source_package(
         name='debian-policy', version='3.9.4.0')
     self.debian_policy.standards_version = '3.9.4.0'
     self.debian_policy.save()
     self.task = UpdateStandardsVersionWarnings()
    def setUp(self):
        self.package_name = SourcePackageName.objects.create(name='dummy-package')
        self.package = SourcePackage.objects.create(
            source_package_name=self.package_name, version='1.0.0')

        self.default_policy_version = '3.9.4.0'
        self.debian_policy_name = SourcePackageName.objects.create(
            name='debian-policy')
        self.debian_policy = SourcePackage.objects.create(
            source_package_name=self.debian_policy_name,
            version=self.default_policy_version)

        self.job_state = mock.create_autospec(JobState)
        self.job_state.events_for_task.return_value = []
        self.job = mock.create_autospec(Job)
        self.job.job_state = self.job_state
        self.task = UpdateStandardsVersionWarnings()
        self.task.job = self.job
Beispiel #3
0
class StandardsVersionActionItemTests(TestCase):
    """
    Tests for the
    :class:`distro_tracker.stdver_warnings.tracker_tasks.UpdateStandardsVersionWarnings`
    task.
    """
    def setUp(self):
        self.package_name = \
            SourcePackageName.objects.create(name='dummy-package')
        self.package = SourcePackage.objects.create(
            source_package_name=self.package_name, version='1.0.0')

        self.default_policy_version = '3.9.4.0'
        self.debian_policy_name = SourcePackageName.objects.create(
            name='debian-policy')
        self.debian_policy = SourcePackage.objects.create(
            source_package_name=self.debian_policy_name,
            version=self.default_policy_version)

        self.job_state = mock.create_autospec(JobState)
        self.job_state.events_for_task.return_value = []
        self.job = mock.create_autospec(Job)
        self.job.job_state = self.job_state
        self.task = UpdateStandardsVersionWarnings()
        self.task.job = self.job

    def add_mock_event(self, name, arguments):
        """
        Helper method adding mock events which the news generation task will
        see when it runs.
        """
        self.job_state.events_for_task.return_value.append(
            Event(name=name, arguments=arguments)
        )

    def run_task(self, initial_task=False):
        """
        Initiates the task run.

        :param initial_task: An optional flag which if ``True`` means that the
            task should be ran as if it were directly passed to the
            :func:`distro_tracker.core.tasks.run_task` function.
        :type initial_task: Boolean
        """
        if initial_task:
            self.job_state.events_for_task.return_value = []
            self.job_state.processed_tasks = []
        else:
            # If it is not the initial task, add a dummy task to make it look
            # like that.
            self.job_state.processed_tasks = ['sometask']

        self.task.execute()

    def set_debian_policy_version(self, policy_version):
        """
        Set the version of the debian-policy package to the given version.
        """
        self.debian_policy.version = policy_version
        self.debian_policy.standards_version = policy_version.rsplit('.', 1)[0]
        self.debian_policy.save()

    def get_action_type(self):
        """
        Returns the :class:`distro_tracker.core.models.ActionItemType` for
        Standards-Version warnings.
        """
        return ActionItemType.objects.get_or_create(
            type_name=UpdateStandardsVersionWarnings.ACTION_ITEM_TYPE)[0]

    def add_mock_new_source_version_event(self, package):
        """
        Helper method adding mock 'new-source-package-version' events where
        the newly created source package should be the one given in the
        ``package`` parameter.
        """
        self.add_mock_event('new-source-package-version', {
            'pk': package.pk,
        })

    def test_action_item_outdated_policy(self):
        """
        Tests that an action item is created when the package's standards
        version is outdated.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        # Set the std-ver below the policy version
        self.package.standards_version = '3.9.3'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())
        self.add_mock_new_source_version_event(self.package)

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        # Correct type?
        item = ActionItem.objects.all()[0]
        self.assertEqual(
            item.item_type.type_name,
            self.get_action_type().type_name)
        # Contains the correct package standards version in extra data
        self.assertEqual(
            self.package.standards_version,
            item.extra_data['standards_version'])
        self.assertFalse(item.extra_data['severely_outdated'])
        # This is a wishlist severity issue
        self.assertEqual('wishlist', item.get_severity_display())

    def test_action_item_severely_outdated_policy(self):
        """
        Tests that an action item is created when the package's standards
        version is severely outdated (major version number differs from the
        major version number of debian-policy).
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        # Set the std-ver below the policy version
        self.package.standards_version = '2.9.3'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())
        self.add_mock_new_source_version_event(self.package)

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        # Contains the correct package standards version in extra data
        item = ActionItem.objects.all()[0]
        self.assertTrue(item.extra_data['severely_outdated'])
        # This is a high severity issue
        self.assertEqual('high', item.get_severity_display())

    def test_no_action_item_policy_up_to_date(self):
        """
        Tests that no action item is created when the package's
        Standards-Version is up to date.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        # Set the std-ver to be equal to the policy version.
        self.package.standards_version = '3.9.4'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())
        self.add_mock_new_source_version_event(self.package)

        self.run_task()

        # Still no action items.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_policy_outdated_full_version(self):
        """
        Tests that an action item is created when the package's standards
        version is outdated and set by giving all 4 version numbers.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        # Set the std-ver below the policy version
        self.package.standards_version = '3.9.3.1'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())
        self.add_mock_new_source_version_event(self.package)

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        item = ActionItem.objects.all()[0]
        self.assertEqual(
            item.item_type.type_name,
            self.get_action_type().type_name)

    def test_no_action_item_policy_up_to_date_full_version(self):
        """
        Tests that no action item is created when the package's
        Standards-Version is up to date and set by giving all 4 version
        numbers.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        # Set the std-ver to be equal to the policy version.
        self.package.standards_version = policy_version
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())
        self.add_mock_new_source_version_event(self.package)

        self.run_task()

        # Still no action items.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_removed(self):
        """
        Tests that an existing action item is removed when there is a new
        package version with a non-outdated Std-Ver.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        action_type = self.get_action_type()
        ActionItem.objects.create(
            package=self.package_name,
            item_type=action_type,
            short_description="Desc")
        self.package.standards_version = '3.9.3'
        self.package.save()
        # Create a new package with a higher Std-Ver
        new_package = SourcePackage.objects.create(
            source_package_name=self.package_name,
            version='4.0.0',
            standards_version='3.9.4.0')
        self.add_mock_new_source_version_event(new_package)

        self.run_task()

        # The action item has been removed.
        self.assertEqual(0, self.package_name.action_items.count())

    def test_action_item_updated(self):
        """
        Tests that an existing action item is updated when there is a new
        package version which still has an outdated Std-Ver.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        action_type = self.get_action_type()
        ActionItem.objects.create(
            package=self.package_name,
            item_type=action_type,
            short_description="Desc")
        self.package.standards_version = '3.9.2'
        self.package.save()
        # Create a new package with a higher Std-Ver
        new_package = SourcePackage.objects.create(
            source_package_name=self.package_name,
            version='4.0.0',
            standards_version='3.9.3.0')
        self.add_mock_new_source_version_event(new_package)

        self.run_task()

        # Still only one action item
        self.assertEqual(1, self.package_name.action_items.count())
        # The standards version in the extra data has been updated
        item = self.package_name.action_items.all()[0]
        self.assertEqual('3.9.3', item.extra_data['standards_version'])

    def test_task_directly_called(self):
        """
        Tests that when the task is directly called, the Standards-Version of
        all packages is checked.
        """
        policy_version = '3.9.4.0'
        self.set_debian_policy_version(policy_version)
        self.package.standards_version = '3.9.3'
        self.package.save()
        # Create another package with an outdated standards version
        outdated_package_name = \
            SourcePackageName.objects.create(name='outdated')
        SourcePackage.objects.create(
            source_package_name=outdated_package_name,
            version='4.0.0',
            standards_version='3.9.1.0')
        # Create a package with an up to date standards version
        up_to_date_package_name = \
            SourcePackageName.objects.create(name='uptodate')
        SourcePackage.objects.create(
            source_package_name=up_to_date_package_name,
            version='4.0.0',
            standards_version='3.9.4')
        # No events received by the task in this case.
        # Sanity check: No action items in the beginning
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task(initial_task=True)

        # An action item is created for the two packages with out dated std-ver.
        self.assertEqual(2, ActionItem.objects.count())
        self.assertEqual(1, outdated_package_name.action_items.count())
        self.assertEqual(1, self.package_name.action_items.count())
Beispiel #4
0
class StandardsVersionActionItemTests(TestCase):
    """
    Tests for the
    :class:`distro_tracker.stdver_warnings.tracker_tasks.UpdateStandardsVersionWarnings`
    task.
    """
    def setUp(self):
        self.package = self.create_source_package(
            name='dummy-package', version='1.0.0', repository='default')
        self.debian_policy = self.create_source_package(
            name='debian-policy', version='3.9.4.0')
        self.debian_policy.standards_version = '3.9.4.0'
        self.debian_policy.save()
        self.task = UpdateStandardsVersionWarnings()

    def create_action_item(self):
        action_type = self.get_action_type()
        return ActionItem.objects.create(
            package=self.package.source_package_name,
            item_type=action_type,
            short_description="Desc")

    def run_task(self):
        """
        Initiates the task run.
        """
        self.task.execute()

    def set_debian_policy_version(self, policy_version):
        """
        Set the version of the debian-policy package to the given version.
        """
        self.debian_policy.version = policy_version
        self.debian_policy.standards_version = policy_version.rsplit('.', 1)[0]
        self.debian_policy.save()

    def get_action_type(self):
        """
        Returns the :class:`distro_tracker.core.models.ActionItemType` for
        Standards-Version warnings.
        """
        return ActionItemType.objects.get_or_create(
            type_name=UpdateStandardsVersionWarnings.ACTION_ITEM_TYPE)[0]

    def test_action_item_outdated_policy(self):
        """
        Tests that an action item is created when the package's standards
        version is outdated.
        """
        # Set the std-ver below the policy version
        self.package.standards_version = '3.9.3'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        # Correct type?
        item = ActionItem.objects.all()[0]
        self.assertEqual(
            item.item_type.type_name,
            self.get_action_type().type_name)
        # Contains the correct package standards version in extra data
        self.assertEqual(
            self.package.standards_version,
            item.extra_data['standards_version'])
        self.assertFalse(item.extra_data['severely_outdated'])
        # This is a wishlist severity issue
        self.assertEqual('wishlist', item.get_severity_display())

    def test_action_item_severely_outdated_policy(self):
        """
        Tests that an action item is created when the package's standards
        version is severely outdated (major version number differs from the
        major version number of debian-policy).
        """
        # Set the std-ver below the policy version
        self.package.standards_version = '2.9.3'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        # Contains the correct package standards version in extra data
        item = ActionItem.objects.all()[0]
        self.assertTrue(item.extra_data['severely_outdated'])
        # This is a high severity issue
        self.assertEqual('high', item.get_severity_display())

    def test_action_item_two_entries_same_package_with_outdated_policy(self):
        """
        Tests that the task copes with the presence of the same package
        twice.
        """
        # Package with a severe issue (version 1.0.0)
        self.package.standards_version = '2.9.3'
        self.package.save()
        # Same package with higher version but non-severe issue
        self.package2 = self.create_source_package(
            name='dummy-package', version='0.5', repository='default')
        self.package2.standards_version = '3.9.3'
        self.package2.save()

        self.run_task()

        self.assertEqual(1, ActionItem.objects.count())
        item = ActionItem.objects.all()[0]

        # The data matches the biggest version
        self.assertTrue(item.extra_data['severely_outdated'])

    def test_no_action_item_policy_up_to_date(self):
        """
        Tests that no action item is created when the package's
        Standards-Version is up to date.
        """
        # Set the std-ver to be equal to the policy version.
        self.package.standards_version = '3.9.4'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task()

        # Still no action items.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_policy_outdated_full_version(self):
        """
        Tests that an action item is created when the package's standards
        version is outdated and set by giving all 4 version numbers.
        """
        # Set the std-ver below the policy version
        self.package.standards_version = '3.9.3.1'
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task()

        # Action item created.
        self.assertEqual(1, ActionItem.objects.count())
        item = ActionItem.objects.all()[0]
        self.assertEqual(
            item.item_type.type_name,
            self.get_action_type().type_name)

    def test_no_action_item_policy_up_to_date_full_version(self):
        """
        Tests that no action item is created when the package's
        Standards-Version is up to date and set by giving all 4 version
        numbers.
        """
        # Set the std-ver to be equal to the policy version.
        self.package.standards_version = self.debian_policy.version
        self.package.save()
        # Sanity check: no action item
        self.assertEqual(0, ActionItem.objects.count())

        self.run_task()

        # Still no action items.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_removed_with_update(self):
        """
        Tests that an existing action item is removed when there is a new
        package version with a non-outdated Std-Ver.
        """
        self.create_action_item()
        self.package.standards_version = '3.9.3'
        self.package.repository_entries.all().delete()
        self.package.save()

        # Create a new package with a higher Std-Ver
        new_package = self.create_source_package(
            name=self.package.source_package_name.name,
            version='4.0.0', repository='default'
        )
        new_package.standards_version = '3.9.4.0'
        new_package.save()

        self.run_task()

        # The action item has been removed.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_removed_with_removal_from_default_repository(self):
        """
        Tests that an existing action item is removed when the
        package is gone from the default repository.
        """
        self.create_action_item()
        self.package.standards_version = '3.9.3'
        self.package.save()
        self.remove_from_repository(self.package, 'default')
        self.add_to_repository(self.package, 'foobar')

        self.run_task()

        # The action item has been removed.
        self.assertEqual(0, ActionItem.objects.count())

    def test_action_item_updated(self):
        """
        Tests that an existing action item is updated when there is a new
        package version which still has an outdated Std-Ver.
        """
        action_type = self.get_action_type()
        ActionItem.objects.create(
            package=self.package.source_package_name,
            item_type=action_type,
            short_description="Desc")
        self.package.repository_entries.all().delete()
        self.package.standards_version = '3.9.2'
        self.package.save()

        # Create a new package with a higher Std-Ver
        new_package = self.create_source_package(
            name=self.package.source_package_name.name,
            version='4.0.0', repository='default'
        )
        new_package.standards_version = '3.9.3.0'
        new_package.save()

        self.run_task()

        # Still only one action item
        self.assertEqual(1,
                         self.package.source_package_name.action_items.count())
        # The standards version in the extra data has been updated
        item = self.package.source_package_name.action_items.all()[0]
        self.assertEqual('3.9.3.0', item.extra_data['standards_version'])

    def test_task_run_with_force_update(self):
        """
        Tests that when the task is run with force_update, the Standards-Version
        of all packages is checked.
        """
        self.package.standards_version = '3.9.3'
        self.package.save()
        # Create another package with an outdated standards version
        outdated = self.create_source_package(name='outdated',
                                              repository='default')
        outdated.standards_version = '3.9.1.0'
        outdated.save()
        # Create a package with an up to date standards version
        uptodate = self.create_source_package(name='uptodate',
                                              repository='default')
        uptodate.standards_version = '3.9.4'
        uptodate.save()

        # Mark as already processed
        for item in self.task.items_to_process():
            self.task.item_mark_processed(item)

        # Sanity check: No action items in the beginning
        self.assertEqual(0, ActionItem.objects.count())

        self.task.initialize(force_update=True)
        self.run_task()

        # An action item is created for the two packages with out dated std-ver.
        self.assertEqual(2, ActionItem.objects.count())
        self.assertEqual(1, outdated.source_package_name.action_items.count())
        self.assertEqual(
            1, self.package.source_package_name.action_items.count())

    def test_action_item_created_when_new_policy_version_is_released(self):
        # Initial run doesn't create any action item
        self.package.standards_version = '3.9.4'
        self.package.save()
        self.run_task()
        self.assertEqual(0, ActionItem.objects.count())

        self.set_debian_policy_version('3.9.5.0')
        self.run_task()

        self.assertEqual(
            1, self.package.source_package_name.action_items.count())