diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py
index 4d0eb74..f10326b 100644
--- a/crosperf/benchmark_run.py
+++ b/crosperf/benchmark_run.py
@@ -251,7 +251,7 @@
 
 
 class MockBenchmarkRun(BenchmarkRun):
-  """Inherited from BenchmarkRuna."""
+  """Inherited from BenchmarkRun."""
 
   def ReadCache(self):
     # Just use the first machine for running the cached version,
@@ -292,7 +292,7 @@
                                                self.test_args,
                                                self.profiler_args)
     self.run_completed = True
-    rr = MockResult("logger", self.label, self.log_level)
+    rr = MockResult("logger", self.label, self.log_level, machine)
     rr.out = out
     rr.err = err
     rr.retval = retval
diff --git a/crosperf/benchmark_run_unittest.py b/crosperf/benchmark_run_unittest.py
index 07c8331..4917118 100755
--- a/crosperf/benchmark_run_unittest.py
+++ b/crosperf/benchmark_run_unittest.py
@@ -10,7 +10,7 @@
 import unittest
 import inspect
 
-from utils import logger
+from cros_utils import logger
 
 import benchmark_run
 
@@ -43,8 +43,9 @@
 
     self.test_label = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
                                 "x86-alex", "chromeos2-row1-rack4-host9.cros",
-                                image_args="",
-                                cache_dir="", cache_only=False)
+                                image_args="", cache_dir="", cache_only=False,
+                                log_level="average", compiler="gcc")
+
 
     self.test_cache_conditions =  [CacheConditions.CACHE_FILE_EXISTS,
                                    CacheConditions.CHECKSUMS_MATCH]
@@ -56,15 +57,16 @@
   def testDryRun(self):
     my_label = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
                          "x86-alex", "chromeos2-row1-rack4-host9.cros",
-                         image_args="",
-                         cache_dir="", cache_only=False)
+                         image_args="", cache_dir="", cache_only=False,
+                         log_level="average", compiler="gcc")
+
     logging_level = "average"
     m = MockMachineManager("/tmp/chromeos_root", 0, logging_level, '')
     m.AddMachine("chromeos2-row1-rack4-host9.cros")
     bench = Benchmark("page_cycler.netsim.top_10",    # name
                       "page_cycler.netsim.top_10",    # test_name
                       "",             # test_args
-                      1,              # iteratins
+                      1,              # iterations
                       False,          # rm_chroot_tmp
                       "",             # perf_args
                       suite="telemetry_Crosperf")     # suite
@@ -386,7 +388,7 @@
 
     self.assertEqual (mock_result.call_count, 1)
     mock_result.assert_called_with (self.mock_logger, 'average',
-                                    self.test_label,  "{'Score':100}",
+                                    self.test_label,  None, "{'Score':100}",
                                     "", 0, False, 'page_cycler.netsim.top_10',
                                     'telemetry_Crosperf')
 
diff --git a/crosperf/crosperf_unittest.py b/crosperf/crosperf_unittest.py
index 3af3507..082d8a6 100755
--- a/crosperf/crosperf_unittest.py
+++ b/crosperf/crosperf_unittest.py
@@ -19,8 +19,8 @@
 
 from help import Help
 
-from utils import command_executer
-from utils import logger
+from cros_utils import command_executer
+from cros_utils import logger
 
 EXPERIMENT_FILE_1 = """
   board: x86-alex
@@ -60,7 +60,7 @@
     self.assertEqual(len(options_before), 3)
     crosperf.SetupParserOptions(parser)
     options_after = parser._get_all_options()
-    self.assertEqual(len(options_after), 26)
+    self.assertEqual(len(options_after), 29)
 
 
   def test_convert_options_to_settings(self):
@@ -78,7 +78,7 @@
     settings = crosperf.ConvertOptionsToSettings(options)
     self.assertIsNotNone(settings)
     self.assertIsInstance(settings, settings_factory.GlobalSettings)
-    self.assertEqual(len(settings.fields), 22)
+    self.assertEqual(len(settings.fields), 25)
     self.assertTrue(settings.GetField('rerun'))
     argv = ['crosperf/crosperf.py', 'temp.exp']
     options, args = parser.parse_args(argv)
diff --git a/crosperf/experiment.py b/crosperf/experiment.py
index 2cc5062..caf2569 100644
--- a/crosperf/experiment.py
+++ b/crosperf/experiment.py
@@ -203,6 +203,9 @@
       # to unlock everything.
       self.machine_manager.Cleanup()
     else:
+      if test_flag.GetTestMode():
+        return
+
       all_machines = self.locked_machines
       if not all_machines:
         return
diff --git a/crosperf/experiment_factory_unittest.py b/crosperf/experiment_factory_unittest.py
index 89f3864..148b7e4 100755
--- a/crosperf/experiment_factory_unittest.py
+++ b/crosperf/experiment_factory_unittest.py
@@ -20,6 +20,7 @@
 import experiment_factory
 import machine_manager
 import settings_factory
+import test_flag
 
 EXPERIMENT_FILE_1 = """
   board: x86-alex
