##// END OF EJS Templates
Merge pull request #3351 from minrk/sshproxy...
Matthias Bussonnier -
r10813:7f805f26 merge
parent child Browse files
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