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
|
|
|
|