def test_stale_addons_deletion(self, storage_mock):
        in_the_past = self.days_ago(16)
        to_delete = [
            Addon.objects.create(),
            Addon.objects.create(status=amo.STATUS_NULL),
            # Shouldn't be possible to have a public add-on with no versions,
            # but just in case it should still work.
            Addon.objects.create(status=amo.STATUS_APPROVED),
        ]
        for addon in to_delete:
            addon.update(created=in_the_past)
        to_keep = [
            Addon.objects.create(),
            Addon.objects.create(status=amo.STATUS_NULL),
            addon_factory(created=in_the_past, version_kw={'deleted': True}),
            addon_factory(created=in_the_past, status=amo.STATUS_NULL),
        ]

        gc()

        for addon in to_delete:
            assert not Addon.objects.filter(pk=addon.pk).exists()
        for addon in to_keep:
            assert Addon.objects.filter(pk=addon.pk).exists()

        # Make sure no email was sent.
        assert len(mail.outbox) == 0
Exemple #2
0
    def test_file_uploads_deletion_oserror(self, storage_mock):
        user = user_factory()
        fu_older = FileUpload.objects.create(
            path='/tmp/older',
            name='older',
            user=user,
            source=amo.UPLOAD_SOURCE_DEVHUB,
            ip_address='127.0.0.8',
        )
        fu_older.update(created=self.days_ago(300))
        fu_old = FileUpload.objects.create(
            path='/tmp/old',
            name='old',
            user=user,
            source=amo.UPLOAD_SOURCE_DEVHUB,
            ip_address='127.0.0.8',
        )
        fu_old.update(created=self.days_ago(16))

        storage_mock.delete.side_effect = OSError

        gc()

        # Even though delete() caused a OSError, we still deleted the
        # FileUploads rows, and tried to delete each corresponding path on
        # the filesystem.
        assert FileUpload.objects.count() == 0
        assert storage_mock.delete.call_count == 2
        assert storage_mock.delete.call_args_list[0][0][0] == fu_older.path
        assert storage_mock.delete.call_args_list[1][0][0] == fu_old.path
    def test_scanner_results_deletion(self, storage_mock):
        old_upload = FileUpload.objects.create(path='/tmp/old', name='old')
        old_upload.update(created=self.days_ago(16))

        new_upload = FileUpload.objects.create(path='/tmp/new', name='new')
        new_upload.update(created=self.days_ago(6))

        version = version_factory(addon=addon_factory())

        # upload = None, version = None --> DELETED
        ScannerResult.objects.create(scanner=YARA)
        # upload will become None because it is bound to an old upload, version
        # = None --> DELETED
        ScannerResult.objects.create(scanner=YARA, upload=old_upload)
        # upload is not None, version = None --> KEPT
        ScannerResult.objects.create(scanner=YARA, upload=new_upload)
        # upload = None, version is not None --> KEPT
        ScannerResult.objects.create(scanner=YARA, version=version)
        # upload is not None, version is not None --> KEPT
        ScannerResult.objects.create(scanner=YARA,
                                     upload=new_upload,
                                     version=version)

        assert ScannerResult.objects.count() == 5

        gc()

        assert ScannerResult.objects.count() == 3
        assert storage_mock.delete.call_count == 1
    def test_file_uploads_deletion_no_path_somehow(self, storage_mock):
        fu_old = FileUpload.objects.create(path='', name='foo')
        fu_old.update(created=self.days_ago(16))

        gc()

        assert FileUpload.objects.count() == 0  # FileUpload was deleted.
        assert storage_mock.delete.call_count == 0  # No path to delete.
    def test_file_uploads_deletion_no_path_somehow(self, storage_mock):
        fu_old = FileUpload.objects.create(path='', name='foo')
        fu_old.update(created=self.days_ago(181))

        gc()

        assert FileUpload.objects.count() == 0  # FileUpload was deleted.
        assert storage_mock.delete.call_count == 0  # No path to delete.
    def test_file_uploads_deletion(self, storage_mock):
        fu_new = FileUpload.objects.create(path='/tmp/new', name='new')
        fu_new.update(created=self.days_ago(6))
        fu_old = FileUpload.objects.create(path='/tmp/old', name='old')
        fu_old.update(created=self.days_ago(16))

        gc()

        assert FileUpload.objects.count() == 1
        assert storage_mock.delete.call_count == 1
        assert storage_mock.delete.call_args[0][0] == fu_old.path
    def test_file_uploads_deletion(self, storage_mock):
        fu_new = FileUpload.objects.create(path='/tmp/new', name='new')
        fu_new.update(created=self.days_ago(178))
        fu_old = FileUpload.objects.create(path='/tmp/old', name='old')
        fu_old.update(created=self.days_ago(181))

        gc()

        assert FileUpload.objects.count() == 1
        assert storage_mock.delete.call_count == 1
        assert storage_mock.delete.call_args[0][0] == fu_old.path
    def test_akismet_reports_deletion(self, storage_mock):
        rep_new = AkismetReport.objects.create(
            comment_modified=datetime.datetime.now(),
            content_modified=datetime.datetime.now(),
            created=self.days_ago(89))
        AkismetReport.objects.create(comment_modified=datetime.datetime.now(),
                                     content_modified=datetime.datetime.now(),
                                     created=self.days_ago(90))

        gc()
        assert AkismetReport.objects.count() == 1
        assert AkismetReport.objects.get() == rep_new