@@ -67,7 +68,8 @@
     bench_list = []
     ef._AppendBenchmarkSet(bench_list,
                            experiment_factory.telemetry_perfv2_tests,
-                           "", 1, False, "", "telemetry_Crosperf", False)
+                           "", 1, False, "", "telemetry_Crosperf", False, 0,
+                           False)
     self.assertEqual(len(bench_list),
                      len(experiment_factory.telemetry_perfv2_tests))
     self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
@@ -75,7 +77,8 @@
     bench_list = []
     ef._AppendBenchmarkSet(bench_list,
                            experiment_factory.telemetry_pagecycler_tests,
-                           "", 1, False, "", "telemetry_Crosperf", False)
+                           "", 1, False, "", "telemetry_Crosperf", False, 0,
+                           False)
     self.assertEqual(len(bench_list),
                      len(experiment_factory.telemetry_pagecycler_tests))
     self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
@@ -83,7 +86,8 @@
     bench_list = []
     ef._AppendBenchmarkSet(bench_list,
                            experiment_factory.telemetry_toolchain_perf_tests,
-                           "", 1, False, "", "telemetry_Crosperf", False)
+                           "", 1, False, "", "telemetry_Crosperf", False, 0,
+                           False)
     self.assertEqual(len(bench_list),
                      len(experiment_factory.telemetry_toolchain_perf_tests))
     self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
@@ -110,7 +114,6 @@
     def FakeGetXbuddyPath(build, board, chroot, log_level):
       return "fake_image_path"
 
-
     ef = ExperimentFactory()
     ef._AppendBenchmarkSet = FakeAppendBenchmarkSet
     ef.GetDefaultRemotes = FakeGetDefaultRemotes
@@ -124,7 +127,8 @@
     mock_experiment_file = ExperimentFile(StringIO.StringIO(""))
     mock_experiment_file.all_settings = []
 
-   # Basic test.
+    test_flag.SetTestMode(True)
+    # Basic test.
     global_settings.SetField("name","unittest_test")
     global_settings.SetField("board", "lumpy")
     global_settings.SetField("remote", "123.45.67.89 123.45.76.80")
@@ -162,6 +166,7 @@
     self.assertEqual(exp.labels[0].board, "lumpy")
 
     # Second test: Remotes listed in labels.
