~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/scripts/tests/test_copypackage.py

Merge stable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
450
450
        copy_checker = CopyChecker(self.archive, include_binaries=False)
451
451
        self.assertIs(
452
452
            None,
453
 
            copy_checker.checkCopy(self.source, self.series, self.pocket))
 
453
            copy_checker.checkCopy(
 
454
                self.source, self.series, self.pocket,
 
455
                check_permissions=False))
454
456
        checked_copies = list(copy_checker.getCheckedCopies())
455
457
        self.assertEquals(1, len(checked_copies))
456
458
        [checked_copy] = checked_copies
476
478
        copy_checker = CopyChecker(self.archive, include_binaries=True)
477
479
        self.assertIs(
478
480
            None,
479
 
            copy_checker.checkCopy(self.source, self.series, self.pocket))
 
481
            copy_checker.checkCopy(
 
482
                self.source, self.series, self.pocket,
 
483
                check_permissions=False))
480
484
        checked_copies = list(copy_checker.getCheckedCopies())
481
485
        self.assertEquals(1, len(checked_copies))
482
486
        [checked_copy] = checked_copies
485
489
            BuildSetStatus.FULLYBUILT_PENDING)
486
490
        self.assertEquals(delayed, checked_copy.delayed)
487
491
 
488
 
    def assertCannotCopySourceOnly(self, msg):
 
492
    def assertCannotCopySourceOnly(self, msg, person=None,
 
493
                                   check_permissions=False):
