Make test root configurable.

Set ZUUL_TEST_ROOT to put them somewhere other than /tmp.

Change-Id: Ic73ec93f39ffb6693c202bb80bbc0597dd1d7e43
Reviewed-on: https://review.openstack.org/11903
Approved: James E. Blair <corvus@inaugust.com>
Reviewed-by: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index dbed89b..1c76e8b 100644
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -44,6 +44,13 @@
 CONFIG.set('zuul', 'layout_config',
            os.path.join(FIXTURE_DIR, "layout.yaml"))
 
+TMP_ROOT = os.environ.get("ZUUL_TEST_ROOT", "/tmp")
+TEST_ROOT = os.path.join(TMP_ROOT, "zuul-test")
+UPSTREAM_ROOT = os.path.join(TEST_ROOT, "upstream")
+GIT_ROOT = os.path.join(TEST_ROOT, "git")
+
+CONFIG.set('zuul', 'git_dir', GIT_ROOT)
+
 logging.basicConfig(level=logging.DEBUG)
 
 
@@ -58,10 +65,10 @@
 
 def init_repo(project):
     parts = project.split('/')
-    path = os.path.join("/tmp/zuul-test/upstream", *parts[:-1])
+    path = os.path.join(UPSTREAM_ROOT, *parts[:-1])
     if not os.path.exists(path):
         os.makedirs(path)
-    path = os.path.join("/tmp/zuul-test/upstream", project)
+    path = os.path.join(UPSTREAM_ROOT, project)
     repo = git.Repo.init(path)
 
     fn = os.path.join(path, 'README')
@@ -87,7 +94,7 @@
 
 
 def add_fake_change_to_repo(project, branch, change_num, patchset, msg, fn):
-    path = os.path.join("/tmp/zuul-test/upstream", project)
+    path = os.path.join(UPSTREAM_ROOT, project)
     repo = git.Repo(path)
     ref = ChangeReference.create(repo, '1/%s/%s' % (change_num,
                                                     patchset),
@@ -96,7 +103,7 @@
     repo.head.reset(index=True, working_tree=True)
     repo.git.clean('-x', '-f', '-d')
 
-    path = os.path.join("/tmp/zuul-test/upstream", project)
+    path = os.path.join(UPSTREAM_ROOT, project)
     fn = os.path.join(path, fn)
     f = open(fn, 'w')
     f.write("test %s %s %s\n" % (branch, change_num, patchset))
@@ -106,7 +113,7 @@
 
 
 def ref_has_change(ref, change):
-    path = os.path.join("/tmp/zuul-test/git", change.project)
+    path = os.path.join(GIT_ROOT, change.project)
     repo = git.Repo(path)
     for commit in repo.iter_commits(ref):
         if commit.message.strip() == ('%s-1' % change.subject):
@@ -118,7 +125,7 @@
     job = args[0]
     commits = args[1:]
     project = job.parameters['ZUUL_PROJECT']
-    path = os.path.join("/tmp/zuul-test/git", project)
+    path = os.path.join(GIT_ROOT, project)
     repo = git.Repo(path)
     ref = job.parameters['ZUUL_REF']
     repo_messages = [c.message.strip() for c in repo.iter_commits(ref)]
@@ -290,7 +297,7 @@
         self.data['status'] = 'MERGED'
         self.open = False
 
-        path = os.path.join("/tmp/zuul-test/upstream", self.project)
+        path = os.path.join(UPSTREAM_ROOT, self.project)
         repo = git.Repo(path)
         repo.heads[self.branch].commit = \
             repo.commit(self.patchsets[-1]['revision'])
@@ -555,7 +562,7 @@
         path = res.path
         project = '/'.join(path.split('/')[2:-2])
         ret = ''
-        path = os.path.join("/tmp/zuul-test/upstream", project)
+        path = os.path.join(UPSTREAM_ROOT, project)
         repo = git.Repo(path)
         for ref in repo.refs:
             ret += ref.object.hexsha + '\t' + ref.path + '\n'
@@ -564,18 +571,18 @@
 
 class FakeGerritTrigger(zuul.trigger.gerrit.Gerrit):
     def getGitUrl(self, project):
-        return "/tmp/zuul-test/upstream/%s" % project
+        return os.path.join(UPSTREAM_ROOT, project.name)
 
 
 class testScheduler(unittest.TestCase):
     log = logging.getLogger("zuul.test")
 
     def setUp(self):
-        if os.path.exists("/tmp/zuul-test"):
-            shutil.rmtree("/tmp/zuul-test")
-        os.makedirs("/tmp/zuul-test")
-        os.makedirs("/tmp/zuul-test/upstream")
-        os.makedirs("/tmp/zuul-test/git")
+        if os.path.exists(TEST_ROOT):
+            shutil.rmtree(TEST_ROOT)
+        os.makedirs(TEST_ROOT)
+        os.makedirs(UPSTREAM_ROOT)
+        os.makedirs(GIT_ROOT)
 
         # For each project in config:
         init_repo("org/project")
@@ -622,7 +629,7 @@
         self.gerrit.stop()
         self.sched.stop()
         self.sched.join()
-        #shutil.rmtree("/tmp/zuul-test")
+        #shutil.rmtree(TEST_ROOT)
 
     def waitUntilSettled(self):
         self.log.debug("Waiting until settled...")
@@ -1019,12 +1026,15 @@
         self.waitUntilSettled()
         self.fake_jenkins.fakeRelease('.*-merge')
         self.waitUntilSettled()
+
+        pprint.pprint(jobs)
+
         ref = jobs[-1].parameters['ZUUL_REF']
         self.fake_jenkins.hold_jobs_in_queue = False
         self.fake_jenkins.fakeRelease()
         self.waitUntilSettled()
 
-        path = os.path.join("/tmp/zuul-test/git/org/project")
+        path = os.path.join(GIT_ROOT, "org/project")
         repo = git.Repo(path)
         repo_messages = [c.message.strip() for c in repo.iter_commits(ref)]
         repo_messages.reverse()
@@ -1111,7 +1121,7 @@
         self.fake_jenkins.fakeRelease()
         self.waitUntilSettled()
 
-        path = os.path.join("/tmp/zuul-test/git/org/project")
+        path = os.path.join(GIT_ROOT, "org/project")
         repo = git.Repo(path)
         repo_messages = [c.message.strip() for c in repo.iter_commits(ref)]
         repo_messages.reverse()
@@ -1123,7 +1133,7 @@
         self.test_build_configuration()
         self.test_build_configuration_branch()
         # C has been merged, undo that
-        path = os.path.join("/tmp/zuul-test/upstream", "org/project")
+        path = os.path.join(UPSTREAM_ROOT, "org/project")
         repo = git.Repo(path)
         repo.heads.master.commit = repo.commit('init')
         self.test_build_configuration()
@@ -1156,7 +1166,7 @@
         self.fake_jenkins.fakeRelease()
         self.waitUntilSettled()
 
-        path = os.path.join("/tmp/zuul-test/git/org/project")
+        path = os.path.join(GIT_ROOT, "org/project")
         repo = git.Repo(path)
 
         repo_messages = [c.message.strip()