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())
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")))
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"))
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_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")))
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())
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"))
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")
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)
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")
def cleanLocalClonesDir(self): shutil.rmtree(gitwrapper.localClonesDir()) os.makedirs(gitwrapper.localClonesDir())