63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require 'test/unit'
 | |
| require 'radius'
 | |
| 
 | |
| class MultithreadTest < Test::Unit::TestCase
 | |
| 
 | |
|   def setup
 | |
|     Thread.abort_on_exception
 | |
|     @context = Radius::Context.new do |c|
 | |
|       c.define_tag('thread') do |tag|
 | |
|         "#{tag.locals.thread_id} / #{tag.globals.object_id}"
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if RUBY_PLATFORM == 'java'
 | |
|     require 'java'
 | |
|     # call once before the thread to keep from using hidden require in a thread
 | |
|     Radius::Parser.new
 | |
|     def test_runs_multithreaded
 | |
|       lock = java.lang.String.new("lock")
 | |
|       threads = []
 | |
|       1000.times do |t|
 | |
|         thread = Thread.new do
 | |
|                    parser = Radius::Parser.new(@context, :tag_prefix => 'r')
 | |
|                    parser.context.globals.thread_id = Thread.current.object_id
 | |
|                    expected = "#{Thread.current.object_id} / "+
 | |
|                               "#{parser.context.globals.object_id}"
 | |
|                    actual = parser.parse('<r:thread />')
 | |
|                    assert_equal expected, actual
 | |
|                  end
 | |
|         lock.synchronized do
 | |
|           threads << thread
 | |
|         end
 | |
|       end
 | |
|       lock.synchronized do
 | |
|         threads.each{|t| t.join }
 | |
|       end
 | |
|     end
 | |
|   else
 | |
|     def test_runs_multithreaded
 | |
|       threads = []
 | |
|       mute = Mutex.new
 | |
|       1000.times do |t|
 | |
|         thread = Thread.new do
 | |
|                    parser = Radius::Parser.new(@context, :tag_prefix => 'r')
 | |
|                    parser.context.globals.thread_id = Thread.current.object_id
 | |
|                    expected = "#{Thread.current.object_id} / "+
 | |
|                               "#{parser.context.globals.object_id}"
 | |
|                    actual = parser.parse('<r:thread />')
 | |
|                    assert_equal expected, actual
 | |
|                  end
 | |
|         mute.synchronize do
 | |
|           threads << thread
 | |
|         end
 | |
|       end
 | |
|       mute.synchronize do
 | |
|         threads.each{|t| t.join }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
| end
 |