Exemple #9
0
    def test_delete_fake_emails(self, storage_mock):
        fe_old = FakeEmail.objects.create(
            message='This is the oldest fake email')
        fe_old.update(created=self.days_ago(360))
        fe_new = FakeEmail.objects.create(
            message='This is the newest fake email')
        fe_new.update(created=self.days_ago(45))

        gc()
        # FakeEmail which are older than 90 were deleted.
        assert FakeEmail.objects.count() == 1
        assert FakeEmail.objects.filter(pk=fe_new.pk).count() == 1
    def test_akismet_reports_deletion(self, storage_mock):
        rep_new = AkismetReport.objects.create(
            comment_modified=datetime.datetime.now(),
            content_modified=datetime.datetime.now(),
            created=self.days_ago(89))
        AkismetReport.objects.create(
            comment_modified=datetime.datetime.now(),
            content_modified=datetime.datetime.now(),
            created=self.days_ago(90))

        gc()
        assert AkismetReport.objects.count() == 1
        assert AkismetReport.objects.get() == rep_new
Exemple #11
0
    def test_file_uploads_deletion_no_path_somehow(self, storage_mock):
        user = user_factory()
        fu_old = FileUpload.objects.create(
            path='',
            name='foo',
            user=user,
            source=amo.UPLOAD_SOURCE_DEVHUB,
            ip_address='127.0.0.8',
        )
        fu_old.update(created=self.days_ago(16))

        gc()

        assert FileUpload.objects.count() == 0  # FileUpload was deleted.
        assert storage_mock.delete.call_count == 0  # No path to delete.
Exemple #12
0
    def test_file_uploads_deletion_oserror(self, storage_mock):
        fu_older = FileUpload.objects.create(path='/tmp/older', name='older')
        fu_older.update(created=self.days_ago(300))
        fu_old = FileUpload.objects.create(path='/tmp/old', name='old')
        fu_old.update(created=self.days_ago(8))

        storage_mock.delete.side_effect = OSError

        gc()

        # Even though delete() caused a OSError, we still deleted the
        # FileUploads rows, and tried to delete each corresponding path on
        # the filesystem.
        assert FileUpload.objects.count() == 0
        assert storage_mock.delete.call_count == 2
        assert storage_mock.delete.call_args_list[0][0][0] == fu_older.path
        assert storage_mock.delete.call_args_list[1][0][0] == fu_old.path
    def test_file_uploads_deletion_oserror(self, storage_mock):
        fu_older = FileUpload.objects.create(path='/tmp/older', name='older')
        fu_older.update(created=self.days_ago(300))
        fu_old = FileUpload.objects.create(path='/tmp/old', name='old')
        fu_old.update(created=self.days_ago(181))

        storage_mock.delete.side_effect = OSError

        gc()

        # Even though delete() caused a OSError, we still deleted the
        # FileUploads rows, and tried to delete each corresponding path on
        # the filesystem.
        assert FileUpload.objects.count() == 0
        assert storage_mock.delete.call_count == 2
        assert storage_mock.delete.call_args_list[0][0][0] == fu_older.path
        assert storage_mock.delete.call_args_list[1][0][0] == fu_old.path
Exemple #14
0
    def test_file_uploads_deletion(self, storage_mock):
        user = user_factory()
        fu_new = FileUpload.objects.create(
            path='/tmp/new',
            name='new',
            user=user,
            source=amo.UPLOAD_SOURCE_DEVHUB,
            ip_address='127.0.0.8',
        )
        fu_new.update(created=self.days_ago(6))
        fu_old = FileUpload.objects.create(
            path='/tmp/old',
            name='old',
            user=user,
            source=amo.UPLOAD_SOURCE_DEVHUB,
            ip_address='127.0.0.8',
        )
        fu_old.update(created=self.days_ago(16))

        gc()

        assert FileUpload.objects.count() == 1
        assert storage_mock.delete.call_count == 1
        assert storage_mock.delete.call_args[0][0] == fu_old.path