aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crosperf/experiment.py17
-rwxr-xr-xcrosperf/machine_image_manager_unittest.py62
2 files changed, 44 insertions, 35 deletions
diff --git a/crosperf/experiment.py b/crosperf/experiment.py
index bfee351d..0a0f3fc0 100644
--- a/crosperf/experiment.py
+++ b/crosperf/experiment.py
@@ -47,6 +47,7 @@ class Experiment(object):
self.num_complete = 0
self.num_run_complete = 0
self.share_cache = share_cache
+ self.active_threads = []
# If locks_directory (self.lock_dir) not blank, we will use the file
# locking mechanism; if it is blank then we will use the AFE server
# locking mechanism.
@@ -83,14 +84,14 @@ class Experiment(object):
self.machine_manager.AddMachine(machine)
# Now machine_manager._all_machines contains a list of reachable
# machines. This is a subset of self.remote. We make both lists the same.
- self.remote = [m.name for m in self.machine_manager._all_machines]
+ self.remote = [m.name for m in self.machine_manager.GetAllMachines()]
if not self.remote:
raise RuntimeError('No machine available for running experiment.')
for label in labels:
# We filter out label remotes that are not reachable (not in
# self.remote). So each label.remote is a sublist of experiment.remote.
- label.remote = filter(lambda x: x in self.remote, label.remote)
+ label.remote = [r for r in label.remote if r in self.remote]
try:
self.machine_manager.ComputeCommonCheckSum(label)
except BadChecksum:
@@ -178,15 +179,15 @@ class Experiment(object):
self._schedv2.run_sched()
else:
self.active_threads = []
- for benchmark_run in self.benchmark_runs:
+ for run in self.benchmark_runs:
# Set threads to daemon so program exits when ctrl-c is pressed.
- benchmark_run.daemon = True
- benchmark_run.start()
- self.active_threads.append(benchmark_run)
+ run.daemon = True
+ run.start()
+ self.active_threads.append(run)
def SetCacheConditions(self, cache_conditions):
- for benchmark_run in self.benchmark_runs:
- benchmark_run.SetCacheConditions(cache_conditions)
+ for run in self.benchmark_runs:
+ run.SetCacheConditions(cache_conditions)
def Cleanup(self):
"""Make sure all machines are unlocked."""
diff --git a/crosperf/machine_image_manager_unittest.py b/crosperf/machine_image_manager_unittest.py
index 220c4cf4..0b75de0a 100755
--- a/crosperf/machine_image_manager_unittest.py
+++ b/crosperf/machine_image_manager_unittest.py
@@ -1,7 +1,11 @@
-#!/usr/bin/python
+#!/usr/bin/python2
# Copyright 2015 Google Inc. All Rights Reserved.
+"""Unit tests for the MachineImageManager class."""
+
+from __future__ import print_function
+
import random
import unittest
@@ -9,6 +13,7 @@ from machine_image_manager import MachineImageManager
class MockLabel(object):
+ """Class for generating a mock Label."""
def __init__(self, name, remotes=None):
self.name = name
@@ -16,18 +21,21 @@ class MockLabel(object):
def __hash__(self):
"""Provide hash function for label.
- This is required because Label object is used inside a dict as key.
- """
+
+ This is required because Label object is used inside a dict as key.
+ """
return hash(self.name)
def __eq__(self, other):
"""Provide eq function for label.
- This is required because Label object is used inside a dict as key.
- """
+
+ This is required because Label object is used inside a dict as key.
+ """
return isinstance(other, MockLabel) and other.name == self.name
class MockDut(object):
+ """Class for creating a mock Device-Under-Test (DUT)."""
def __init__(self, name, label=None):
self.name = name
@@ -35,6 +43,7 @@ class MockDut(object):
class MachineImageManagerTester(unittest.TestCase):
+ """Class for testing MachineImageManager."""
def gen_duts_by_name(self, *names):
duts = []
@@ -45,7 +54,7 @@ class MachineImageManagerTester(unittest.TestCase):
def print_matrix(self, matrix):
for r in matrix:
for v in r:
- print '{} '.format('.' if v == ' ' else v),
+ print('{} '.format('.' if v == ' ' else v)),
print('')
def create_labels_and_duts_from_pattern(self, pattern):
@@ -66,8 +75,8 @@ class MachineImageManagerTester(unittest.TestCase):
for j, v in enumerate(s.split()):
self.assertTrue(v == '.' and matrix[i][j] == ' ' or v == matrix[i][j])
- def pattern_based_test(self, input, output):
- labels, duts = self.create_labels_and_duts_from_pattern(input)
+ def pattern_based_test(self, inp, output):
+ labels, duts = self.create_labels_and_duts_from_pattern(inp)
mim = MachineImageManager(labels, duts)
self.assertTrue(mim.compute_initial_allocation())
self.check_matrix_against_pattern(mim.matrix_, output)
@@ -184,35 +193,35 @@ class MachineImageManagerTester(unittest.TestCase):
self.assertTrue(mim.compute_initial_allocation())
def test_10x10_fully_random(self):
- input = ['X . . . X X . X X .', 'X X . X . X . X X .',
- 'X X X . . X . X . X', 'X . X X . . X X . X',
- 'X X X X . . . X . .', 'X X . X . X . . X .',
- '. X . X . X X X . .', '. X . X X . X X . .',
- 'X X . . . X X X . .', '. X X X X . . . . X']
+ inp = ['X . . . X X . X X .', 'X X . X . X . X X .',
+ 'X X X . . X . X . X', 'X . X X . . X X . X',
+ 'X X X X . . . X . .', 'X X . X . X . . X .',
+ '. X . X . X X X . .', '. X . X X . X X . .',
+ 'X X . . . X X X . .', '. X X X X . . . . X']
output = ['X Y . . X X . X X .', 'X X Y X . X . X X .',
'X X X Y . X . X . X', 'X . X X Y . X X . X',
'X X X X . Y . X . .', 'X X . X . X Y . X .',
'Y X . X . X X X . .', '. X . X X . X X Y .',
'X X . . . X X X . Y', '. X X X X . . Y . X']
- self.pattern_based_test(input, output)
+ self.pattern_based_test(inp, output)
def test_10x10_fully_random2(self):
- input = ['X . X . . X . X X X', 'X X X X X X . . X .',
- 'X . X X X X X . . X', 'X X X . X . X X . .',
- '. X . X . X X X X X', 'X X X X X X X . . X',
- 'X . X X X X X . . X', 'X X X . X X X X . .',
- 'X X X . . . X X X X', '. X X . X X X . X X']
+ inp = ['X . X . . X . X X X', 'X X X X X X . . X .',
+ 'X . X X X X X . . X', 'X X X . X . X X . .',
+ '. X . X . X X X X X', 'X X X X X X X . . X',
+ 'X . X X X X X . . X', 'X X X . X X X X . .',
+ 'X X X . . . X X X X', '. X X . X X X . X X']
output = ['X . X Y . X . X X X', 'X X X X X X Y . X .',
'X Y X X X X X . . X', 'X X X . X Y X X . .',
'. X Y X . X X X X X', 'X X X X X X X Y . X',
'X . X X X X X . Y X', 'X X X . X X X X . Y',
'X X X . Y . X X X X', 'Y X X . X X X . X X']
- self.pattern_based_test(input, output)
+ self.pattern_based_test(inp, output)
def test_3x4_with_allocation(self):
- input = ['X X . .', '. . X .', 'X . X .']
+ inp = ['X X . .', '. . X .', 'X . X .']
output = ['X X Y .', 'Y . X .', 'X Y X .']
- mim = self.pattern_based_test(input, output)
+ mim = self.pattern_based_test(inp, output)
self.assertTrue(mim.allocate(mim.duts_[2]) == mim.labels_[0])
self.assertTrue(mim.allocate(mim.duts_[3]) == mim.labels_[2])
self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[1])
@@ -227,8 +236,8 @@ class MachineImageManagerTester(unittest.TestCase):
self.assertTrue(mim.label_duts_[0] == [2, 3])
self.assertTrue(mim.label_duts_[1] == [0, 3, 1])
self.assertTrue(mim.label_duts_[2] == [3, 1])
- self.assertTrue(mim.allocate_log_ == [(0, 2), (2, 3), (1, 0), (2, 1), (
- 1, 3), (0, 3), (1, 1)])
+ self.assertTrue(mim.allocate_log_ == [(0, 2), (2, 3), (1, 0), (2, 1),
+ (1, 3), (0, 3), (1, 1)])
def test_cornercase_1(self):
"""This corner case is brought up by Caroline.
@@ -264,12 +273,11 @@ class MachineImageManagerTester(unittest.TestCase):
l1 Y X X
l2 Y X X
-
"""
- input = ['. X X', '. X X', '. X X']
+ inp = ['. X X', '. X X', '. X X']
output = ['Y X X', 'Y X X', 'Y X X']
- mim = self.pattern_based_test(input, output)
+ mim = self.pattern_based_test(inp, output)
self.assertTrue(mim.allocate(mim.duts_[1]) is None)
self.assertTrue(mim.allocate(mim.duts_[2]) is None)
self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[0])