489
494
        """`CopyChecker.checkCopy()` for source-only copy raises CannotCopy.
490
495
 
491
496
        No `CheckedCopy` is stored.
493
498
        copy_checker = CopyChecker(self.archive, include_binaries=False)
494
499
        self.assertRaisesWithContent(
495
500
            CannotCopy, msg,
496
 
            copy_checker.checkCopy, self.source, self.series, self.pocket)
 
501
            copy_checker.checkCopy, self.source, self.series, self.pocket,
 
502
            person, check_permissions)
497
503
        checked_copies = list(copy_checker.getCheckedCopies())
498
504
        self.assertEquals(0, len(checked_copies))
499
505
 
505
511
        copy_checker = CopyChecker(self.archive, include_binaries=True)
506
512
        self.assertRaisesWithContent(
507
513
            CannotCopy, msg,
508
 
            copy_checker.checkCopy, self.source, self.series, self.pocket)
 
514
            copy_checker.checkCopy, self.source, self.series, self.pocket,
 
515
            None, False)
509
516
        checked_copies = list(copy_checker.getCheckedCopies())
510
517
        self.assertEquals(0, len(checked_copies))
511
518
 
514
521
        self.assertCannotCopyBinaries(
515
522
            'source has no binaries to be copied')
516
523
 
 
524
    def test_cannot_copy_check_perm_no_person(self):
 
525
        # If check_permissions=True and person=None is passed to
 
526
        # checkCopy, raise an error (cannot check permissions for a
 
527
        # 'None' person).
 
528
        self.assertCannotCopySourceOnly(
 
529
            'Cannot check copy permissions (no requester).',
 
530
            person=None, check_permissions=True)
 
531
 
517
532
    def test_cannot_copy_binaries_from_FTBFS(self):
518
533
        [build] = self.source.createMissingBuilds()
519
534
        build.status = BuildStatus.FAILEDTOBUILD
699
714
        # At this point copy is allowed with or without binaries.
700
715
        copy_checker = CopyChecker(archive, include_binaries=False)
701
716
        self.assertIs(
702
 
            None, copy_checker.checkCopy(source, series, pocket))
 
717
            None,
 
718
            copy_checker.checkCopy(
 
719
                source, series, pocket, check_permissions=False))
703
720
        copy_checker = CopyChecker(archive, include_binaries=True)
704
721
        self.assertIs(
705
 
            None, copy_checker.checkCopy(source, series, pocket))
 
722
            None,
 
723
            copy_checker.checkCopy(
 
724
                source, series, pocket, check_permissions=False))
706
725
 
707
726
        # Set the expiration date of one of the testing binary files.
708
727
        utc = pytz.timezone('UTC')
713
732
        # Now source-only copies are allowed.
714
733
        copy_checker = CopyChecker(archive, include_binaries=False)
715
734
        self.assertIs(
716
 
            None, copy_checker.checkCopy(source, series, pocket))
 
735
            None, copy_checker.checkCopy(
 
736
                source, series, pocket, check_permissions=False))
717
737
 
718
738
        # Copies with binaries are denied.
719
739
        copy_checker = CopyChecker(archive, include_binaries=True)
720
740
        self.assertRaisesWithContent(
721
741
            CannotCopy,
722
742
            'source has expired binaries',
723
 
            copy_checker.checkCopy, source, series, pocket)
 
743
            copy_checker.checkCopy, source, series, pocket, None, False)
724
744
 
725
745
    def test_checkCopy_cannot_copy_expired_sources(self):
726
746
        # checkCopy() raises CannotCopy if the copy requested includes
745
765
        self.assertRaisesWithContent(
746
766
            CannotCopy,
747
767
            'source contains expired files',
748
 
            copy_checker.checkCopy, source, series, pocket)
 
768
            copy_checker.checkCopy, source, series, pocket, None, False)
749
769
 
750
770
    def test_checkCopy_allows_copies_from_other_distributions(self):
751
771
        # It is possible to copy packages between distributions,
768
788
        # Copy of sources to series in another distribution can be
769
789
        # performed.
770
790
        copy_checker = CopyChecker(archive, include_binaries=False)
771
 
        copy_checker.checkCopy(source, series, pocket)
 
791
        copy_checker.checkCopy(
 
792
            source, series, pocket, check_permissions=False)
772
793
 
773
794
    def test_checkCopy_forbids_copies_to_unknown_distroseries(self):
774
795
        # We currently deny copies to series that are not for the Archive
794
815
        self.assertRaisesWithContent(
795
816
            CannotCopy,
796
817
            'No such distro series sid in distribution debian.',
797
 
            copy_checker.checkCopy, source, sid, pocket)
 
818
            copy_checker.checkCopy, source, sid, pocket, None, False)
798
819
 
799
820
    def test_checkCopy_respects_sourceformatselection(self):
800
821
        # A source copy should be denied if the source's dsc_format is
820
841
        self.assertRaisesWithContent(
821
842
            CannotCopy,
822
843
            "Source format '3.0 (quilt)' not supported by target series "
823
 
            "warty.", copy_checker.checkCopy, source, series, pocket)
 
844
            "warty.", copy_checker.checkCopy, source, series, pocket, None,
 
845
            False)
824
846
 
825
847
    def test_checkCopy_identifies_conflicting_copy_candidates(self):
826
848
        # checkCopy() is able to identify conflicting candidates within
850
872
        self.assertIs(
851
873
            None,
852
874
            copy_checker.checkCopy(
853
 
                source, source.distroseries, source.pocket))
 
875
                source, source.distroseries, source.pocket,
 
876
                check_permissions=False))
854
877
 
855
878
        # The second source-only copy, for hoary-test, fails, since it
856
879
        # conflicts with the just-approved copy.
859
882
            'same version already building in the destination archive '
860
883
            'for Breezy Badger Autotest',
861
884
            copy_checker.checkCopy,
862
 
            copied_source, copied_source.distroseries, copied_source.pocket)
 
885
            copied_source, copied_source.distroseries, copied_source.pocket,
 
886
            None, False)
863
887
 
864
888
    def test_checkCopy_identifies_delayed_copies_conflicts(self):
865
889
        # checkCopy() detects copy conflicts in the upload queue for
882
906
        # Commit so the just-created files are accessible and perform
883
907
        # the delayed-copy.
884
908
        self.layer.txn.commit()
885
 
        do_copy([source], archive, series, pocket, include_binaries=False)
 
909
        do_copy(
 
910
            [source], archive, series, pocket, include_binaries=False,
 
911
            check_permissions=False)
886
912
 
887
913
        # Repeating the copy is denied.
888
914
        copy_checker = CopyChecker(archive, include_binaries=False)
889
915
        self.assertRaisesWithContent(
890
916
            CannotCopy,
891
917
            'same version already uploaded and waiting in ACCEPTED queue',
892
 
            copy_checker.checkCopy, source, series, pocket)
 
918
            copy_checker.checkCopy, source, series, pocket, None, False)
893
919
 
894
920
    def test_checkCopy_suppressing_delayed_copies(self):
895
921
        # `CopyChecker` by default will request delayed-copies when it's
917
943
        # this operation, since restricted files are being copied to
918
944
        # public archives.
919
945
        copy_checker = CopyChecker(archive, include_binaries=False)
920
 
        copy_checker.checkCopy(source, series, pocket)
 
946
        copy_checker.checkCopy(
 
947
            source, series, pocket, check_permissions=False)
921
948
        [checked_copy] = list(copy_checker.getCheckedCopies())
922
949
        self.assertTrue(checked_copy.delayed)
923
950
 
925
952
        # scheduled.
926
953
        copy_checker = CopyChecker(
927
954
            archive, include_binaries=False, allow_delayed_copies=False)
928
 
        copy_checker.checkCopy(source, series, pocket)
 
955
        copy_checker.checkCopy(
 
956
            source, series, pocket, check_permissions=False)
929
957
        [checked_copy] = list(copy_checker.getCheckedCopies())
930
958
        self.assertFalse(checked_copy.delayed)
931
959
 
2683
2711
        self.assertIs(
2684
2712
            None,
2685
2713
            checker.checkCopy(proposed_source, warty,
2686
 
            PackagePublishingPocket.UPDATES))
 
2714
            PackagePublishingPocket.UPDATES, check_permissions=False))
2687
2715
 
2688
2716
    def testCopySourceWithConflictingFilesInPPAs(self):
2689
2717
        """We can copy source if the source files match, both in name and
2728
2756
            "test-source_1.0.orig.tar.gz already exists in destination "
2729
2757
            "archive with different contents.",
2730
2758
            checker.checkCopy, test2_source, warty,
2731
 
            PackagePublishingPocket.RELEASE)
 
2759
            PackagePublishingPocket.RELEASE, None, False)
2732
2760
 
2733
2761
    def testCopySourceWithSameFilenames(self):
2734
2762
        """We can copy source if the source files match, both in name and
2771
2799
        self.assertIs(
2772
2800
            None,
2773
2801
            checker.checkCopy(test2_source, warty,
2774
 
            PackagePublishingPocket.RELEASE))
 
2802
            PackagePublishingPocket.RELEASE, check_permissions=False))
2775
2803
 
2776
2804
    def testCopySourceWithExpiredSourcesInDestination(self):
2777
2805
        """We can also copy sources if the destination archive has expired
2820
2848
        self.assertIs(
2821
2849
            None,
2822
2850
            checker.checkCopy(test2_source, warty,
2823
 
            PackagePublishingPocket.RELEASE))
 
2851
            PackagePublishingPocket.RELEASE, check_permissions=False))