![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/lib/gems/2.5.0/gems/em-synchrony-1.0.3/spec/ |
Upload File : |
require "spec/helper/all" require "em-synchrony/activerecord" require "em-synchrony/fiber_iterator" # create database widgets; # use widgets; # create table widgets ( # id INT NOT NULL AUTO_INCREMENT, # title varchar(255), # PRIMARY KEY (`id`) # ); class Widget < ActiveRecord::Base; end; describe "Fiberized ActiveRecord driver for mysql2" do DELAY = 0.25 QUERY = "SELECT sleep(#{DELAY})" def establish_connection ActiveRecord::Base.establish_connection( :adapter => 'em_mysql2', :database => 'widgets', :username => 'root', :pool => 10 ) Widget.delete_all end it "should establish AR connection" do EventMachine.synchrony do establish_connection result = Widget.find_by_sql(QUERY) result.size.should eql(1) EventMachine.stop end end it "should fire sequential, synchronous requests within single fiber" do EventMachine.synchrony do establish_connection start = now res = [] res.push Widget.find_by_sql(QUERY) res.push Widget.find_by_sql(QUERY) (now - start.to_f).should be_within(DELAY * res.size * 0.15).of(DELAY * res.size) res.size.should eql(2) EventMachine.stop end end it "should fire 100 requests in fibers" do EM.synchrony do establish_connection EM::Synchrony::FiberIterator.new(1..100, 40).each do |i| widget = Widget.create title: 'hi' widget.update_attributes title: 'hello' end EM.stop end end it "should create widget" do EM.synchrony do establish_connection Widget.create Widget.create Widget.count.should eql(2) EM.stop end end it "should update widget" do EM.synchrony do establish_connection ActiveRecord::Base.connection.execute("TRUNCATE TABLE widgets;") widget = Widget.create title: 'hi' widget.update_attributes title: 'hello' Widget.find(widget.id).title.should eql('hello') EM.stop end end describe "transactions" do it "should work properly" do EM.synchrony do establish_connection EM::Synchrony::FiberIterator.new(1..50, 30).each do |i| widget = Widget.create title: "hi#{i}" ActiveRecord::Base.transaction do widget.update_attributes title: "hello" end ActiveRecord::Base.transaction do raise ActiveRecord::Rollback end end Widget.all.each do |widget| widget.title.should eq('hello') end EM.stop end end end end