+    test_flag.SetTestMode(True)
     label_settings.SetField("remote", "chromeos1.cros chromeos2.cros")
     exp = ef.GetExperiment(mock_experiment_file, "", "")
     self.assertEqual(exp.remote,
diff --git a/crosperf/experiment_runner.py b/crosperf/experiment_runner.py
index 7167b80..971b967 100644
--- a/crosperf/experiment_runner.py
+++ b/crosperf/experiment_runner.py
@@ -7,6 +7,7 @@
 import time
 
 import afe_lock_machine
+import test_flag
 
 from cros_utils import command_executer
 from cros_utils import logger
@@ -82,25 +83,29 @@
     requested for this crosperf run, to prevent any other crosperf runs from
     being able to update/use the machines while this experiment is running.
     """
-    lock_mgr = afe_lock_machine.AFELockManager(
-        self._GetMachineList(),
-        "",
-        experiment.labels[0].chromeos_root,
-        None,
-        log=self.l,
-    )
-    for m in lock_mgr.machines:
-      if not lock_mgr.MachineIsKnown(m):
-        lock_mgr.AddLocalMachine(m)
-    machine_states = lock_mgr.GetMachineStates("lock")
-    lock_mgr.CheckMachineLocks(machine_states, "lock")
-    self.locked_machines = lock_mgr.UpdateMachines(True)
-    self._experiment.locked_machines = self.locked_machines
-    self._UpdateMachineList(self.locked_machines)
-    self._experiment.machine_manager.RemoveNonLockedMachines(
-        self.locked_machines)
-    if len(self.locked_machines) == 0:
-      raise RuntimeError("Unable to lock any machines.")
+    if test_flag.GetTestMode():
+      self.locked_machines = self._GetMachineList()
+      self._experiment.locked_machines = self.locked_machines
+    else:
+      lock_mgr = afe_lock_machine.AFELockManager(
+          self._GetMachineList(),
+          "",
+          experiment.labels[0].chromeos_root,
+          None,
+          log=self.l,
+      )
+      for m in lock_mgr.machines:
+        if not lock_mgr.MachineIsKnown(m):
+          lock_mgr.AddLocalMachine(m)
+      machine_states = lock_mgr.GetMachineStates("lock")
+      lock_mgr.CheckMachineLocks(machine_states, "lock")
+      self.locked_machines = lock_mgr.UpdateMachines(True)
+      self._experiment.locked_machines = self.locked_machines
+      self._UpdateMachineList(self.locked_machines)
+      self._experiment.machine_manager.RemoveNonLockedMachines(
+          self.locked_machines)
+      if len(self.locked_machines) == 0:
+        raise RuntimeError("Unable to lock any machines.")
 
   def _UnlockAllMachines(self, experiment):
     """Attempt to globally unlock all of the machines requested for run.
@@ -108,7 +113,7 @@
     The method will use the AFE server to globally unlock all of the machines
     requested for this crosperf run.
     """
-    if not self.locked_machines:
+    if not self.locked_machines or test_flag.GetTestMode():
       return
 
     lock_mgr = afe_lock_machine.AFELockManager(
diff --git a/crosperf/experiment_runner_unittest.py b/crosperf/experiment_runner_unittest.py
index 0e949eb..46f5093 100755
--- a/crosperf/experiment_runner_unittest.py
+++ b/crosperf/experiment_runner_unittest.py
@@ -13,16 +13,17 @@
 import experiment_status
 import machine_manager
 import config
+import test_flag
 from experiment_file import ExperimentFile
 from experiment_factory import ExperimentFactory
 from results_report import TextResultsReport
 from results_report import HTMLResultsReport
 from results_cache import Result
 
-from utils import logger
-from utils import command_executer
-from utils.email_sender import EmailSender
-from utils.file_utils import FileUtils
+from cros_utils import logger
+from cros_utils import command_executer
+from cros_utils.email_sender import EmailSender
+from cros_utils.file_utils import FileUtils
 
 EXPERIMENT_FILE_1 = """
   board: parrot
@@ -91,6 +92,7 @@
   mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
 
   def make_fake_experiment(self):
+    test_flag.SetTestMode(True)
     experiment_file = ExperimentFile(StringIO.StringIO(EXPERIMENT_FILE_1))
     experiment = ExperimentFactory().GetExperiment(experiment_file,
                                                    working_directory="",
@@ -105,14 +107,18 @@
 
 
   def test_init(self):
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     self.assertFalse (er._terminated)
     self.assertEqual (er.STATUS_TIME_DELAY, 10)
 
     self.exp.log_level = "verbose"
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     self.assertEqual (er.STATUS_TIME_DELAY, 30)
 
 
@@ -145,8 +151,10 @@
 
     # Test 1: log_level == "quiet"
     self.exp.log_level = "quiet"
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log = self.mock_logger,
+                                            cmd_exec =self.mock_cmd_exec)
     er.STATUS_TIME_DELAY = 2
     mock_status_string.return_value = "Fake status string"
     er._Run(self.exp)
@@ -168,8 +176,10 @@
     reset()
     self.exp.log_level = "average"
     mock_status_string.call_count = 0
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     er.STATUS_TIME_DELAY = 2
     mock_status_string.return_value = "Fake status string"
     er._Run(self.exp)
@@ -192,8 +202,10 @@
     reset()
     self.exp.log_level = "verbose"
     mock_status_string.call_count = 0
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     er.STATUS_TIME_DELAY = 2
     mock_status_string.return_value = "Fake status string"
     mock_progress_string.return_value = "Fake progress string"
@@ -220,8 +232,10 @@
   def test_print_table(self, mock_report):
     self.mock_logger.Reset()
     mock_report.return_value = "This is a fake experiment report."
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     er._PrintTable(self.exp)
     self.assertEqual(mock_report.call_count, 1)
     self.assertEqual(self.mock_logger.output_msgs,
@@ -243,8 +257,10 @@
     self.mock_logger.Reset()
     config.AddConfig("no_email", True)
     self.exp.email_to = ["jane.doe@google.com"]
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
     # Test 1. Config:no_email; exp.email_to set ==> no email sent
     er._Email(self.exp)
     self.assertEqual(mock_getuser.call_count, 0)
@@ -356,10 +372,11 @@
   @mock.patch.object(FileUtils, 'MkDirP')
   @mock.patch.object(FileUtils, 'WriteFile')
   @mock.patch.object(HTMLResultsReport, 'GetReport')
+  @mock.patch.object(TextResultsReport, 'GetReport')
   @mock.patch.object(Result, 'CopyResultsTo')
   @mock.patch.object(Result, 'CleanUp')
-  def test_store_results(self, mock_cleanup, mock_copy, mock_report,
-                         mock_writefile, mock_mkdir, mock_rmdir):
+  def test_store_results(self, mock_cleanup, mock_copy, mock_text_report,
+                         mock_report, mock_writefile, mock_mkdir, mock_rmdir):
 
     self.mock_logger.Reset()
     self.exp.results_directory='/usr/local/crosperf-results'
@@ -368,8 +385,10 @@
                                                          bench_run.name)
     self.assertEqual (len(self.exp.benchmark_runs), 6)
 
-    er = experiment_runner.ExperimentRunner(self.exp, self.mock_logger,
-                                            self.mock_cmd_exec)
+    er = experiment_runner.ExperimentRunner(self.exp, json_report=False,
+                                            using_schedv2=False,
+                                            log=self.mock_logger,
+                                            cmd_exec=self.mock_cmd_exec)
 
     # Test 1. Make sure nothing is done if _terminated is true.
     er._terminated = True
@@ -383,7 +402,8 @@
     self.assertEqual(self.mock_logger.LogOutputCount, 0)
 
     # Test 2. _terminated is false; everything works properly.
-    fake_result = Result(self.mock_logger, self.exp.labels[0], "average")
+    fake_result = Result(self.mock_logger, self.exp.labels[0], "average",
+                         "daisy1")
     for r in self.exp.benchmark_runs:
       r.result = fake_result
     er._terminated = False
@@ -406,10 +426,10 @@
     mock_rmdir.called_with('/usr/local/crosperf-results')
     self.assertEqual(self.mock_logger.LogOutputCount, 4)
     self.assertEqual(self.mock_logger.output_msgs,
-                     [ 'Storing experiment file in /usr/local/crosperf-results.',
-                       'Storing results report in /usr/local/crosperf-results.',
-                       'Storing email message body in /usr/local/crosperf-results.',
-                       'Storing results of each benchmark run.' ])
+                     ['Storing experiment file in /usr/local/crosperf-results.',
+                      'Storing results report in /usr/local/crosperf-results.',
+                      'Storing email message body in /usr/local/crosperf-results.',
+                      'Storing results of each benchmark run.'])
 
 
 
