Sha256: 72989ba9f7c52555713a093acc13498ac73b121085708d3ef92d9d9569c11380

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

dir = File.expand_path(File.dirname(__FILE__))
require "#{dir}/../micon_spec_helper"

Thread.abort_on_exception = true
  
describe "Micon Concurrency" do    
  after :each do
    Micon.delete_all_sessions
  end
  
  class Counter
    inherit Micon::Managed
    scope :session
    
    def initialize; @value = 0 end
    attr_reader :value
    def increase; @value += 1 end
  end
  
  class Container
    inherit Micon::Managed
    scope :session
    inject :counter => Counter
    
    def execute_action
      counter.increase
    end
  end    
  
  it "Concurrency Access" do
    Micon.activate_thread :key do        
      Micon[Container].counter.value.should == 0
    end
    
    t1 = Thread.new do
      100.times do
        Micon.activate_thread :key do        
          Micon[Container].counter.increase
        end
      end
    end
    
    t2 = Thread.new do
      100.times do
        Micon.activate_thread :key do        
          Micon[Container].counter.increase
        end
      end    
    end
    
    t1.join; t2.join
    Micon.activate_thread :key do        
      Micon[Container].counter.value.should == 200
    end
  end
  
  it "Concurrency Access for :application Scope" do
    Micon.register(:counter, :application){0}
    Micon.activate_thread :key do        
      Micon[:counter] = 0
    end
    
    threads = []
    20.times do 
      threads << Thread.new do
        Micon.activate_thread :key do
          1000.times do                  
            Micon[:counter] += 1
          end
        end
      end
    end       
    threads.each{|t| t.join}
    
    Micon.activate_thread :key do        
      Micon[:counter].should == 20000
    end
  end  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby-ext-0.4.1 old/old_concurrency_spec.rb
ruby-ext-0.4.0 old/old_concurrency_spec.rb