def test_run
dst = build_test_page
@number_of_threads.times{|nth|
@driver_info[nth][:env]['REQUEST_METHOD'] = 'GET'
@driver_info[nth][:env]['SCRIPT_NAME'] = '/test_wpm_writer.cgi'
@driver_info[nth][:env]['PATH_INFO'] = '/MainPage'
@driver_info[nth][:params]['action'] = 'MainPage.LinkAction.0'
@driver_info[nth][:params]['_wpm_submit_'] = 'MainPage.Form.0'
@driver_info[nth][:params]['MainPage.HiddenAttribute.0'] = 'hidden message'
@driver_info[nth][:params]['MainPage.TextField.0'] = 'HALO'
@driver_info[nth][:params]['MainPage.Password.0'] = 'open sesame'
@driver_info[nth][:params]['MainPage.TextArea.0'] = "Hello world.\n"
@driver_info[nth][:params]['MainPage.CheckBox.0'] = ''
@driver_info[nth][:params]['RadioGroup'] = 'bar'
@driver_info[nth][:params]['MainPage.Select.0'] = 'bar'
@driver_info[nth][:params]['MainPage.SubmitButton.0'] = ''
}
while (Time.now < File.mtime(File.join('MainPage', 'MainPage.rb')) + 1)
sleep(0.1)
end
while (Time.now < File.mtime(File.join('MainPage', 'MainPage.map')) + 1)
sleep(0.1)
end
while (Time.now < File.mtime(File.join('MainPage', 'MainPage.xml')) + 1)
sleep(0.1)
end
ready_to_start = false
ready_to_update = false
th_grp = ThreadGroup.new
@number_of_threads.times{|nth|
th_grp.add Thread.new{
until (ready_to_start)
end
@driver_info[nth][:params]['nth_thread'] = nth.succ.to_s
@ntries.times do |i|
@driver_info[nth][:params]['nth_trial'] = i.succ.to_s
@writer.run(@driver[nth])
ready_to_update = true
end
assert(@driver_info[nth][:env_call] > 0)
assert(@driver_info[nth][:params_call] > 0)
assert_equal(1 * @ntries, @driver_info[nth][:header_call])
@ntries.times do |i|
assert_equal('Status', @driver_info[nth][:header_name_list][i])
end
assert_equal(3 * @ntries, @driver_info[nth][:set_header_call])
@ntries.times do |i|
assert_equal([ 'Status', '200 OK' ], @driver_info[nth][:set_header_alist][i * 3 + 0])
assert_equal([ 'Content-Type', 'text/html' ], @driver_info[nth][:set_header_alist][i * 3 + 1])
assert_equal([ 'Content-Length', format(dst, nth.succ, i.succ).length.to_s ],
@driver_info[nth][:set_header_alist][i * 3 + 2])
end
assert(@driver_info[nth][:write_call] > 0)
dst2 = ''
for i in 1..@ntries
dst2 << format(dst, nth.succ, i)
end
assert_equal(dst2, @driver_info[nth][:write_messg])
}
}
update_thread = Thread.new{
until (ready_to_update)
end
File.utime(Time.now, Time.now, File.join('MainPage', 'MainPage.rb'))
File.utime(Time.now, Time.now, File.join('MainPage', 'MainPage.map'))
File.utime(Time.now, Time.now, File.join('MainPage', 'MainPage.xml'))
}
ready_to_start = true
for thread in th_grp.list
thread.join
end
update_thread.join
end