diff --git a/crosperf/label.py b/crosperf/label.py
index fba91a8..a34416d 100644
--- a/crosperf/label.py
+++ b/crosperf/label.py
@@ -123,6 +123,7 @@
     self.checksum = ''
     self.log_level = log_level
     self.compiler = compiler
+    self.chrome_version = "Fake Chrome Version 50"
 
   def _GetImageType(self, chromeos_image):
     image_type = None
diff --git a/crosperf/machine_manager.py b/crosperf/machine_manager.py
index d505ada..c87c9b9 100644
--- a/crosperf/machine_manager.py
+++ b/crosperf/machine_manager.py
@@ -526,6 +526,97 @@
 class MockCrosMachine(CrosMachine):
   """Mock cros machine class."""
   # pylint: disable=super-init-not-called
+
+  MEMINFO_STRING = """MemTotal:        3990332 kB
+MemFree:         2608396 kB
+Buffers:          147168 kB
+Cached:           811560 kB
+SwapCached:            0 kB
+Active:           503480 kB
+Inactive:         628572 kB
+Active(anon):     174532 kB
+Inactive(anon):    88576 kB
+Active(file):     328948 kB
+Inactive(file):   539996 kB
+Unevictable:           0 kB
+Mlocked:               0 kB
+SwapTotal:       5845212 kB
+SwapFree:        5845212 kB
+Dirty:              9384 kB
+Writeback:             0 kB
+AnonPages:        173408 kB
+Mapped:           146268 kB
+Shmem:             89676 kB
+Slab:             188260 kB
+SReclaimable:     169208 kB
+SUnreclaim:        19052 kB
+KernelStack:        2032 kB
+PageTables:         7120 kB
+NFS_Unstable:          0 kB
+Bounce:                0 kB
+WritebackTmp:          0 kB
+CommitLimit:     7840376 kB
+Committed_AS:    1082032 kB
+VmallocTotal:   34359738367 kB
+VmallocUsed:      364980 kB
+VmallocChunk:   34359369407 kB
+DirectMap4k:       45824 kB
+DirectMap2M:     4096000 kB
+"""
+
+  CPUINFO_STRING = """processor: 0
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 0
+cpu cores: 2
+apicid: 0
+initial apicid: 0
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+
+processor: 1
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 1
+cpu cores: 2
+apicid: 2
+initial apicid: 2
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+"""
+
   def __init__(self, name, chromeos_root, log_level):
     self.name = name
     self.image = None
