示例#1
0
class Test(unittest.TestCase):
    def setUp(self):
        gitwrapper.setUp()

    def tearDown(self):
        gitwrapper.tearDown()

    class SimpleManifest_OneProjectDependsOnTwoOthers:
        def __init__(self, test):
            self.project1 = gitwrapper.GitHub("project1")
            self.project2 = gitwrapper.GitHub("project2")
            self.requiringProject = gitwrapper.GitHub("requiringProject")

            self.localClone1 = gitwrapper.LocalClone(self.project1)
            self.localClone2 = gitwrapper.LocalClone(self.project2)
            self.localRequiringProject = gitwrapper.LocalClone(self.requiringProject)
            test.assertEquals(self.project1.hash('master'), self.localClone1.hash())
            test.assertEquals(self.project2.hash('master'), self.localClone2.hash())
            test.assertEquals(self.requiringProject.hash(), self.localRequiringProject.hash())

            upsetowrapper.run(self.localRequiringProject, "addRequirement project1")
            upsetowrapper.run(self.localRequiringProject, "addRequirement project2")
            test.assertTrue(os.path.exists(self.localRequiringProject.manifestFilename()))
            self.localRequiringProject.addCommitPushManifest()

            self.manifest = upseto.manifest.Manifest.fromDir(self.localRequiringProject.directory())
            requirements = self.manifest.requirements()
            test.assertEquals(len(requirements), 2)
            test.assertEquals(requirements[0]['originURL'], "file://" + self.project1.directory())
            test.assertEquals(requirements[0]['hash'], self.project1.hash())
            test.assertEquals(requirements[1]['originURL'], "file://" + self.project2.directory())
            test.assertEquals(requirements[1]['hash'], self.project2.hash())

        def addThirdTier(self):
            self.recursiveProject = gitwrapper.GitHub("recursiveProject")
            self.localRecursiveProject = gitwrapper.LocalClone(self.recursiveProject)
            upsetowrapper.run(self.localRecursiveProject, "addRequirement requiringProject")
            self.localRecursiveProject.addCommitPushManifest()

        def addFourthTier(self):
            self.fourthTierProject = gitwrapper.GitHub('forthTier')
            self.localFourthTierProject = gitwrapper.LocalClone(self.fourthTierProject)
            upsetowrapper.run(self.localFourthTierProject, "addRequirement recursiveProject")
            self.localFourthTierProject.addCommitPushManifest()

    def test_simpleManifest_OneProjectDependsOnTwoOthers_RequirementsFetched(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)

        shutil.rmtree(gitwrapper.localClonesDir())

        localRequiringProject = gitwrapper.LocalClone(case.requiringProject)
        upsetowrapper.run(localRequiringProject, "fulfillRequirements")
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())

        upsetowrapper.run(localRequiringProject, "fulfillRequirements")  # does nothing
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())
示例#2
0
 def test_createBuildProduct_bringLabel(self):
     self.createBuildProduct()
     self.cleanLocalClonesDir()
     label = 'solvent__producer__theProductName__%s__official' % self.producer.hash(
     )
     solventwrapper.run(
         gitwrapper.localClonesDir(),
         "bringlabel --label=%s --destination=%s" %
         (label, gitwrapper.localClonesDir()))
     self.assertTrue(
         os.path.isdir(
             os.path.join(gitwrapper.localClonesDir(), "theDirectory")))
     self.assertTrue(
         os.path.exists(
             os.path.join(gitwrapper.localClonesDir(), "theDirectory",
                          "theProduct")))
示例#3
0
    def test_SubmitAndApprove(self):
        localClone1 = gitwrapper.LocalClone(self.project1)
        hash = localClone1.hash()
        localClone1.writeFile("build/product1", "product1 contents")

        solventwrapper.run(localClone1,
                           "submitbuild",
                           env=dict(SOLVENT_CLEAN="yes"))
        solventwrapper.run(localClone1,
                           "approve",
                           env=dict(SOLVENT_CLEAN="yes"))

        self.assertEquals(len(self.osmosisPair.local.client().listLabels()), 1)
        label = 'solvent__project1__build__%s__clean' % hash
        self.assertEquals(self.osmosisPair.local.client().listLabels(),
                          [label])
        self.assertEquals(len(self.osmosisPair.official.client().listLabels()),
                          1)
        self.assertEquals(self.osmosisPair.official.client().listLabels(),
                          [label])

        self.cleanLocalClonesDir()
        self.assertFalse(localClone1.fileExists("build/product1"))
        self.osmosisPair.local.client().checkout(
            path=gitwrapper.localClonesDir(), label=label)
        self.assertEquals(localClone1.hash(), hash)
        self.assertTrue(localClone1.fileExists("build/product1"))
