bisect-kit: refactoring session dir

Hide session_base variable from users and unify how session_dir is
determined.

This CL also avoid touch default session folder during unit test.

BUG=None
TEST=unittest

Change-Id: If722a185681d177a646cdaf6ee3b52e299f987eb
diff --git a/bisect_kit/testing.py b/bisect_kit/testing.py
index bb60cb8..21e7832 100644
--- a/bisect_kit/testing.py
+++ b/bisect_kit/testing.py
@@ -5,10 +5,15 @@
 """Common functions for testing"""
 
 from __future__ import print_function
-import os
 import contextlib
+import os
+import shutil
+import tempfile
+
 from unittest import mock
 
+from bisect_kit import common
+
 
 def get_testdata_path(filename=None):
   """Gets path to test data
@@ -43,3 +48,19 @@
     data = f.read()
   with mock.patch.object(module, name, return_value=data):
     yield
+
+
+class mock_session_base(contextlib.ContextDecorator):
+  """Context decorator to mock session base and clean up."""
+
+  def __init__(self):
+    self.session_base_bak = None
+    self.session_base = tempfile.mkdtemp()
+
+  def __enter__(self):
+    self.session_base_bak = common.DEFAULT_SESSION_BASE
+    common.DEFAULT_SESSION_BASE = self.session_base
+
+  def __exit__(self, *exc):
+    common.DEFAULT_SESSION_BASE = self.session_base_bak
+    shutil.rmtree(self.session_base)