def testPull(self): """checkout fetches the right ref for a pull.""" with Stub(bootstrap, 'call', FakeSubprocess()) as fake: with Stub(os, 'chdir', Pass): bootstrap.checkout(REPO, None, PULL) expected_ref = bootstrap.pull_ref(PULL)[0][0] self.assertTrue(any( expected_ref in cmd for cmd, _, _ in fake.calls if 'fetch' in cmd))
class IntegrationTest(unittest.TestCase): REPO = 'hello/world' MASTER = 'fake-master-file' BRANCH_FILE = 'fake-branch-file' PR_FILE = 'fake-pr-file' BRANCH = 'another-branch' PR = 42 PR_TAG = bootstrap.pull_ref(PR)[0][0].strip('+') def FakeRepo(self, repo): return os.path.join(self.root_github, repo) def setUp(self): self.boiler = [ Stub(bootstrap, 'finish', Pass), Stub(bootstrap.GSUtil, 'copy_file', Pass), Stub(bootstrap, 'repository', self.FakeRepo), Stub(bootstrap, 'setup_credentials', Pass), Stub(bootstrap, 'setup_logging', FakeLogging()), Stub(bootstrap, 'start', Pass), Stub(os, 'environ', FakeEnviron(set_job=False)), ] self.root_github = tempfile.mkdtemp() self.root_workspace = tempfile.mkdtemp() self.ocwd = os.getcwd() repo = self.FakeRepo(self.REPO) subprocess.check_call(['git', 'init', repo]) os.chdir(repo) subprocess.check_call(['touch', self.MASTER]) subprocess.check_call(['git', 'add', self.MASTER]) subprocess.check_call(['git', 'commit', '-m', 'Initial commit']) subprocess.check_call(['git', 'checkout', 'master']) def tearDown(self): for stub in self.boiler: with stub: # Leaving with restores things pass os.chdir(self.ocwd) subprocess.check_call(['rm', '-rf', self.root_github]) subprocess.check_call(['rm', '-rf', self.root_workspace]) def testPr(self): subprocess.check_call(['git', 'checkout', 'master']) subprocess.check_call(['git', 'checkout', '-b', 'unknown-pr-branch']) subprocess.check_call(['git', 'rm', self.MASTER]) subprocess.check_call(['touch', self.PR_FILE]) subprocess.check_call(['git', 'add', self.PR_FILE]) subprocess.check_call( ['git', 'commit', '-m', 'Create branch for PR %d' % self.PR]) subprocess.check_call(['git', 'tag', self.PR_TAG]) os.chdir('/tmp') bootstrap.bootstrap('fake-pr', self.REPO, None, self.PR, self.root_workspace) def testBranch(self): subprocess.check_call(['git', 'checkout', '-b', self.BRANCH]) subprocess.check_call(['git', 'rm', self.MASTER]) subprocess.check_call(['touch', self.BRANCH_FILE]) subprocess.check_call(['git', 'add', self.BRANCH_FILE]) subprocess.check_call( ['git', 'commit', '-m', 'Create %s' % self.BRANCH]) os.chdir('/tmp') bootstrap.bootstrap('fake-branch', self.REPO, self.BRANCH, None, self.root_workspace) def testBatch(self): def head_sha(): # We can't hardcode the SHAs for the test, so we need to determine # them after each commit. return subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip() refs = ['master:%s' % head_sha()] for pr in (123, 456): subprocess.check_call( ['git', 'checkout', '-b', 'refs/pull/%d/head' % pr, 'master']) subprocess.check_call(['git', 'rm', self.MASTER]) subprocess.check_call(['touch', self.PR_FILE]) subprocess.check_call(['git', 'add', self.PR_FILE]) open('pr_%d.txt' % pr, 'w').write('some text') subprocess.check_call(['git', 'add', 'pr_%d.txt' % pr]) subprocess.check_call( ['git', 'commit', '-m', 'add some stuff (#%d)' % pr]) refs.append('%d:%s' % (pr, head_sha())) os.chdir('/tmp') pull = ','.join(refs) print '--pull', pull bootstrap.bootstrap('fake-pr', self.REPO, None, pull, self.root_workspace) def testPr_Bad(self): random_pr = 111 with Stub(bootstrap, 'start', Bomb): with Stub(time, 'sleep', Pass): with self.assertRaises(subprocess.CalledProcessError): bootstrap.bootstrap('fake-pr', self.REPO, None, random_pr, self.root_workspace) def testBranch_Bad(self): random_branch = 'something' with Stub(bootstrap, 'start', Bomb): with Stub(time, 'sleep', Pass): with self.assertRaises(subprocess.CalledProcessError): bootstrap.bootstrap('fake-branch', self.REPO, random_branch, None, self.root_workspace) def testJobMissing(self): with self.assertRaises(OSError): bootstrap.bootstrap('this-job-no-exists', self.REPO, 'master', None, self.root_workspace) def testJobFails(self): with self.assertRaises(SystemExit): bootstrap.bootstrap('fake-failure', self.REPO, 'master', None, self.root_workspace)
class IntegrationTest(unittest.TestCase): REPO = 'hello/world' MASTER = 'fake-master-file' BRANCH_FILE = 'fake-branch-file' PR_FILE = 'fake-pr-file' BRANCH = 'another-branch' PR = 42 PR_TAG = bootstrap.pull_ref(PR).strip('+') def FakeRepo(self, repo): return os.path.join(self.root_github, repo) def setUp(self): self.boiler = [ Stub(bootstrap, 'finish', Pass), Stub(bootstrap.GSUtil, 'copy_file', Pass), Stub(bootstrap, 'repository', self.FakeRepo), Stub(bootstrap, 'setup_credentials', Pass), Stub(bootstrap, 'setup_logging', FakeLogging()), Stub(bootstrap, 'start', Pass), Stub(os, 'environ', FakeEnviron(set_job=False)), ] self.root_github = tempfile.mkdtemp() self.root_workspace = tempfile.mkdtemp() self.ocwd = os.getcwd() repo = self.FakeRepo(self.REPO) subprocess.check_call(['git', 'init', repo]) os.chdir(repo) subprocess.check_call(['touch', self.MASTER]) subprocess.check_call(['git', 'add', self.MASTER]) subprocess.check_call(['git', 'commit', '-m', 'Initial commit']) subprocess.check_call(['git', 'checkout', 'master']) def tearDown(self): for stub in self.boiler: with stub: # Leaving with restores things pass os.chdir(self.ocwd) subprocess.check_call(['rm', '-rf', self.root_github]) subprocess.check_call(['rm', '-rf', self.root_workspace]) def testPr(self): subprocess.check_call(['git', 'checkout', 'master']) subprocess.check_call(['git', 'checkout', '-b', 'unknown-pr-branch']) subprocess.check_call(['git', 'rm', self.MASTER]) subprocess.check_call(['touch', self.PR_FILE]) subprocess.check_call(['git', 'add', self.PR_FILE]) subprocess.check_call( ['git', 'commit', '-m', 'Create branch for PR %d' % self.PR]) subprocess.check_call(['git', 'tag', self.PR_TAG]) os.chdir('/tmp') bootstrap.bootstrap('fake-pr', self.REPO, None, self.PR, self.root_workspace) def testBranch(self): subprocess.check_call(['git', 'checkout', '-b', self.BRANCH]) subprocess.check_call(['git', 'rm', self.MASTER]) subprocess.check_call(['touch', self.BRANCH_FILE]) subprocess.check_call(['git', 'add', self.BRANCH_FILE]) subprocess.check_call( ['git', 'commit', '-m', 'Create %s' % self.BRANCH]) os.chdir('/tmp') bootstrap.bootstrap('fake-branch', self.REPO, self.BRANCH, None, self.root_workspace) def testPr_Bad(self): random_pr = 111 with Stub(bootstrap, 'start', Bomb): with Stub(time, 'sleep', Pass): with self.assertRaises(subprocess.CalledProcessError): bootstrap.bootstrap('fake-pr', self.REPO, None, random_pr, self.root_workspace) def testBranch_Bad(self): random_branch = 'something' with Stub(bootstrap, 'start', Bomb): with Stub(time, 'sleep', Pass): with self.assertRaises(subprocess.CalledProcessError): bootstrap.bootstrap('fake-branch', self.REPO, random_branch, None, self.root_workspace) def testJobMissing(self): with self.assertRaises(OSError): bootstrap.bootstrap('this-job-no-exists', self.REPO, 'master', None, self.root_workspace) def testJobFails(self): with self.assertRaises(SystemExit): bootstrap.bootstrap('fake-failure', self.REPO, 'master', None, self.root_workspace)