|
1
|
|
|
from nose.tools import assert_equal |
|
2
|
|
|
from numpy.testing import assert_array_equal |
|
3
|
|
|
|
|
4
|
|
|
from smartdispatch.queue import Queue |
|
5
|
|
|
from smartdispatch import get_available_queues |
|
6
|
|
|
import smartdispatch |
|
7
|
|
|
|
|
8
|
|
|
import os |
|
9
|
|
|
import unittest |
|
10
|
|
|
|
|
11
|
|
|
|
|
12
|
|
|
class TestQueue(unittest.TestCase): |
|
13
|
|
|
def setUp(self): |
|
14
|
|
|
self.cluster_name = "skynet" |
|
15
|
|
|
self.name = "9000@hal" |
|
16
|
|
|
self.walltime = "10:00" |
|
17
|
|
|
self.cores = 42 |
|
18
|
|
|
self.gpus = 42 |
|
19
|
|
|
self.mem_per_node = 32 |
|
20
|
|
|
self.modules = ["cuda", "python"] |
|
21
|
|
|
|
|
22
|
|
|
smartdispatch_dir, _ = os.path.split(smartdispatch.__file__) |
|
23
|
|
|
config_dir = os.path.join(smartdispatch_dir, 'config') |
|
24
|
|
|
self.known_clusters = [os.path.splitext(config_file)[0] for config_file in os.listdir(config_dir)] |
|
25
|
|
|
|
|
26
|
|
|
def test_constructor(self): |
|
27
|
|
|
queue = Queue(self.name, self.cluster_name, self.walltime, self.cores, self.gpus, self.mem_per_node, self.modules) |
|
28
|
|
|
assert_equal(queue.name, self.name) |
|
29
|
|
|
assert_equal(queue.cluster_name, self.cluster_name) |
|
30
|
|
|
assert_equal(queue.walltime, self.walltime) |
|
31
|
|
|
assert_equal(queue.nb_cores_per_node, self.cores) |
|
32
|
|
|
assert_equal(queue.nb_gpus_per_node, self.gpus) |
|
33
|
|
|
assert_equal(queue.mem_per_node, self.mem_per_node) |
|
34
|
|
|
assert_array_equal(queue.modules, self.modules) |
|
35
|
|
|
|
|
36
|
|
|
# Test with missing information but referring to a known queue. |
|
37
|
|
|
for cluster_name in self.known_clusters: |
|
38
|
|
|
for queue_name, queue_infos in get_available_queues(cluster_name).items(): |
|
39
|
|
|
queue = Queue(queue_name, cluster_name) |
|
40
|
|
|
assert_equal(queue.name, queue_name) |
|
41
|
|
|
assert_equal(queue.cluster_name, cluster_name) |
|
42
|
|
|
assert_equal(queue.walltime, queue_infos['max_walltime']) |
|
43
|
|
|
assert_equal(queue.nb_cores_per_node, queue_infos['cores']) |
|
44
|
|
|
assert_equal(queue.nb_gpus_per_node, queue_infos.get('gpus', 0)) |
|
45
|
|
|
assert_equal(queue.mem_per_node, queue_infos['ram']) |
|
46
|
|
|
assert_array_equal(queue.modules, queue_infos.get('modules', [])) |
|
47
|
|
|
|
|
48
|
|
|
# Make sure it is not overwriting parameters if referring to a known queue. |
|
49
|
|
|
queue = Queue(queue_name, cluster_name, self.walltime, self.cores, self.gpus, self.mem_per_node, self.modules) |
|
50
|
|
|
assert_equal(queue.name, queue_name) |
|
51
|
|
|
assert_equal(queue.cluster_name, cluster_name) |
|
52
|
|
|
assert_equal(queue.walltime, self.walltime) |
|
53
|
|
|
assert_equal(queue.nb_cores_per_node, self.cores) |
|
54
|
|
|
assert_equal(queue.nb_gpus_per_node, self.gpus) |
|
55
|
|
|
assert_equal(queue.mem_per_node, self.mem_per_node) |
|
56
|
|
|
assert_array_equal(queue.modules, queue_infos.get('modules', []) + self.modules) |
|
57
|
|
|
|