@@ -539,10 +630,17 @@
     self.machine_checksum = self._GetMD5Checksum(self.checksum_string)
     self.log_level = log_level
     self.label = None
+    self.ce = command_executer.GetCommandExecuter(log_level=self.log_level)
 
   def IsReachable(self):
     return True
 
+  def _GetMemoryInfo(self):
+    self.meminfo = self.MEMINFO_STRING
+    self._ParseMemoryInfo()
+
+  def _GetCPUInfo(self):
+    self.cpuinfo = self.CPUINFO_STRING
 
 class MockMachineManager(MachineManager):
   """Mock machine manager class."""
@@ -571,6 +669,9 @@
       if cm.IsReachable():
         self._all_machines.append(cm)
 
+  def GetChromeVersion(self, machine):
+    return "Mock Chrome Version R50"
+
   def AcquireMachine(self, label):
     for machine in self._all_machines:
       if not machine.locked:
@@ -590,3 +691,12 @@
 
   def GetAvailableMachines(self, label=None):
     return self._all_machines
+
+  def ForceSameImageToAllMachines(self, label):
+    return 0
+
+  def ComputeCommonCheckSum(self, label):
+    common_checksum = 12345
+    for machine in self.GetMachines(label):
+      machine.machine_checksum = common_checksum
+    self.machine_checksum[label.name] = common_checksum
diff --git a/crosperf/mock_instance.py b/crosperf/mock_instance.py
index 06a574a..62ff2da 100644
--- a/crosperf/mock_instance.py
+++ b/crosperf/mock_instance.py
@@ -14,14 +14,14 @@
 
 perf_args = "record -a -e cycles"
 label1 = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
-                         "x86-alex", "chromeos-alex1",
-                         image_args="",
-                         cache_dir="", cache_only=False)
+                   "x86-alex", "chromeos-alex1", image_args="",
+                   cache_dir="", cache_only=False, log_level="average",
+                   compiler="gcc")
 
 label2 = MockLabel("test2", "image2", "/tmp/test_benchmark_run_2",
-                         "x86-alex", "chromeos-alex2",
-                         image_args="",
-                         cache_dir="", cache_only=False)
+                   "x86-alex", "chromeos-alex2", image_args="",
+                   cache_dir="", cache_only=False, log_level="average",
+                   compiler="gcc")
 
 benchmark1 = Benchmark("benchmark1", "autotest_name_1",
                        "autotest_args", 2, "", perf_args, "", "")
diff --git a/crosperf/schedv2_unittest.py b/crosperf/schedv2_unittest.py
index 3ce4e15..3276cd0 100644
--- a/crosperf/schedv2_unittest.py
+++ b/crosperf/schedv2_unittest.py
@@ -15,8 +15,8 @@
 from experiment_file import ExperimentFile
 from experiment_runner import ExperimentRunner
 from machine_manager import MockCrosMachine
-from utils import command_executer
-from utils.command_executer import CommandExecuter
+from cros_utils import command_executer
+from cros_utils.command_executer import CommandExecuter
 from experiment_runner_unittest import FakeLogger
 from schedv2 import Schedv2
 
diff --git a/crosperf/suite_runner.py b/crosperf/suite_runner.py
index 12237d3..afec6c8 100644
--- a/crosperf/suite_runner.py
+++ b/crosperf/suite_runner.py
@@ -9,6 +9,7 @@
 import shlex
 
 from utils import command_executer
