VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/lib/gems/2.5.0/gems/em-synchrony-1.0.3/spec/activerecord_spec.rb
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

VaKeR 2022