def setUp(self): self.orig_dir = os.getcwd() os.chdir(TestCase.directory) try: # Force use of fake 'ssh' and 'scp'. ssh = ('python', os.path.join(_TST_ROOT, 'ssh.py'), _DMZ_ROOT) scp = ('python', os.path.join(_TST_ROOT, 'scp.py'), _DMZ_ROOT) self.orig_ssh = protocol.configure_ssh(ssh) self.orig_scp = protocol.configure_scp(scp) # Avoid lots of polling log entries. if logging.getLogger().getEffectiveLevel() < logging.DEBUG: logging.getLogger().setLevel(logging.DEBUG) # Start RJE server. hostname = socket.gethostname() self.proc = start_server(hostname) # Create NAS_Allocator referring to server. logging.debug('create allocator') self.allocator = NAS_Allocator() parser = ConfigParser.ConfigParser() section = self.allocator.name parser.add_section(section) parser.set(section, 'dmz_host', hostname) parser.set(section, 'server_host', hostname) self.allocator.configure(parser) # Add allocator to RAM. RAM.add_allocator(self.allocator) except Exception: os.chdir(self.orig_dir) raise
def setUp(self): self.orig_dir = os.getcwd() os.chdir(TestCase.directory) try: # Force use of fake 'ssh' and 'scp'. ssh = ("python", os.path.join(_TST_ROOT, "ssh.py"), _DMZ_ROOT) scp = ("python", os.path.join(_TST_ROOT, "scp.py"), _DMZ_ROOT) self.orig_ssh = protocol.configure_ssh(ssh) self.orig_scp = protocol.configure_scp(scp) # Avoid lots of polling log entries. if logging.getLogger().getEffectiveLevel() < logging.DEBUG: logging.getLogger().setLevel(logging.DEBUG) # Start RJE server. hostname = socket.gethostname() self.proc = start_server(hostname) # Create NAS_Allocator referring to server. logging.debug("create allocator") self.allocator = NAS_Allocator() parser = ConfigParser.ConfigParser() section = self.allocator.name parser.add_section(section) parser.set(section, "dmz_host", hostname) parser.set(section, "server_host", hostname) self.allocator.configure(parser) # Add allocator to RAM. RAM.add_allocator(self.allocator) except Exception: os.chdir(self.orig_dir) raise
print 'Job Complete ...' # ----------------------------- # --- Execute the component --- # ----------------------------- super(MeshComp, self).execute() # --- Copy files to local directories shutil.copy2( Path('OpenMDAO') + '/patran.out', Path('Patran') + '\Config' + self.config) shutil.copy2( Path('OpenMDAO') + '/Config' + self.config + '.cub', Path('Cubit')) if __name__ == "__main__": enable_console() logging.getLogger().setLevel(logging.DEBUG) # --- Create 4 allocators (redundancy for reliability) adding each to the manager --- allocator1 = NAS_Allocator(name='PFE20_DMZ1', dmz_host='dmzfs1.nas.nasa.gov', server_host='pfe20') RAM.add_allocator(allocator1) Remote_Mesh_Comp = MeshComp() Remote_Mesh_Comp.run()
class TestCase(unittest.TestCase): # Need to be in this directory or there are issues with egg loading. directory = pkg_resources.resource_filename("nas_access", "test") def setUp(self): self.orig_dir = os.getcwd() os.chdir(TestCase.directory) try: # Force use of fake 'ssh' and 'scp'. ssh = ("python", os.path.join(_TST_ROOT, "ssh.py"), _DMZ_ROOT) scp = ("python", os.path.join(_TST_ROOT, "scp.py"), _DMZ_ROOT) self.orig_ssh = protocol.configure_ssh(ssh) self.orig_scp = protocol.configure_scp(scp) # Avoid lots of polling log entries. if logging.getLogger().getEffectiveLevel() < logging.DEBUG: logging.getLogger().setLevel(logging.DEBUG) # Start RJE server. hostname = socket.gethostname() self.proc = start_server(hostname) # Create NAS_Allocator referring to server. logging.debug("create allocator") self.allocator = NAS_Allocator() parser = ConfigParser.ConfigParser() section = self.allocator.name parser.add_section(section) parser.set(section, "dmz_host", hostname) parser.set(section, "server_host", hostname) self.allocator.configure(parser) # Add allocator to RAM. RAM.add_allocator(self.allocator) except Exception: os.chdir(self.orig_dir) raise def tearDown(self): try: logging.debug("remove") RAM.remove_allocator(self.allocator.name) if self.proc is not None: logging.debug("shutdown") self.allocator.shutdown() self.proc.terminate() else: self.allocator.invalidate() # Restore 'ssh' and 'scp' configuration. protocol.configure_ssh(self.orig_ssh) protocol.configure_scp(self.orig_scp) time.sleep(2) for name in (_RJE_ROOT, _DMZ_ROOT): if os.path.exists(name): shutil.rmtree(name) finally: os.chdir(self.orig_dir) def test_allocator(self): logging.debug("") logging.debug("test_allocator") # Since we're faking it with a remote LocalHost, we should match. local_servers = RAM.max_servers(dict(allocator="LocalHost")) max_servers = RAM.max_servers(dict(allocator=self.allocator.name)) self.assertEqual(max_servers, local_servers) max_servers = RAM.max_servers(dict(allocator=self.allocator.name, localhost=True)) # Contradictory! self.assertEqual(max_servers, 0) server = self.allocator.deploy("test_server", {}, {}) try: self.assertEqual(server.name, "NAS_Allocator/test_server") self.assertEqual(server.host, socket.gethostname()) self.assertTrue(server.pid > 0) retval = server.echo(123, "twisty", "narrow", "passages") self.assertEqual(retval, (123, "twisty", "narrow", "passages")) self.assertTrue(server.isdir(".")) self.assertEqual(sorted(server.listdir(".")), ["openmdao_log.txt", "stderr", "stdout"]) finally: self.allocator.release(server) def test_case_eval(self): logging.debug("") logging.debug("test_case_eval") # Run a fake job in style of CaseIteratorDriver. logging.debug("allocate server") server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) echo = set_as_top(Echo(1)) egg_info = echo.save_to_egg("EchoTest", "1", need_requirements=False) egg_filename = egg_info[0] try: logging.debug("transfer egg") filexfer(None, egg_filename, server, egg_filename, "b") logging.debug("load model") tlo = server.load_model(egg_filename) logging.debug("set input") tlo.set("inp_0", 42) logging.debug("run") tlo.run() logging.debug("get output") output = tlo.get("out_0") self.assertEqual(output, 42) finally: os.remove(egg_filename) logging.debug("release") RAM.release(server) def test_extcode(self): logging.debug("") logging.debug("test_extcode") # Run a fake job in style of ExternalCode component. logging.debug("allocate server") server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: with open("junk.dat", "w") as out: out.write("just some junk") filename = "inputs.zip" logging.debug("pack inputs") pfiles, pbytes = pack_zipfile(("junk.dat",), filename, logging.getLogger()) os.remove("junk.dat") logging.debug("transfer inputs") filexfer(None, filename, server, filename, "b") logging.debug("unpack inputs") ufiles, ubytes = server.unpack_zipfile(filename) logging.debug("remove inputs") os.remove(filename) server.remove(filename) logging.debug("execute command") if sys.platform == "win32": remote_command = "cmd" args = ("/c", "echo", "Hello", "World!") else: remote_command = "echo" args = ("Hello", "World!") return_code, error_msg = server.execute_command( dict(job_name="Testing", remote_command=remote_command, args=args, output_path="echo.out") ) logging.debug("pack outputs") filename = "outputs.zip" pfiles, pbytes = server.pack_zipfile(("echo.out", "junk.dat"), filename) logging.debug("transfer outputs") filexfer(server, filename, None, filename, "b") logging.debug("unpack outputs") ufiles, ubytes = unpack_zipfile(filename) logging.debug("remove outputs") os.remove(filename) server.remove(filename) finally: logging.debug("release") RAM.release(server) self.assertEqual(return_code, 0) self.assertEqual(error_msg, "") self.assertTrue(os.path.exists("echo.out")) with open("echo.out", "rU") as out: data = out.read() os.remove("echo.out") self.assertEqual(data, "Hello World!\n") self.assertTrue(os.path.exists("junk.dat")) with open("junk.dat", "rU") as out: data = out.read() os.remove("junk.dat") self.assertEqual(data, "just some junk") def test_errors(self): logging.debug("") logging.debug("test_errors") logging.debug("allocate server") server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: logging.debug("execute bad command") code = "server.execute_command(dict(remote_command='no-such-command'))" if sys.platform == "win32": msg = "WindowsError: [Error 2] The system cannot find the file specified" else: msg = "OSError: [Errno 2] No such file or directory" try: server.execute_command(dict(remote_command="no-such-command")) except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail("%s not in %s" % (msg, exc_msg)) else: self.fail("Expecting protocol.RemoteError") logging.debug("open bad file") msg = "Can\\'t open \\'../../illegal-access\\', not within root" msg = "RuntimeError: %s" % msg try: server.open("../../illegal-access", "r") except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail("%s not in %s" % (msg, exc_msg)) else: self.fail("Expecting protocol.RemoteError") logging.debug("open missing file") msg = "[Errno 2] No such file or directory: \\'no-such-file\\'" msg = "IOError: %s" % msg try: server.open("no-such-file", "r") except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail("%s not in %s" % (msg, exc_msg)) else: self.fail("Expecting protocol.RemoteError") finally: logging.debug("release") RAM.release(server) # Test for exited or never started server. logging.debug("dead server") self.proc.terminate() self.proc = None time.sleep(2) hostname = socket.gethostname() if sys.platform == "win32": # Server doesn't clean up. root = protocol._server_root(hostname) mapped_root = os.path.join(_DMZ_ROOT, protocol._map_dir(root)) for name in glob.glob("%s*" % mapped_root): os.remove(name) code = "NAS_Allocator(dmz_host=hostname, server_host=hostname)" assert_raises( self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server root 'RJE-%s='" " on '%s' not found" % (hostname, hostname), ) # Test for missing heartbeat. logging.debug("no heartbeat") with open(os.path.join(_DMZ_ROOT, "RJE-%s=" % hostname), "w") as out: out.write("empty\n") try: NAS_Allocator(dmz_host=hostname, server_host=hostname) except RuntimeError as exc: msg = "IOError: [Errno 2] No such file or directory:" " 'RJE-%s=heartbeat'\n" % hostname logging.debug(str(exc)) self.assertTrue(str(exc).endswith(msg)) else: self.fail("Expected RuntimeError") # Test for stale heartbeat. logging.debug("stale heartbeat") protocol.server_heartbeat(hostname, 1, logging.getLogger()) time.sleep(5) assert_raises( self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server heartbeat" " hasn't been updated in 0:00:0", )
class TestCase(unittest.TestCase): # Need to be in this directory or there are issues with egg loading. directory = pkg_resources.resource_filename('nas_access', 'test') def setUp(self): self.orig_dir = os.getcwd() os.chdir(TestCase.directory) try: # Force use of fake 'ssh' and 'scp'. ssh = ('python', os.path.join(_TST_ROOT, 'ssh.py'), _DMZ_ROOT) scp = ('python', os.path.join(_TST_ROOT, 'scp.py'), _DMZ_ROOT) self.orig_ssh = protocol.configure_ssh(ssh) self.orig_scp = protocol.configure_scp(scp) # Avoid lots of polling log entries. if logging.getLogger().getEffectiveLevel() < logging.DEBUG: logging.getLogger().setLevel(logging.DEBUG) # Start RJE server. hostname = socket.gethostname() self.proc = start_server(hostname) # Create NAS_Allocator referring to server. logging.debug('create allocator') self.allocator = NAS_Allocator() parser = ConfigParser.ConfigParser() section = self.allocator.name parser.add_section(section) parser.set(section, 'dmz_host', hostname) parser.set(section, 'server_host', hostname) self.allocator.configure(parser) # Add allocator to RAM. RAM.add_allocator(self.allocator) except Exception: os.chdir(self.orig_dir) raise def tearDown(self): try: logging.debug('remove') RAM.remove_allocator(self.allocator.name) if self.proc is not None: logging.debug('shutdown') self.allocator.shutdown() self.proc.terminate() else: self.allocator.invalidate() # Restore 'ssh' and 'scp' configuration. protocol.configure_ssh(self.orig_ssh) protocol.configure_scp(self.orig_scp) time.sleep(2) for name in (_RJE_ROOT, _DMZ_ROOT): if os.path.exists(name): shutil.rmtree(name) finally: os.chdir(self.orig_dir) def test_allocator(self): logging.debug('') logging.debug('test_allocator') # Since we're faking it with a remote LocalHost, we should match. local_servers = RAM.max_servers(dict(allocator='LocalHost')) max_servers = RAM.max_servers(dict(allocator=self.allocator.name)) self.assertEqual(max_servers, local_servers) max_servers = RAM.max_servers(dict(allocator=self.allocator.name, localhost=True)) # Contradictory! self.assertEqual(max_servers, 0) server = self.allocator.deploy('test_server', {}, {}) try: self.assertEqual(server.name, 'NAS_Allocator/test_server') self.assertEqual(server.host, socket.gethostname()) self.assertTrue(server.pid > 0) retval = server.echo(123, 'twisty', 'narrow', 'passages') self.assertEqual(retval, (123, 'twisty', 'narrow', 'passages')) self.assertTrue(server.isdir('.')) self.assertEqual(sorted(server.listdir('.')), ['openmdao_log.txt', 'stderr', 'stdout']) finally: self.allocator.release(server) def test_case_eval(self): logging.debug('') logging.debug('test_case_eval') # Run a fake job in style of CaseIteratorDriver. logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) echo = set_as_top(Echo(1)) egg_info = echo.save_to_egg('EchoTest', '1', need_requirements=False) egg_filename = egg_info[0] try: logging.debug('transfer egg') filexfer(None, egg_filename, server, egg_filename, 'b') logging.debug('load model') tlo = server.load_model(egg_filename) logging.debug('set input') tlo.set('inp_0', 42) logging.debug('run') tlo.run() logging.debug('get output') output = tlo.get('out_0') self.assertEqual(output, 42) finally: os.remove(egg_filename) logging.debug('release') RAM.release(server) def test_extcode(self): logging.debug('') logging.debug('test_extcode') # Run a fake job in style of ExternalCode component. logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: with open('junk.dat', 'w') as out: out.write('just some junk') filename = 'inputs.zip' logging.debug('pack inputs') pfiles, pbytes = pack_zipfile(('junk.dat',), filename, logging.getLogger()) os.remove('junk.dat') logging.debug('transfer inputs') filexfer(None, filename, server, filename, 'b') logging.debug('unpack inputs') ufiles, ubytes = server.unpack_zipfile(filename) logging.debug('remove inputs') os.remove(filename) server.remove(filename) logging.debug('execute command') if sys.platform == 'win32': remote_command = 'cmd' args = ('/c', 'echo', 'Hello', 'World!') else: remote_command = 'echo' args = ('Hello', 'World!') return_code, error_msg = \ server.execute_command(dict(job_name='Testing', remote_command=remote_command, args=args, output_path='echo.out')) logging.debug('pack outputs') filename = 'outputs.zip' pfiles, pbytes = server.pack_zipfile(('echo.out', 'junk.dat'), filename) logging.debug('transfer outputs') filexfer(server, filename, None, filename, 'b') logging.debug('unpack outputs') ufiles, ubytes = unpack_zipfile(filename) logging.debug('remove outputs') os.remove(filename) server.remove(filename) finally: logging.debug('release') RAM.release(server) self.assertEqual(return_code, 0) self.assertEqual(error_msg, '') self.assertTrue(os.path.exists('echo.out')) with open('echo.out', 'rU') as out: data = out.read() os.remove('echo.out') self.assertEqual(data, 'Hello World!\n') self.assertTrue(os.path.exists('junk.dat')) with open('junk.dat', 'rU') as out: data = out.read() os.remove('junk.dat') self.assertEqual(data, 'just some junk') def test_errors(self): logging.debug('') logging.debug('test_errors') logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: logging.debug('execute bad command') code = "server.execute_command(dict(remote_command='no-such-command'))" if sys.platform == 'win32': msg = "WindowsError('[Error 2] The system cannot find the file specified')" else: msg = "OSError('[Errno 2] No such file or directory')" assert_raises(self, code, globals(), locals(), protocol.RemoteError, msg) logging.debug('open bad file') msg = "Can't open '../../illegal-access', not within root" msg = 'RuntimeError("%s' % msg assert_raises(self, "server.open('../../illegal-access', 'r')", globals(), locals(), protocol.RemoteError, msg) logging.debug('open missing file') msg = "[Errno 2] No such file or directory: 'no-such-file'" msg = 'IOError("%s' % msg assert_raises(self, "server.open('no-such-file', 'r')", globals(), locals(), protocol.RemoteError, msg) finally: logging.debug('release') RAM.release(server) # Test for exited or never started server. logging.debug('dead server') self.proc.terminate() self.proc = None time.sleep(2) hostname = socket.gethostname() if sys.platform == 'win32': # Server doesn't clean up. root = protocol._server_root(hostname) mapped_root = os.path.join(_DMZ_ROOT, protocol._map_dir(root)) for name in glob.glob('%s*' % mapped_root): os.remove(name) code = 'NAS_Allocator(dmz_host=hostname, server_host=hostname)' assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server root 'RJE-%s='" " on '%s' not found" % (hostname, hostname)) # Test for missing heartbeat. logging.debug('no heartbeat') with open(os.path.join(_DMZ_ROOT, 'RJE-%s=' % hostname), 'w') as out: out.write('empty\n') try: NAS_Allocator(dmz_host=hostname, server_host=hostname) except RuntimeError as exc: msg = "IOError: [Errno 2] No such file or directory:" \ " 'RJE-%s=heartbeat'\n" % hostname logging.debug(str(exc)) self.assertTrue(str(exc).endswith(msg)) else: self.fail('Expected RuntimeError') # Test for stale heartbeat. logging.debug('stale heartbeat') protocol.server_heartbeat(hostname, 1, logging.getLogger()) time.sleep(5) assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server heartbeat" " hasn't been updated in 0:00:0")
class TestCase(unittest.TestCase): # Need to be in this directory or there are issues with egg loading. directory = pkg_resources.resource_filename('nas_access', 'test') def setUp(self): self.orig_dir = os.getcwd() os.chdir(TestCase.directory) try: # Force use of fake 'ssh' and 'scp'. ssh = ('python', os.path.join(_TST_ROOT, 'ssh.py'), _DMZ_ROOT) scp = ('python', os.path.join(_TST_ROOT, 'scp.py'), _DMZ_ROOT) self.orig_ssh = protocol.configure_ssh(ssh) self.orig_scp = protocol.configure_scp(scp) # Avoid lots of polling log entries. if logging.getLogger().getEffectiveLevel() < logging.DEBUG: logging.getLogger().setLevel(logging.DEBUG) # Start RJE server. hostname = socket.gethostname() self.proc = start_server(hostname) # Create NAS_Allocator referring to server. logging.debug('create allocator') self.allocator = NAS_Allocator() parser = ConfigParser.ConfigParser() section = self.allocator.name parser.add_section(section) parser.set(section, 'dmz_host', hostname) parser.set(section, 'server_host', hostname) self.allocator.configure(parser) # Add allocator to RAM. RAM.add_allocator(self.allocator) except Exception: os.chdir(self.orig_dir) raise def tearDown(self): try: logging.debug('remove') RAM.remove_allocator(self.allocator.name) if self.proc is not None: logging.debug('shutdown') self.allocator.shutdown() self.proc.terminate() else: self.allocator.invalidate() # Restore 'ssh' and 'scp' configuration. protocol.configure_ssh(self.orig_ssh) protocol.configure_scp(self.orig_scp) time.sleep(2) for name in (_RJE_ROOT, _DMZ_ROOT): if os.path.exists(name): shutil.rmtree(name) finally: os.chdir(self.orig_dir) def test_allocator(self): logging.debug('') logging.debug('test_allocator') # Since we're faking it with a remote LocalHost, we should match. local_servers = RAM.max_servers(dict(allocator='LocalHost')) max_servers = RAM.max_servers(dict(allocator=self.allocator.name)) self.assertEqual(max_servers, local_servers) max_servers = RAM.max_servers(dict(allocator=self.allocator.name, localhost=True)) # Contradictory! self.assertEqual(max_servers, 0) server = self.allocator.deploy('test_server', {}, {}) try: self.assertEqual(server.name, 'NAS_Allocator/test_server') self.assertEqual(server.host, socket.gethostname()) self.assertTrue(server.pid > 0) retval = server.echo(123, 'twisty', 'narrow', 'passages') self.assertEqual(retval, (123, 'twisty', 'narrow', 'passages')) self.assertTrue(server.isdir('.')) self.assertEqual(sorted(server.listdir('.')), ['openmdao_log.txt', 'stderr', 'stdout']) finally: self.allocator.release(server) def test_case_eval(self): logging.debug('') logging.debug('test_case_eval') # Run a fake job in style of CaseIteratorDriver. logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) echo = set_as_top(Echo(1)) egg_info = echo.save_to_egg('EchoTest', '1', need_requirements=False) egg_filename = egg_info[0] try: logging.debug('transfer egg') filexfer(None, egg_filename, server, egg_filename, 'b') logging.debug('load model') tlo = server.load_model(egg_filename) logging.debug('set input') tlo.set('inp_0', 42) logging.debug('run') tlo.run() logging.debug('get output') output = tlo.get('out_0') self.assertEqual(output, 42) finally: os.remove(egg_filename) logging.debug('release') RAM.release(server) def test_extcode(self): logging.debug('') logging.debug('test_extcode') # Run a fake job in style of ExternalCode component. logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: with open('junk.dat', 'w') as out: out.write('just some junk') filename = 'inputs.zip' logging.debug('pack inputs') pfiles, pbytes = pack_zipfile(('junk.dat',), filename, logging.getLogger()) os.remove('junk.dat') logging.debug('transfer inputs') filexfer(None, filename, server, filename, 'b') logging.debug('unpack inputs') ufiles, ubytes = server.unpack_zipfile(filename) logging.debug('remove inputs') os.remove(filename) server.remove(filename) logging.debug('execute command') if sys.platform == 'win32': remote_command = 'cmd' args = ('/c', 'echo', 'Hello', 'World!') else: remote_command = 'echo' args = ('Hello', 'World!') return_code, error_msg = \ server.execute_command(dict(job_name='Testing', remote_command=remote_command, args=args, output_path='echo.out')) logging.debug('pack outputs') filename = 'outputs.zip' pfiles, pbytes = server.pack_zipfile(('echo.out', 'junk.dat'), filename) logging.debug('transfer outputs') filexfer(server, filename, None, filename, 'b') logging.debug('unpack outputs') ufiles, ubytes = unpack_zipfile(filename) logging.debug('remove outputs') os.remove(filename) server.remove(filename) finally: logging.debug('release') RAM.release(server) self.assertEqual(return_code, 0) self.assertEqual(error_msg, '') self.assertTrue(os.path.exists('echo.out')) with open('echo.out', 'rU') as out: data = out.read() os.remove('echo.out') self.assertEqual(data, 'Hello World!\n') self.assertTrue(os.path.exists('junk.dat')) with open('junk.dat', 'rU') as out: data = out.read() os.remove('junk.dat') self.assertEqual(data, 'just some junk') def test_errors(self): logging.debug('') logging.debug('test_errors') logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: logging.debug('execute bad command') code = "server.execute_command(dict(remote_command='no-such-command'))" if sys.platform == 'win32': msg = "WindowsError: [Error 2] The system cannot find the file specified" else: msg = "OSError: [Errno 2] No such file or directory" try: server.execute_command(dict(remote_command='no-such-command')) except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') logging.debug('open bad file') msg = "Can\\'t open \\'../../illegal-access\\', not within root" msg = 'RuntimeError: %s' % msg try: server.open('../../illegal-access', 'r') except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') logging.debug('open missing file') msg = "[Errno 2] No such file or directory: \\'no-such-file\\'" msg = 'IOError: %s' % msg try: server.open('no-such-file', 'r') except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') finally: logging.debug('release') RAM.release(server) # Test for exited or never started server. logging.debug('dead server') self.proc.terminate() self.proc = None time.sleep(2) hostname = socket.gethostname() if sys.platform == 'win32': # Server doesn't clean up. root = protocol._server_root(hostname) mapped_root = os.path.join(_DMZ_ROOT, protocol._map_dir(root)) for name in glob.glob('%s*' % mapped_root): os.remove(name) code = 'NAS_Allocator(dmz_host=hostname, server_host=hostname)' assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server root 'RJE-%s='" " on '%s' not found" % (hostname, hostname)) # Test for missing heartbeat. logging.debug('no heartbeat') with open(os.path.join(_DMZ_ROOT, 'RJE-%s=' % hostname), 'w') as out: out.write('empty\n') try: NAS_Allocator(dmz_host=hostname, server_host=hostname) except RuntimeError as exc: msg = "IOError: [Errno 2] No such file or directory:" \ " 'RJE-%s=heartbeat'\n" % hostname logging.debug(str(exc)) self.assertTrue(str(exc).endswith(msg)) else: self.fail('Expected RuntimeError') # Test for stale heartbeat. logging.debug('stale heartbeat') protocol.server_heartbeat(hostname, 1, logging.getLogger()) time.sleep(5) assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server heartbeat" " hasn't been updated in 0:00:0")
def test_errors(self): logging.debug('') logging.debug('test_errors') logging.debug('allocate server') server, server_info = RAM.allocate(dict(allocator=self.allocator.name)) try: logging.debug('execute bad command') code = "server.execute_command(dict(remote_command='no-such-command'))" if sys.platform == 'win32': msg = "WindowsError: [Error 2] The system cannot find the file specified" else: msg = "OSError: [Errno 2] No such file or directory" try: server.execute_command(dict(remote_command='no-such-command')) except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') logging.debug('open bad file') msg = "Can\\'t open \\'../../illegal-access\\', not within root" msg = 'RuntimeError: %s' % msg try: server.open('../../illegal-access', 'r') except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') logging.debug('open missing file') msg = "[Errno 2] No such file or directory: \\'no-such-file\\'" msg = 'IOError: %s' % msg try: server.open('no-such-file', 'r') except protocol.RemoteError as exc: exc_msg = str(exc) if msg not in exc_msg: self.fail('%s not in %s' % (msg, exc_msg)) else: self.fail('Expecting protocol.RemoteError') finally: logging.debug('release') RAM.release(server) # Test for exited or never started server. logging.debug('dead server') self.proc.terminate() self.proc = None time.sleep(2) hostname = socket.gethostname() if sys.platform == 'win32': # Server doesn't clean up. root = protocol._server_root(hostname) mapped_root = os.path.join(_DMZ_ROOT, protocol._map_dir(root)) for name in glob.glob('%s*' % mapped_root): os.remove(name) code = 'NAS_Allocator(dmz_host=hostname, server_host=hostname)' assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server root 'RJE-%s='" " on '%s' not found" % (hostname, hostname)) # Test for missing heartbeat. logging.debug('no heartbeat') with open(os.path.join(_DMZ_ROOT, 'RJE-%s=' % hostname), 'w') as out: out.write('empty\n') try: NAS_Allocator(dmz_host=hostname, server_host=hostname) except RuntimeError as exc: msg = "IOError: [Errno 2] No such file or directory:" \ " 'RJE-%s=heartbeat'\n" % hostname logging.debug(str(exc)) self.assertTrue(str(exc).endswith(msg)) else: self.fail('Expected RuntimeError') # Test for stale heartbeat. logging.debug('stale heartbeat') protocol.server_heartbeat(hostname, 1, logging.getLogger()) time.sleep(5) assert_raises(self, code, globals(), locals(), RuntimeError, "NAS_Allocator: can't connect: server heartbeat" " hasn't been updated in 0:00:0")