require File.dirname(__FILE__) + '/test_helper' class TC_NERA_RM_CONNECTOR < Test::Unit::TestCase def setup @testdir = 'test_remote_connector' FileUtils.mkdir(@testdir) FileUtils.chdir(@testdir) @db_folder = "nera_db" NERA::DbFolders.create_db( @db_folder) @dbf = NERA::DbFolders.new( @db_folder) @slc = NERA::SimulatorLayerController.new( @db_folder) @plc = NERA::ParameterLayerController.new( @db_folder, Ising) pid = @plc.create_a_new_parameter_set({:L => 32, :K => 0.01, :tmax => 1}) @rlc = NERA::RunLayerController.new( @db_folder, Ising, pid) @rlc.create_jobs( 3, 1) @jlc = NERA::JobLayerController.new( @db_folder) @hosts = [] @hosts << { :name => "localhost",:host_url => "localhost",:user => ENV['USER'], :job_path => FileUtils.pwd + '/job1'} @hosts << { :name => "localhost_submittable",:host_url => "localhost",:user => ENV['USER'], :job_path => FileUtils.pwd + '/job2', :submission_command => "nohup", :show_status_command => 'ps au' } @hosts << { :name => "unconnectable",:host_url => "unconnectable_host",:user => "hoge", :job_path => '~/job_test', :submission_command => 'qsub', :show_status_command => 'qstat; qstatlist;'} File.open( @dbf.path_to_hosts_yaml, 'w') do |io| YAML.dump( @hosts, io) io.flush end @rc = NERA::RemoteConnector.new( @db_folder) end def teardown FileUtils.chdir('..') FileUtils.rm_r(@testdir) end def test_constructor assert_raise( ArgumentError) { NERA::RemoteConnector.new( @dbf) } end def test_hostnames a = @rc.hostnames names = @hosts.map do |h| h[:name] end assert_equal( a, names) end def test_submittable_hostnames a = @rc.submittable_hostnames assert_equal( ["localhost_submittable","unconnectable"], a) end def test_show_status s = @rc.show_status("localhost") assert( s.is_a?(String) ) ret = @rc.show_status("unconnectable") assert_equal( :connection_failed, ret) end def test_transfer assert_raise( ArgumentError) { @rc.transfer( 1, "localhost") } assert_raise( ArgumentError) { @rc.transfer( [1,"j000001.sh"], "localhost") } assert_raise( ArgumentError) { @rc.transfer( [1,2], 1) } ret = @rc.transfer( [999,1000], "localhost") assert_equal( :no_such_jobs, ret) ret = @rc.transfer( [1,2], "unknown_host") assert_equal( :connection_failed, ret) ret = @rc.transfer( [1], "unconnectable") assert_equal( :connection_failed, ret) ret = @rc.transfer( [1,2], "localhost") assert_equal( :succeeded, ret) h,l = @jlc.not_finished_list_in_csv stat = l[0].split(',')[1].strip assert_equal( :copied.to_s, stat) stat = l[0].split(',')[-1].strip assert_equal( "localhost", stat) stat = l[1].split(',')[1].strip assert_equal( :copied.to_s, stat) stat = l[1].split(',')[-1].strip assert_equal( "localhost", stat) stat = l[2].split(',')[1].strip assert_equal( :created.to_s, stat) stat = l[2].split(',')[-1].strip assert_equal( '', stat) assert( File.directory?("job1") ) assert( File.exist?("job1/j000001.sh") ) assert( File.exist?("job1/j000002.sh") ) assert( ! File.exist?("job1/j000003.sh") ) end def test_submit assert_raise( ArgumentError) { @rc.submit( 1, "localhost") } assert_raise( ArgumentError) { @rc.submit( ["j000001.sh"], "localhost") } assert_raise( ArgumentError) { @rc.submit( [1,2], 1) } ret = @rc.submit( [999,1000], "localhost_submittable") assert_equal( :no_such_jobs, ret) ret = @rc.submit( [1,2], "localhost") assert_equal( :no_submission_command, ret) ret = @rc.submit( [1,2], "unknown_host") assert_equal( :connection_failed, ret) ret = @rc.submit( [1], "unconnectable") assert_equal( :connection_failed, ret) ret = @rc.submit( [1,2], "localhost_submittable") assert_equal( :succeeded, ret) h,l = @jlc.not_finished_list_in_csv stat = l[0].split(',')[1].strip assert_equal( :submitted.to_s, stat) stat = l[0].split(',')[-1].strip assert_equal( "localhost_submittable", stat) stat = l[1].split(',')[1].strip assert_equal( :submitted.to_s, stat) stat = l[1].split(',')[-1].strip assert_equal( "localhost_submittable", stat) stat = l[2].split(',')[1].strip assert_equal( :created.to_s, stat) stat = l[2].split(',')[-1].strip assert_equal( '', stat) assert( File.directory?("job2") ) assert( File.exist?("job2/j000001.sh") ) assert( File.exist?("job2/j000002.sh") ) assert( ! File.exist?("job2/j000003.sh") ) sleep 3 # wait for completion assert( File.exist?("job2/j000001.tar.bz2") ) assert( File.exist?("job2/j000002.tar.bz2") ) end def test_check_completion fs = @rc.check_completion( "localhost_submittable") assert_equal( [], fs) fs = @rc.check_completion( "unconnectable") assert_equal( :connection_failed, fs) fs = @rc.check_completion( "unknown_host") assert_equal( :connection_failed, fs) assert_raise( ArgumentError) { @rc.check_completion( 1) } ret = @rc.submit( [2,3], "localhost_submittable") sleep 3 # wait for completion fs = @rc.check_completion( "localhost_submittable") assert( fs, ["j000001.tar.bz2", "j000002.tar.bz2"] ) end def test_check_completion_all ret = @rc.submit( [1,2], "localhost_submittable") sleep 3 # wait for completion comp = @rc.check_completion_all comp.has_key?( "localhost_submittable") assert( comp["localhost_submittable"], ["j000001.tar.bz2", "j000002.tar.bz2"] ) end def test_download assert_raise( ArgumentError) { @rc.download( "j000001.tar.bz2", "localhost") } assert_raise( ArgumentError) { @rc.download( [1,"j000001.tar.bz2"], "localhost") } assert_raise( ArgumentError) { @rc.download( [1,2], "localhost") } assert_raise( ArgumentError) { @rc.download( ["j000001.sh"], "localhost") } assert_raise( ArgumentError) { @rc.download( ["j000001.tar.bz2","j000002.tar.bz2"], 1) } ret = @rc.download( ["j000001.tar.bz2"], "unknown_host") assert_equal( :connection_failed, ret) ret = @rc.download( ["j000001.tar.bz2"], "unconnectable") assert_equal( :connection_failed, ret) ret = @rc.download( ["j000001.tar.bz2"], "localhost_submittable") assert_equal( [], ret) ret = @rc.submit( [1,2], "localhost_submittable") sleep 3 # wait for completion downloadable = @rc.check_completion("localhost_submittable") ret = @rc.download( downloadable, "localhost_submittable") assert_equal( ["j000001.tar.bz2", "j000002.tar.bz2"], ret) downloadable = @rc.check_completion("localhost_submittable") assert_equal( downloadable, []) assert( FileTest.exist?(@db_folder+"/Jobs/Include/j000001.tar.bz2") ) assert( FileTest.exist?(@db_folder+"/Jobs/Include/j000002.tar.bz2") ) end =begin def test_remote @hosts << { :name => "cruijff",:host_url => "cruijff.t.u-tokyo.ac.jp",:user => 'murase', :job_path => '~/job1', :submission_command => 'qsub', :show_status_command => 'qstatlist'} File.open( "hosts.yml", 'w') do |io| YAML.dump( @hosts, io) io.flush end @rc = NERA::RemoteConnector.new( @db_folder, "hosts.yml") puts @rc.show_status("cruijff") @rc.submit( [1,2], "cruijff") sleep 3 a = @rc.check_completion("cruijff") @rc.download( a, "cruijff") end =end end