示例#4
0
    def test_recursiveRequirements(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
        case.addThirdTier()

        shutil.rmtree(gitwrapper.localClonesDir())
        localRecursiveProject = gitwrapper.LocalClone(case.recursiveProject)
        upsetowrapper.run(localRecursiveProject, "fulfillRequirements")
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
示例#5
0
    def test_createBuildProduct(self):
        self.createBuildProduct()

        self.assertEquals(len(self.osmosisPair.local.client().listLabels()), 1)
        label = 'solvent__producer__theProductName__%s__official' % self.producer.hash(
        )
        self.assertEquals(self.osmosisPair.local.client().listLabels(),
                          [label])
        self.assertEquals(len(self.osmosisPair.official.client().listLabels()),
                          1)

        self.cleanLocalClonesDir()
        solventwrapper.run(
            gitwrapper.localClonesDir(),
            "bring --repository=producer --product=theProductName --hash=%s --destination=%s"
            % (self.producer.hash(), gitwrapper.localClonesDir()))
        self.assertTrue(
            os.path.isdir(
                os.path.join(gitwrapper.localClonesDir(), "theDirectory")))
        self.assertTrue(
            os.path.exists(
                os.path.join(gitwrapper.localClonesDir(), "theDirectory",
                             "theProduct")))
示例#6
0
    def test_simpleManifest_OneProjectDependsOnTwoOthers_RequirementsFetched(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)

        shutil.rmtree(gitwrapper.localClonesDir())

        localRequiringProject = gitwrapper.LocalClone(case.requiringProject)
        upsetowrapper.run(localRequiringProject, "fulfillRequirements")
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())

        upsetowrapper.run(localRequiringProject, "fulfillRequirements")  # does nothing
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())
示例#7
0
    def test_SubmitANonUpsetoedProjectOfficialBuild(self):
        localClone1 = gitwrapper.LocalClone(self.project1)
        hash = localClone1.hash()
        localClone1.writeFile("build/product1", "product1 contents")

        solventwrapper.configureAsOfficial()
        solventwrapper.run(localClone1, "submitbuild")
        self.assertEquals(len(self.osmosisPair.local.client().listLabels()), 1)
        label = 'solvent__project1__build__%s__officialcandidate' % hash
        self.assertEquals(self.osmosisPair.local.client().listLabels(),
                          [label])
        self.assertEquals(len(self.osmosisPair.official.client().listLabels()),
                          1)
        self.assertEquals(self.osmosisPair.official.client().listLabels(),
                          [label])

        self.cleanLocalClonesDir()
        self.osmosisPair.local.client().checkout(
            path=gitwrapper.localClonesDir(), label=label)
        self.assertEquals(localClone1.hash(), hash)
        self.assertTrue(localClone1.fileExists("build/product1"))
示例#8
0
 def test_checkWorkspaceUnsullied(self):
     case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
     case.addThirdTier()
     upsetowrapper.run(case.localRecursiveProject, "checkRequirements --unsullied")
     os.mkdir(os.path.join(gitwrapper.localClonesDir(), "projectoutsideofupseto"))
     upsetowrapper.runShouldFail(case.localRecursiveProject, "checkRequirements --unsullied", "sullied")
示例#9
0
        hashBefore = case.localClone1.hash()
        case.localClone1.createAddCommitPush('anotherfile')
        hashAfter = case.localClone1.hash()
        self.assertNotEqual(hashBefore, hashAfter)

        upsetowrapper.run(case.localRequiringProject, "fulfillRequirements")
        self.assertEquals(case.localClone1.hash(), hashBefore)
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())

    def test_recursiveRequirements(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
        case.addThirdTier()

        shutil.rmtree(gitwrapper.localClonesDir())
        localRecursiveProject = gitwrapper.LocalClone(case.recursiveProject)
        upsetowrapper.run(localRecursiveProject, "fulfillRequirements")
        self.assertEquals(case.requiringProject.hash('master'), case.localRequiringProject.hash())
        self.assertEquals(case.project1.hash('master'), case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'), case.localClone2.hash())

    def test_recursiveRequirementDirectlyRequiresFirstLayerProject(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
        case.addThirdTier()

        upsetowrapper.run(case.localRecursiveProject, "addRequirement project1")
        case.localRecursiveProject.addCommitPushManifest()

        shutil.rmtree(gitwrapper.localClonesDir())
        localRecursiveProject = gitwrapper.LocalClone(case.recursiveProject)
示例#10
0
        case.localClone1.createAddCommitPush('anotherfile')
        hashAfter = case.localClone1.hash()
        self.assertNotEqual(hashBefore, hashAfter)

        upsetowrapper.run(case.localRequiringProject, "fulfillRequirements")
        self.assertEquals(case.localClone1.hash(), hashBefore)
        self.assertEquals(case.project2.hash('master'),
                          case.localClone2.hash())
        self.assertEquals(case.requiringProject.hash('master'),
                          case.localRequiringProject.hash())

    def test_recursiveRequirements(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
        case.addThirdTier()

        shutil.rmtree(gitwrapper.localClonesDir())
        localRecursiveProject = gitwrapper.LocalClone(case.recursiveProject)
        upsetowrapper.run(localRecursiveProject, "fulfillRequirements")
        self.assertEquals(case.requiringProject.hash('master'),
                          case.localRequiringProject.hash())
        self.assertEquals(case.project1.hash('master'),
                          case.localClone1.hash())
        self.assertEquals(case.project2.hash('master'),
                          case.localClone2.hash())

    def test_recursiveRequirementDirectlyRequiresFirstLayerProject(self):
        case = self.SimpleManifest_OneProjectDependsOnTwoOthers(self)
        case.addThirdTier()

        upsetowrapper.run(case.localRecursiveProject,
                          "addRequirement project1")
示例#11
0
 def cleanLocalClonesDir(self):
     shutil.rmtree(gitwrapper.localClonesDir())
     os.makedirs(gitwrapper.localClonesDir())