Sha256: c7b545635d085f0a261639abd666e03e8bdbb5fefdff58340e82da0aa598fd90
Contents?: true
Size: 1.15 KB
Versions: 1
Compression:
Stored size: 1.15 KB
Contents
require 'spec_helper' require 'securerandom' describe "threadhot", concurrency: true do before :each do @iterations = 5 @workers = 8 end def prepend_sibling_at_even_second(run_at) ActiveRecord::Base.connection.reconnect! sibling = Label.new(:name => SecureRandom.hex(10)) target = Label.find(@target.id) sleep(run_at - Time.now.to_f) target.prepend_sibling sibling end def run_workers start_time = Time.now.to_i + 2 @times = @iterations.times.collect { |ea| start_time + (ea * 2) } @names = @times.collect { |ea| ea.to_s } @threads = @workers.times.collect do Thread.new do @times.each { |ea| prepend_sibling_at_even_second(ea) } end end @threads.each { |ea| ea.join } end it "prepend_sibling on a non-root node doesn't cause deadlocks" do @target = Label.find_or_create_by_path %w(root parent) run_workers children = Label.roots uniq_sort_orders = children.collect { |ea| ea.sort_order }.uniq children.size.should == uniq_sort_orders.size # The only non-root node should be "root": Label.all.select { |ea| ea.root? }.should == [@target.parent] end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
closure_tree-4.5.0 | spec/parallel_prepend_sibling_spec.rb |