+import test_flag
 
 TEST_THAT_PATH = '/usr/bin/test_that'
 CHROME_MOUNT_DIR = '/tmp/chrome_root'
@@ -252,7 +253,8 @@
     # Check for and remove temporary file that may have been left by
     # previous telemetry runs (and which might prevent this run from
     # working).
-    self.RemoveTelemetryTempFile (machine, label.chromeos_root)
+    if not test_flag.GetTestMode():
+      self.RemoveTelemetryTempFile (machine, label.chromeos_root)
 
     rsa_key = os.path.join(label.chromeos_root,
         "src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa")
diff --git a/crosperf/suite_runner_unittest.py b/crosperf/suite_runner_unittest.py
index b14a8e1..41013f7 100755
--- a/crosperf/suite_runner_unittest.py
+++ b/crosperf/suite_runner_unittest.py
@@ -14,6 +14,7 @@
 import machine_manager
 import image_checksummer
 import label
+import test_flag
 
 from benchmark import Benchmark
 from benchmark_run import MockBenchmarkRun
@@ -31,7 +32,7 @@
   mock_logger = mock.Mock(spec=logger.Logger)
   mock_label = label.MockLabel("lumpy", "lumpy_chromeos_image", "/tmp/chromeos",
                                "lumpy", [ "lumpy1.cros", "lumpy.cros2" ],
-                               "", "", False, "")
+                               "", "", False, "average", "gcc", "")
   telemetry_crosperf_bench = Benchmark("b1_test", # name
                                        "octane",  # test_name
                                        "",        # test_args
@@ -215,7 +216,8 @@
     raised_exception = False
     try:
       self.runner.Test_That_Run('lumpy1.cros', self.mock_label,
-                                self.test_that_bench, '', 'record -a -e cycles')
+                                self.test_that_bench, '',
+                                'record -a -e cycles')
     except:
       raised_exception = True
     self.assertTrue(raised_exception)
@@ -224,7 +226,8 @@
     self.mock_cmd_exec.ChrootRunCommand = mock_chroot_runcmd
     self.mock_cmd_exec.CrosRunCommand = mock_cros_runcmd
     res = self.runner.Test_That_Run ('lumpy1.cros', self.mock_label,
-                                     self.test_that_bench, '--iterations=2', '')
+                                     self.test_that_bench, '--iterations=2',
+                                     '')
     self.assertEqual(mock_cros_runcmd.call_count, 1)
     self.assertEqual(mock_chroot_runcmd.call_count, 1)
     self.assertEqual(res, 0)
@@ -233,7 +236,9 @@
     args_list = mock_chroot_runcmd.call_args_list[0][0]
     self.assertEqual(len(args_list), 4)
     self.assertEqual(args_list[0], '/tmp/chromeos')
-    self.assertEqual(args_list[1], ('/usr/bin/test_that  --board=lumpy '
+    self.assertEqual(args_list[1], ('/usr/bin/test_that --autotest_dir '
+                                    '~/trunk/src/third_party/autotest/files '
+                                    '--fast  --board=lumpy '
                                     '--iterations=2 lumpy1.cros octane'))
     self.assertTrue(args_list[2])
     self.assertEqual(args_list[3], self.mock_cmd_term)
@@ -261,11 +266,12 @@
     self.assertEqual(args_list[1],
                      ('/usr/bin/test_that --autotest_dir '
                       '~/trunk/src/third_party/autotest/files '
-                      ' --board=lumpy --args=" test=octane '
+                      ' --board=lumpy --args=" run_local=False test=octane '
                       'profiler=custom_perf profiler_args=\'record -a -e '
                       'cycles,instructions\'" lumpy1.cros telemetry_Crosperf'))
     self.assertEqual(args_dict['cros_sdk_options'],
-                     (' --chrome_root= --chrome_root_mount=/tmp/chrome_root  '
+                     ('--no-ns-pid --chrome_root= '
+                      '--chrome_root_mount=/tmp/chrome_root '
                       'FEATURES="-usersandbox" CHROME_ROOT=/tmp/chrome_root'))
     self.assertEqual(args_dict['command_terminator'], self.mock_cmd_term)
     self.assertTrue(args_dict['return_output'])
@@ -319,6 +325,7 @@
       raises_exception = True
     self.assertTrue(raises_exception)
 
+    test_flag.SetTestMode(True)
     res = self.runner.Telemetry_Run('lumpy1.cros', self.mock_label,
                                     self.telemetry_bench, '')
     self.assertEqual(res, 0)
