Created
January 15, 2022 17:50
-
-
Save zw963/224e01eed8784c92ef6f4aa732d183dc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
begin | |
require "bundler/inline" | |
rescue LoadError => e | |
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" | |
raise e | |
end | |
gemfile(true) do | |
source "https://rubygems.org" | |
gem 'pg' | |
gem 'sequel' | |
gem 'minitest' | |
gem 'database_cleaner-sequel' | |
end | |
system("sudo -u postgres dropdb --if-exists check_sequel_db") | |
system("sudo -u postgres createdb check_sequel_db") | |
DB = Sequel.postgres("check_sequel_db") | |
DB.create_table(:insiders, :ignore_index_errors=>true) do | |
primary_key :id | |
Integer :number_of_shares, :null=>false | |
end | |
class Insider < Sequel::Model | |
end | |
ENV['RACK_ENV'] = 'test' | |
require 'minitest/autorun' | |
require 'minitest/pride' | |
require 'database_cleaner-sequel' | |
DatabaseCleaner[:sequel].strategy = :truncation | |
# require 'logger' | |
# LOGGER = Logger.new($stdout) | |
# DB.loggers << LOGGER | |
describe 'insider' do | |
it 'test postgres read committed mode default lock' do | |
100.times do |i| | |
sleep 1 | |
puts i+1 | |
Insider.create(number_of_shares: 200) | |
puts "Insider count outer thread: #{Insider.count}" | |
thread1 = Thread.new do | |
sleep rand(0.1..0.2) | |
DB.transaction do | |
puts "Insider count inner first thread: #{Insider.count}" | |
insider_1 = Insider.last | |
insider_1.update(number_of_shares: insider_1.number_of_shares - 10) | |
end | |
end | |
thread2 = Thread.new do | |
sleep rand(0.1..0.2) | |
DB.transaction do | |
insider_2 = Insider.last | |
insider_2.update(number_of_shares: insider_2.number_of_shares - 10) | |
end | |
end | |
thread1.join | |
thread2.join | |
assert_equal 180.0, Insider.last.number_of_shares | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment