Show More
@@ -0,0 +1,179 b'' | |||
|
1 | """Tests for launchers | |
|
2 | ||
|
3 | Doesn't actually start any subprocesses, but goes through the motions of constructing | |
|
4 | objects, which should test basic config. | |
|
5 | ||
|
6 | Authors: | |
|
7 | ||
|
8 | * Min RK | |
|
9 | """ | |
|
10 | ||
|
11 | #------------------------------------------------------------------------------- | |
|
12 | # Copyright (C) 2013 The IPython Development Team | |
|
13 | # | |
|
14 | # Distributed under the terms of the BSD License. The full license is in | |
|
15 | # the file COPYING, distributed as part of this software. | |
|
16 | #------------------------------------------------------------------------------- | |
|
17 | ||
|
18 | #------------------------------------------------------------------------------- | |
|
19 | # Imports | |
|
20 | #------------------------------------------------------------------------------- | |
|
21 | ||
|
22 | import logging | |
|
23 | import os | |
|
24 | import shutil | |
|
25 | import sys | |
|
26 | import tempfile | |
|
27 | ||
|
28 | from unittest import TestCase | |
|
29 | ||
|
30 | from nose import SkipTest | |
|
31 | ||
|
32 | from IPython.config import Config | |
|
33 | ||
|
34 | from IPython.parallel.apps import launcher | |
|
35 | ||
|
36 | from IPython.testing import decorators as dec | |
|
37 | ||
|
38 | ||
|
39 | #------------------------------------------------------------------------------- | |
|
40 | # TestCase Mixins | |
|
41 | #------------------------------------------------------------------------------- | |
|
42 | ||
|
43 | class LauncherTest: | |
|
44 | """Mixin for generic launcher tests""" | |
|
45 | def setUp(self): | |
|
46 | self.profile_dir = tempfile.mkdtemp(prefix="profile_") | |
|
47 | ||
|
48 | def tearDown(self): | |
|
49 | shutil.rmtree(self.profile_dir) | |
|
50 | ||
|
51 | @property | |
|
52 | def config(self): | |
|
53 | return Config() | |
|
54 | ||
|
55 | def build_launcher(self, **kwargs): | |
|
56 | kw = dict( | |
|
57 | work_dir=self.profile_dir, | |
|
58 | profile_dir=self.profile_dir, | |
|
59 | config=self.config, | |
|
60 | cluster_id='', | |
|
61 | log=logging.getLogger(), | |
|
62 | ) | |
|
63 | kw.update(kwargs) | |
|
64 | return self.launcher_class(**kw) | |
|
65 | ||
|
66 | def test_profile_dir_arg(self): | |
|
67 | launcher = self.build_launcher() | |
|
68 | self.assertTrue("--profile-dir" in launcher.cluster_args) | |
|
69 | self.assertTrue(self.profile_dir in launcher.cluster_args) | |
|
70 | ||
|
71 | def test_cluster_id_arg(self): | |
|
72 | launcher = self.build_launcher() | |
|
73 | self.assertTrue("--cluster-id" in launcher.cluster_args) | |
|
74 | idx = launcher.cluster_args.index("--cluster-id") | |
|
75 | self.assertEqual(launcher.cluster_args[idx+1], '') | |
|
76 | launcher.cluster_id = 'foo' | |
|
77 | self.assertEqual(launcher.cluster_args[idx+1], 'foo') | |
|
78 | ||
|
79 | def test_args(self): | |
|
80 | launcher = self.build_launcher() | |
|
81 | for arg in launcher.args: | |
|
82 | self.assertTrue(isinstance(arg, basestring), str(arg)) | |
|
83 | ||
|
84 | class BatchTest: | |
|
85 | """Tests for batch-system launchers (LSF, SGE, PBS)""" | |
|
86 | def test_batch_template(self): | |
|
87 | launcher = self.build_launcher() | |
|
88 | batch_file = os.path.join(self.profile_dir, launcher.batch_file_name) | |
|
89 | self.assertEqual(launcher.batch_file, batch_file) | |
|
90 | launcher.write_batch_script(1) | |
|
91 | self.assertTrue(os.path.isfile(batch_file)) | |
|
92 | ||
|
93 | class SSHTest: | |
|
94 | """Tests for SSH launchers""" | |
|
95 | def test_cluster_id_arg(self): | |
|
96 | raise SkipTest("SSH Launchers don't support cluster ID") | |
|
97 | ||
|
98 | def test_remote_profile_dir(self): | |
|
99 | cfg = Config() | |
|
100 | launcher_cfg = getattr(cfg, self.launcher_class.__name__) | |
|
101 | launcher_cfg.remote_profile_dir = "foo" | |
|
102 | launcher = self.build_launcher(config=cfg) | |
|
103 | self.assertEqual(launcher.remote_profile_dir, "foo") | |
|
104 | ||
|
105 | def test_remote_profile_dir_default(self): | |
|
106 | launcher = self.build_launcher() | |
|
107 | self.assertEqual(launcher.remote_profile_dir, self.profile_dir) | |
|
108 | ||
|
109 | #------------------------------------------------------------------------------- | |
|
110 | # Controller Launcher Tests | |
|
111 | #------------------------------------------------------------------------------- | |
|
112 | ||
|
113 | class ControllerLauncherTest(LauncherTest): | |
|
114 | """Tests for Controller Launchers""" | |
|
115 | pass | |
|
116 | ||
|
117 | class TestLocalControllerLauncher(ControllerLauncherTest, TestCase): | |
|
118 | launcher_class = launcher.LocalControllerLauncher | |
|
119 | ||
|
120 | class TestMPIControllerLauncher(ControllerLauncherTest, TestCase): | |
|
121 | launcher_class = launcher.MPIControllerLauncher | |
|
122 | ||
|
123 | class TestPBSControllerLauncher(BatchTest, ControllerLauncherTest, TestCase): | |
|
124 | launcher_class = launcher.PBSControllerLauncher | |
|
125 | ||
|
126 | class TestSGEControllerLauncher(BatchTest, ControllerLauncherTest, TestCase): | |
|
127 | launcher_class = launcher.SGEControllerLauncher | |
|
128 | ||
|
129 | class TestLSFControllerLauncher(BatchTest, ControllerLauncherTest, TestCase): | |
|
130 | launcher_class = launcher.LSFControllerLauncher | |
|
131 | ||
|
132 | class TestSSHControllerLauncher(SSHTest, ControllerLauncherTest, TestCase): | |
|
133 | launcher_class = launcher.SSHControllerLauncher | |
|
134 | ||
|
135 | #------------------------------------------------------------------------------- | |
|
136 | # Engine Set Launcher Tests | |
|
137 | #------------------------------------------------------------------------------- | |
|
138 | ||
|
139 | class EngineSetLauncherTest(LauncherTest): | |
|
140 | """Tests for EngineSet launchers""" | |
|
141 | pass | |
|
142 | ||
|
143 | class TestLocalEngineSetLauncher(EngineSetLauncherTest, TestCase): | |
|
144 | launcher_class = launcher.LocalEngineSetLauncher | |
|
145 | ||
|
146 | class TestMPIEngineSetLauncher(EngineSetLauncherTest, TestCase): | |
|
147 | launcher_class = launcher.MPIEngineSetLauncher | |
|
148 | ||
|
149 | class TestPBSEngineSetLauncher(BatchTest, EngineSetLauncherTest, TestCase): | |
|
150 | launcher_class = launcher.PBSEngineSetLauncher | |
|
151 | ||
|
152 | class TestSGEEngineSetLauncher(BatchTest, EngineSetLauncherTest, TestCase): | |
|
153 | launcher_class = launcher.SGEEngineSetLauncher | |
|
154 | ||
|
155 | class TestLSFEngineSetLauncher(BatchTest, EngineSetLauncherTest, TestCase): | |
|
156 | launcher_class = launcher.LSFEngineSetLauncher | |
|
157 | ||
|
158 | class TestSSHEngineSetLauncher(EngineSetLauncherTest, TestCase): | |
|
159 | launcher_class = launcher.SSHEngineSetLauncher | |
|
160 | ||
|
161 | def test_cluster_id_arg(self): | |
|
162 | raise SkipTest("SSH Launchers don't support cluster ID") | |
|
163 | ||
|
164 | class TestSSHProxyEngineSetLauncher(SSHTest, LauncherTest, TestCase): | |
|
165 | launcher_class = launcher.SSHProxyEngineSetLauncher | |
|
166 | ||
|
167 | class TestSSHEngineLauncher(SSHTest, LauncherTest, TestCase): | |
|
168 | launcher_class = launcher.SSHEngineLauncher | |
|
169 | ||
|
170 | #------------------------------------------------------------------------------- | |
|
171 | # Windows Launcher Tests | |
|
172 | #------------------------------------------------------------------------------- | |
|
173 | ||
|
174 | if sys.platform.startswith("win"): | |
|
175 | class TestWinHPCControllerLauncher(ControllerLauncherTest, TestCase): | |
|
176 | launcher_class = launcher.WindowsHPCControllerLauncher | |
|
177 | ||
|
178 | class TestWinHPCEngineSetLauncher(EngineSetLauncherTest, TestCase): | |
|
179 | launcher_class = launcher.WindowsHPCEngineSetLauncher |
@@ -643,7 +643,7 b' class SSHLauncher(LocalProcessLauncher):' | |||
|
643 | 643 | self.process.stdin.write('~.') |
|
644 | 644 | self.process.stdin.flush() |
|
645 | 645 | |
|
646 | class SSHClusterLauncher(SSHLauncher): | |
|
646 | class SSHClusterLauncher(SSHLauncher, ClusterAppMixin): | |
|
647 | 647 | |
|
648 | 648 | remote_profile_dir = Unicode('', config=True, |
|
649 | 649 | help="""The remote profile_dir to use. |
@@ -1332,6 +1332,7 b' ssh_launchers = [' | |||
|
1332 | 1332 | SSHControllerLauncher, |
|
1333 | 1333 | SSHEngineLauncher, |
|
1334 | 1334 | SSHEngineSetLauncher, |
|
1335 | SSHProxyEngineSetLauncher, | |
|
1335 | 1336 | ] |
|
1336 | 1337 | winhpc_launchers = [ |
|
1337 | 1338 | WindowsHPCLauncher, |
General Comments 0
You need to be logged in to leave comments.
Login now