switchman 1.2.10 → 1.2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/switchman/shard.rb +2 -2
  3. data/lib/switchman/active_record/connection_handler.rb +18 -9
  4. data/lib/switchman/active_record/connection_pool.rb +3 -0
  5. data/lib/switchman/active_record/query_cache.rb +6 -1
  6. data/lib/switchman/active_record/query_methods.rb +1 -1
  7. data/lib/switchman/connection_pool_proxy.rb +1 -1
  8. data/lib/switchman/r_spec_helper.rb +73 -61
  9. data/lib/switchman/test_helper.rb +8 -2
  10. data/lib/switchman/version.rb +1 -1
  11. data/lib/tasks/switchman.rake +5 -0
  12. data/spec/dummy/config/database.yml +2 -4
  13. data/spec/dummy/config/environments/development.rb +0 -4
  14. data/spec/dummy/config/environments/test.rb +1 -1
  15. data/spec/dummy/db/schema.rb +12 -12
  16. data/spec/dummy/db/shard_120.sqlite3 +0 -0
  17. data/spec/dummy/db/shard_156.sqlite3 +0 -0
  18. data/spec/dummy/db/shard_193.sqlite3 +0 -0
  19. data/spec/dummy/db/shard_23.sqlite3 +0 -0
  20. data/spec/dummy/db/shard_234.sqlite3 +0 -0
  21. data/spec/dummy/db/shard_257.sqlite3 +0 -0
  22. data/spec/dummy/db/shard_277.sqlite3 +0 -0
  23. data/spec/dummy/db/shard_311.sqlite3 +0 -0
  24. data/spec/dummy/db/shard_324.sqlite3 +0 -0
  25. data/spec/dummy/db/shard_342.sqlite3 +0 -0
  26. data/spec/dummy/db/shard_375.sqlite3 +0 -0
  27. data/spec/dummy/db/shard_389.sqlite3 +0 -0
  28. data/spec/dummy/db/shard_428.sqlite3 +0 -0
  29. data/spec/dummy/db/shard_452.sqlite3 +0 -0
  30. data/spec/dummy/db/shard_462.sqlite3 +0 -0
  31. data/spec/dummy/db/shard_483.sqlite3 +0 -0
  32. data/spec/dummy/db/shard_508.sqlite3 +0 -0
  33. data/spec/dummy/db/shard_531.sqlite3 +0 -0
  34. data/spec/dummy/db/shard_554.sqlite3 +0 -0
  35. data/spec/dummy/db/shard_577.sqlite3 +0 -0
  36. data/spec/dummy/db/shard_58.sqlite3 +0 -0
  37. data/spec/dummy/db/shard_600.sqlite3 +0 -0
  38. data/spec/dummy/db/shard_623.sqlite3 +0 -0
  39. data/spec/dummy/db/shard_646.sqlite3 +0 -0
  40. data/spec/dummy/db/shard_668.sqlite3 +0 -0
  41. data/spec/dummy/db/shard_680.sqlite3 +0 -0
  42. data/spec/dummy/db/shard_708.sqlite3 +0 -0
  43. data/spec/dummy/db/shard_735.sqlite3 +0 -0
  44. data/spec/dummy/db/shard_753.sqlite3 +0 -0
  45. data/spec/dummy/db/shard_76.sqlite3 +0 -0
  46. data/spec/dummy/db/shard_802.sqlite3 +0 -0
  47. data/spec/dummy/db/test.sqlite3 +0 -0
  48. data/spec/dummy/log/development.log +7 -0
  49. data/spec/dummy/log/test.log +106293 -0
  50. data/spec/dummy/tmp/cache/313/970/shard%2F30 +1 -0
  51. data/spec/dummy/tmp/cache/316/980/shard%2F15 +1 -0
  52. data/spec/dummy/tmp/cache/317/9D0/shard%2F52 +1 -0
  53. data/spec/dummy/tmp/cache/31C/A40/shard%2F75 +1 -0
  54. data/spec/dummy/tmp/cache/345/E00/shard%2F500 +1 -0
  55. data/spec/dummy/tmp/cache/346/DF0/shard%2F321 +1 -0
  56. data/spec/dummy/tmp/cache/349/DE0/shard%2F126 +1 -0
  57. data/spec/dummy/tmp/cache/349/E10/shard%2F153 +0 -0
  58. data/spec/dummy/tmp/cache/349/E20/shard%2F243 +1 -0
  59. data/spec/dummy/tmp/cache/34A/E20/shard%2F154 +0 -0
  60. data/spec/dummy/tmp/cache/34A/E40/shard%2F172 +1 -0
  61. data/spec/dummy/tmp/cache/34A/E70/shard%2F523 +1 -0
  62. data/spec/dummy/tmp/cache/34A/EB0/shard%2F721 +1 -0
  63. data/spec/dummy/tmp/cache/34A/EC0/shard%2F730 +1 -0
  64. data/spec/dummy/tmp/cache/34B/E40/shard%2F245 +0 -0
  65. data/spec/dummy/tmp/cache/34B/E60/shard%2F425 +1 -0
  66. data/spec/dummy/tmp/cache/34B/EC0/shard%2F722 +1 -0
  67. data/spec/dummy/tmp/cache/34C/E50/shard%2F246 +0 -0
  68. data/spec/dummy/tmp/cache/34C/E80/shard%2F273 +1 -0
  69. data/spec/dummy/tmp/cache/34C/E90/shard%2F363 +0 -0
  70. data/spec/dummy/tmp/cache/34C/E90/shard%2F444 +1 -0
  71. data/spec/dummy/tmp/cache/34C/EA0/shard%2F615 +1 -0
  72. data/spec/dummy/tmp/cache/34C/F00/shard%2F750 +1 -0
  73. data/spec/dummy/tmp/cache/34D/E80/shard%2F265 +1 -0
  74. data/spec/dummy/tmp/cache/34D/ED0/shard%2F391 +1 -0
  75. data/spec/dummy/tmp/cache/34D/EE0/shard%2F724 +1 -0
  76. data/spec/dummy/tmp/cache/34E/ED0/shard%2F383 +1 -0
  77. data/spec/dummy/tmp/cache/34E/EF0/shard%2F725 +1 -0
  78. data/spec/dummy/tmp/cache/34E/F00/shard%2F653 +1 -0
  79. data/spec/dummy/tmp/cache/34F/EE0/shard%2F546 +1 -0
  80. data/spec/dummy/tmp/cache/34F/F00/shard%2F807 +1 -0
  81. data/spec/dummy/tmp/cache/34F/F30/shard%2F672 +1 -0
  82. data/spec/dummy/tmp/cache/350/EA0/shard%2F178 +1 -0
  83. data/spec/dummy/tmp/cache/350/EB0/shard%2F349 +1 -0
  84. data/spec/dummy/tmp/cache/350/F00/shard%2F718 +0 -0
  85. data/spec/dummy/tmp/cache/350/F40/shard%2F592 +1 -0
  86. data/spec/dummy/tmp/cache/351/F00/shard%2F386 +0 -0
  87. data/spec/dummy/tmp/cache/351/F10/shard%2F638 +1 -0
  88. data/spec/dummy/tmp/cache/351/F10/shard%2F719 +0 -0
  89. data/spec/dummy/tmp/cache/352/F10/shard%2F387 +0 -0
  90. data/spec/dummy/tmp/cache/352/F10/shard%2F468 +1 -0
  91. data/spec/dummy/tmp/cache/352/F30/shard%2F729 +1 -0
  92. data/spec/dummy/tmp/cache/353/F10/shard%2F298 +1 -0
  93. data/spec/dummy/tmp/cache/353/F50/shard%2F739 +1 -0
  94. data/spec/dummy/tmp/cache/354/F50/shard%2F569 +1 -0
  95. data/spec/dummy/tmp/cache/354/F80/shard%2F677 +1 -0
  96. data/spec/dummy/tmp/cache/354/F90/shard%2F767 +1 -0
  97. data/spec/dummy/tmp/cache/358/FE0/shard%2F699 +1 -0
  98. data/spec/dummy/tmp/cache/3A5/EA0/shard%2F10004 +1 -0
  99. data/spec/dummy/tmp/cache/3A6/F40/shard%2F10410 +1 -0
  100. data/spec/dummy/tmp/cache/3A7/F30/shard%2F10231 +1 -0
  101. data/spec/dummy/tmp/cache/3A8/F90/shard%2F10520 +1 -0
  102. data/spec/dummy/tmp/cache/3A9/F40/shard%2F10062 +1 -0
  103. data/spec/dummy/tmp/cache/3A9/F80/shard%2F10341 +1 -0
  104. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10027 +1 -0
  105. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10108 +1 -0
  106. data/spec/dummy/tmp/cache/3AA/FB0/shard%2F10441 +1 -0
  107. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F10612 +1 -0
  108. data/spec/dummy/tmp/cache/3AB/010/shard%2F10730 +1 -0
  109. data/spec/dummy/tmp/cache/3AB/F70/shard%2F10154 +1 -0
  110. data/spec/dummy/tmp/cache/3AC/020/shard%2F10650 +1 -0
  111. data/spec/dummy/tmp/cache/3AC/FC0/shard%2F10272 +1 -0
  112. data/spec/dummy/tmp/cache/3AD/000/shard%2F10543 +1 -0
  113. data/spec/dummy/tmp/cache/3AD/F50/shard%2F10039 +1 -0
  114. data/spec/dummy/tmp/cache/3AD/F90/shard%2F10318 +1 -0
  115. data/spec/dummy/tmp/cache/3AD/FA0/shard%2F10246 +1 -0
  116. data/spec/dummy/tmp/cache/3AE/060/shard%2F10751 +1 -0
  117. data/spec/dummy/tmp/cache/3AE/FF0/shard%2F10364 +1 -0
  118. data/spec/dummy/tmp/cache/3AF/030/shard%2F10635 +1 -0
  119. data/spec/dummy/tmp/cache/3B0/FE0/shard%2F10177 +1 -0
  120. data/spec/dummy/tmp/cache/3B1/030/shard%2F10295 +1 -0
  121. data/spec/dummy/tmp/cache/3B1/040/shard%2F10466 +1 -0
  122. data/spec/dummy/tmp/cache/3B1/090/shard%2F10673 +1 -0
  123. data/spec/dummy/tmp/cache/3B2/070/shard%2F10566 +1 -0
  124. data/spec/dummy/tmp/cache/3B3/060/shard%2F10387 +1 -0
  125. data/spec/dummy/tmp/cache/3B5/0B0/shard%2F10497 +1 -0
  126. data/spec/dummy/tmp/cache/3B6/100/shard%2F10696 +1 -0
  127. data/spec/dummy/tmp/cache/3B7/0E0/shard%2F10589 +1 -0
  128. data/spec/dummy/tmp/cache/3BA/160/shard%2F10799 +1 -0
  129. data/spec/lib/action_controller/caching_spec.rb +4 -4
  130. data/spec/lib/active_record/abstract_adapter_spec.rb +1 -1
  131. data/spec/lib/active_record/association_spec.rb +83 -67
  132. data/spec/lib/active_record/attribute_methods_spec.rb +29 -29
  133. data/spec/lib/active_record/base_spec.rb +20 -20
  134. data/spec/lib/active_record/calculations_spec.rb +79 -59
  135. data/spec/lib/active_record/connection_handler_spec.rb +14 -14
  136. data/spec/lib/active_record/connection_pool_spec.rb +7 -7
  137. data/spec/lib/active_record/finder_methods_spec.rb +8 -8
  138. data/spec/lib/active_record/query_cache_spec.rb +38 -38
  139. data/spec/lib/active_record/query_methods_spec.rb +45 -45
  140. data/spec/lib/active_record/relation_spec.rb +8 -8
  141. data/spec/lib/active_record/spawn_methods_spec.rb +11 -11
  142. data/spec/lib/connection_pool_proxy_spec.rb +2 -2
  143. data/spec/lib/database_server_spec.rb +37 -37
  144. data/spec/lib/default_shard_spec.rb +3 -3
  145. data/spec/lib/r_spec_helper_spec.rb +33 -7
  146. data/spec/lib/rails_spec.rb +5 -5
  147. data/spec/lib/shackles_spec.rb +35 -35
  148. data/spec/models/shard_spec.rb +104 -104
  149. data/spec/spec_helper.rb +1 -1
  150. metadata +254 -29
@@ -12,25 +12,25 @@ module Switchman
12
12
 
13
13
  describe "#exec_queries" do
14
14
  it "should activate the correct shard for the query" do
15
- User.shard(@shard1).where(:id => @user2.local_id).first.should == @user2
15
+ expect(User.shard(@shard1).where(:id => @user2.local_id).first).to eq @user2
16
16
  end
17
17
 
18
18
  it "should activate multiple shards if necessary" do
19
- User.where(:id => [@user1.id, @user2.id]).sort_by(&:id).should == [@user1, @user2].sort_by(&:id)
19
+ expect(User.where(:id => [@user1.id, @user2.id]).sort_by(&:id)).to eq [@user1, @user2].sort_by(&:id)
20
20
  end
21
21
  end
22
22
 
23
23
  describe "#update_all" do
24
24
  it "should activate the correct shard for the query" do
25
25
  User.shard(@shard1).where(:id => @user2.local_id).update_all(:name => 'a')
26
- @user1.reload.name.should == 'user1'
27
- @user2.reload.name.should == 'a'
26
+ expect(@user1.reload.name).to eq 'user1'
27
+ expect(@user2.reload.name).to eq 'a'
28
28
  end
29
29
 
30
30
  it "should activate multiple shards if necessary" do
31
31
  User.where(:id => [@user1.id, @user2.id]).update_all(:name => 'a')
32
- @user1.reload.name.should == 'a'
33
- @user2.reload.name.should == 'a'
32
+ expect(@user1.reload.name).to eq 'a'
33
+ expect(@user2.reload.name).to eq 'a'
34
34
  end
35
35
  end
36
36
 
@@ -38,8 +38,8 @@ module Switchman
38
38
  it "should infer the scope's shard" do
39
39
  scope = @shard1.activate { User.where(id: 1) }
40
40
  u = scope.new
41
- u.shard.should == @shard1
42
- u.local_id.should == 1
41
+ expect(u.shard).to eq @shard1
42
+ expect(u.local_id).to eq 1
43
43
  end
44
44
  end
45
45
  end
@@ -8,35 +8,35 @@ module Switchman
8
8
  describe "#merge" do
9
9
  it "should merge shard_value for multiple explicits" do
10
10
  result = User.shard([@shard1, @shard2]).merge(User.shard([Shard.default, @shard1]))
11
- result.shard_value.should == @shard1
12
- result.shard_source_value.should == :explicit
11
+ expect(result.shard_value).to eq @shard1
12
+ expect(result.shard_source_value).to eq :explicit
13
13
  end
14
14
 
15
15
  it "should merge shard_value relations for multiple explicits" do
16
16
  result = User.shard(Shard.where("id IN (?)", [@shard1, @shard2])).merge(User.shard(Shard.where(id: [Shard.default, @shard1])))
17
- (::ActiveRecord::Relation === result.shard_value).should be_true
18
- result.shard_value.to_a.should == [@shard1]
19
- result.shard_source_value.should == :explicit
17
+ expect(::ActiveRecord::Relation === result.shard_value).to eq true
18
+ expect(result.shard_value.to_a).to eq [@shard1]
19
+ expect(result.shard_source_value).to eq :explicit
20
20
  end
21
21
 
22
22
  it "should ignore implicit shard value lhs" do
23
23
  scope = ::Rails.version < '4' ? User.scoped : User.all
24
24
  result = scope.merge(User.shard(@shard1))
25
- result.shard_value.should == @shard1
26
- result.shard_source_value.should == :explicit
25
+ expect(result.shard_value).to eq @shard1
26
+ expect(result.shard_source_value).to eq :explicit
27
27
  end
28
28
 
29
29
  it "should ignore implicit shard value rhs" do
30
30
  result = User.shard(@shard1).merge(::Rails.version < '4' ? User.scoped : User.all)
31
- result.shard_value.should == @shard1
32
- result.shard_source_value.should == :explicit
31
+ expect(result.shard_value).to eq @shard1
32
+ expect(result.shard_source_value).to eq :explicit
33
33
  end
34
34
 
35
35
  it "should take lhs shard_value for double implicit" do
36
36
  scope1 = @shard2.activate { ::Rails.version < '4' ? User.scoped : User.all }
37
37
  result = scope1.merge(::Rails.version < '4' ? User.scoped : User.all)
38
- result.shard_value.should == @shard2
39
- result.shard_source_value.should == :implicit
38
+ expect(result.shard_value).to eq @shard2
39
+ expect(result.shard_source_value).to eq :implicit
40
40
  end
41
41
  end
42
42
  end
@@ -8,8 +8,8 @@ module Switchman
8
8
  @db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => ':memory:' })
9
9
  @sqlite_shard1 = @db.shards.create!
10
10
  @sqlite_shard2 = @db.shards.create!
11
- ::ActiveRecord::Base.connection.should_not == @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
12
- @sqlite_shard1.activate { ::ActiveRecord::Base.connection }.should_not == @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
11
+ expect(::ActiveRecord::Base.connection).not_to eq @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
12
+ expect(@sqlite_shard1.activate { ::ActiveRecord::Base.connection }).not_to eq @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
13
13
  end
14
14
 
15
15
  it "should forward clear_idle_connections! to each of its pools" do
@@ -5,37 +5,37 @@ module Switchman
5
5
  describe "shareable?" do
6
6
  it "should be false for sqlite" do
7
7
  db = DatabaseServer.new(config: { adapter: 'sqlite3', database: '%{shard_name}' })
8
- db.shareable?.should be_false
8
+ expect(db.shareable?).to eq false
9
9
  end
10
10
 
11
11
  it "should be true for mysql" do
12
12
  db = DatabaseServer.new(config: { adapter: 'mysql' })
13
- db.shareable?.should be_true
13
+ expect(db.shareable?).to eq true
14
14
 
15
15
  db = DatabaseServer.new(config: { adapter: 'mysql2' })
16
- db.shareable?.should be_true
16
+ expect(db.shareable?).to eq true
17
17
  end
18
18
 
19
19
  it "should be true for postgres with a non-variable username" do
20
20
  db = DatabaseServer.new(config: { adapter: 'postgresql' })
21
- db.shareable?.should be_true
21
+ expect(db.shareable?).to eq true
22
22
  end
23
23
 
24
24
  it "should be false for postgres with variable username" do
25
25
  db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}' })
26
- db.shareable?.should be_false
26
+ expect(db.shareable?).to eq false
27
27
  end
28
28
 
29
29
  it "should depend on the database environment" do
30
30
  db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}', deploy: { username: 'deploy' }})
31
- db.shareable?.should be_false
32
- ::Shackles.activate(:deploy) { db.shareable? }.should be_true
31
+ expect(db.shareable?).to eq false
32
+ expect(::Shackles.activate(:deploy) { db.shareable? }).to eq true
33
33
  end
34
34
 
35
35
  it "should handle string keys" do
36
36
  db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}', deploy: { 'username' => 'deploy' }})
37
- db.shareable?.should be_false
38
- ::Shackles.activate(:deploy) { db.shareable? }.should be_true
37
+ expect(db.shareable?).to eq false
38
+ expect(::Shackles.activate(:deploy) { db.shareable? }).to eq true
39
39
  end
40
40
  end
41
41
 
@@ -50,19 +50,19 @@ module Switchman
50
50
  adapter = ::ActiveRecord::Base.connection.adapter_name
51
51
  def create_shard(server)
52
52
  new_shard = server.create_new_shard
53
- new_shard.should_not be_new_record
54
- new_shard.name.should match /shard_#{new_shard.id}/
53
+ expect(new_shard).not_to be_new_record
54
+ expect(new_shard.name).to match /shard_#{new_shard.id}/
55
55
  # They should share a connection pool
56
56
  if server == Shard.default.database_server
57
- User.connection_pool.current_pool.should == new_shard.activate { User.connection_pool.current_pool }
58
- User.connection_pool.current_pool.should == Shard.connection_pool.current_pool
57
+ expect(User.connection_pool.current_pool).to eq new_shard.activate { User.connection_pool.current_pool }
58
+ expect(User.connection_pool.current_pool).to eq Shard.connection_pool.current_pool
59
59
  else
60
- User.connection_pool.current_pool.should_not == new_shard.activate { User.connection_pool.current_pool }
60
+ expect(User.connection_pool.current_pool).not_to eq new_shard.activate { User.connection_pool.current_pool }
61
61
  end
62
62
  # The tables should be created, ready to use
63
63
  new_shard.activate {
64
64
  a = User.create!
65
- a.should_not be_new_record
65
+ expect(a).not_to be_new_record
66
66
  }
67
67
  ensure
68
68
  if new_shard
@@ -90,7 +90,7 @@ module Switchman
90
90
 
91
91
  it "should be able to create a new shard from a db server that doesn't have any shards" do
92
92
  # otherwise it's a repeat of the sqlite spec above
93
- pending 'A "real" database"' unless %w{MySQL Mysql2 PostgreSQL}.include?(adapter)
93
+ skip 'A "real" database"' unless %w{MySQL Mysql2 PostgreSQL}.include?(adapter)
94
94
 
95
95
  # So, it's really the same server, but we want separate connections
96
96
  db = DatabaseServer.create(:config => Shard.default.database_server.config)
@@ -105,7 +105,7 @@ module Switchman
105
105
  it "should use the connection's db name as temp db name" do
106
106
  db = DatabaseServer.new(config: { adapter: 'postgresql' })
107
107
  Shard.expects(:create!).with(:name => Shard.default.name, :database_server => db).raises(MyException.new)
108
- lambda { db.create_new_shard }.should raise_error(MyException)
108
+ expect { db.create_new_shard }.to raise_error(MyException)
109
109
  end
110
110
  end
111
111
 
@@ -115,38 +115,38 @@ module Switchman
115
115
  slave: [nil, { database: 'slave' }],
116
116
  deploy: { username: 'deploy' }}
117
117
  ds = DatabaseServer.new(config: base_config)
118
- ds.config.should == base_config
119
- ds.config(:slave).should == [{ database: 'db', deploy: base_config[:deploy] },
118
+ expect(ds.config).to eq base_config
119
+ expect(ds.config(:slave)).to eq [{ database: 'db', deploy: base_config[:deploy] },
120
120
  { database: 'slave', deploy: base_config[:deploy] }]
121
- ds.config(:deploy).should == { database: 'db', username: 'deploy', slave: base_config[:slave], deploy: base_config[:deploy] }
121
+ expect(ds.config(:deploy)).to eq({ database: 'db', username: 'deploy', slave: base_config[:slave], deploy: base_config[:deploy] })
122
122
  end
123
123
  end
124
124
 
125
125
  describe "#shackles_environment" do
126
126
  it "should inherit from Shackles.environment" do
127
127
  ds = DatabaseServer.new
128
- ds.shackles_environment.should == :master
128
+ expect(ds.shackles_environment).to eq :master
129
129
  ::Shackles.activate(:slave) do
130
- ds.shackles_environment.should == :slave
130
+ expect(ds.shackles_environment).to eq :slave
131
131
  end
132
132
  end
133
133
 
134
134
  it "should override Shackles.environment when explicitly set" do
135
135
  ds = DatabaseServer.new
136
136
  ds.shackle!
137
- ds.shackles_environment.should == :slave
137
+ expect(ds.shackles_environment).to eq :slave
138
138
  ds.unshackle do
139
- ds.shackles_environment.should == :master
139
+ expect(ds.shackles_environment).to eq :master
140
140
  end
141
- ds.shackles_environment.should == :slave
141
+ expect(ds.shackles_environment).to eq :slave
142
142
  ::Shackles.activate(:slave) do
143
- ds.shackles_environment.should == :slave
143
+ expect(ds.shackles_environment).to eq :slave
144
144
  ds.unshackle do
145
- ds.shackles_environment.should == :slave
145
+ expect(ds.shackles_environment).to eq :slave
146
146
  end
147
- ds.shackles_environment.should == :slave
147
+ expect(ds.shackles_environment).to eq :slave
148
148
  end
149
- ds.shackles_environment.should == :slave
149
+ expect(ds.shackles_environment).to eq :slave
150
150
  end
151
151
  end
152
152
 
@@ -164,12 +164,12 @@ module Switchman
164
164
  end
165
165
 
166
166
  it "should prefer the cache specific to the database" do
167
- @db.cache_store.object_id.should == @db_store.object_id
167
+ expect(@db.cache_store.object_id).to eq @db_store.object_id
168
168
  end
169
169
 
170
170
  it "should fallback to Rails.cache_without_sharding if no specific cache" do
171
171
  Switchman.config[:cache_map].delete(@db.id)
172
- @db.cache_store.object_id.should == @default_store.object_id
172
+ expect(@db.cache_store.object_id).to eq @default_store.object_id
173
173
  end
174
174
  end
175
175
 
@@ -200,20 +200,20 @@ module Switchman
200
200
  end
201
201
 
202
202
  it "should return the default server if that's the only one around" do
203
- DatabaseServer.server_for_new_shard.should == @db1
203
+ expect(DatabaseServer.server_for_new_shard).to eq @db1
204
204
  end
205
205
 
206
206
  it "should return on open server" do
207
207
  @db1.config[:open] = true
208
- DatabaseServer.server_for_new_shard.should == @db1
208
+ expect(DatabaseServer.server_for_new_shard).to eq @db1
209
209
  end
210
210
 
211
211
  it "should return another server if it's the only one open" do
212
212
  @db2 = DatabaseServer.create(:config => { :open => true})
213
- 4.times { DatabaseServer.server_for_new_shard.should == @db2 }
213
+ 4.times { expect(DatabaseServer.server_for_new_shard).to eq @db2 }
214
214
  @db2.config.delete(:open)
215
215
  @db1.config[:open] = true
216
- 4.times { DatabaseServer.server_for_new_shard.should == @db1 }
216
+ 4.times { expect(DatabaseServer.server_for_new_shard).to eq @db1 }
217
217
  end
218
218
 
219
219
  it "should return multiple open servers" do
@@ -223,8 +223,8 @@ module Switchman
223
223
  20.times do
224
224
  dbs << DatabaseServer.server_for_new_shard
225
225
  end
226
- dbs.should include(@db1)
227
- dbs.should include(@db2)
226
+ expect(dbs).to include(@db1)
227
+ expect(dbs).to include(@db2)
228
228
  end
229
229
  end
230
230
  end
@@ -6,13 +6,13 @@ module Switchman
6
6
  include RSpecHelper
7
7
 
8
8
  it "should be equivalent to a real default shard" do
9
- Shard.default.should be_is_a(Shard)
10
- DefaultShard.send(:new).should == Shard.default
9
+ expect(Shard.default).to be_is_a(Shard)
10
+ expect(DefaultShard.send(:new)).to eq Shard.default
11
11
  end
12
12
  end
13
13
 
14
14
  it "all defaultshards should be equivalent to each other" do
15
- DefaultShard.send(:new).should == DefaultShard.send(:new)
15
+ expect(DefaultShard.send(:new)).to eq DefaultShard.send(:new)
16
16
  end
17
17
  end
18
18
  end
@@ -2,20 +2,46 @@ require "spec_helper"
2
2
 
3
3
  module Switchman
4
4
  describe RSpecHelper do
5
+ context "unsharded" do
6
+ it "doesn't make shards accessible" do
7
+ # by virtue of including RSpecHelper somewhere, test shards will
8
+ # always already be set up by this point (though not accessible),
9
+ # but only if we are running a sharding spec
10
+ expect(Shard.count).to eq 0
11
+ expect(Shard.default).to be_a(DefaultShard)
12
+ end
13
+
14
+ it "doesn't set up sharding at all if no sharded specs are run" do
15
+ run_groups = RSpec.world.filtered_examples.select{ |k, v| v.present? }.map(&:first)
16
+ pending "run without other sharding specs" if run_groups.any?{ |group| RSpecHelper.included_in?(group) }
17
+
18
+ expect(RSpecHelper.class_variable_defined?(:@@default_shard)).to eq false
19
+ expect(RSpecHelper.class_variable_get(:@@shard1)).to be_nil
20
+ end
21
+
22
+ it "sets up sharding but hides it if other sharding specs are run" do
23
+ run_groups = RSpec.world.filtered_examples.select{ |k, v| v.present? }.map(&:first)
24
+ pending "run alongside sharding specs" unless run_groups.any?{ |group| RSpecHelper.included_in?(group) }
25
+
26
+ expect(RSpecHelper.class_variable_get(:@@default_shard)).to be_a(Shard)
27
+ expect(RSpecHelper.class_variable_get(:@@shard1)).to be_a(Shard)
28
+ end
29
+ end
30
+
5
31
  context "sharding" do
6
32
  # strategically place these before we include the module
7
33
  before(:all) do
8
- Shard.default.should be_a(DefaultShard)
34
+ expect(Shard.default).to be_a(DefaultShard)
9
35
  end
10
36
 
11
37
  after(:all) do
12
- Shard.default.should be_a(DefaultShard)
38
+ expect(Shard.default).to be_a(DefaultShard)
13
39
  end
14
40
 
15
41
  include RSpecHelper
16
42
 
17
43
  it "should make the default shard a real shard" do
18
- Shard.default.should be_a(Shard)
44
+ expect(Shard.default).to be_a(Shard)
19
45
  end
20
46
  end
21
47
 
@@ -54,18 +80,18 @@ module Switchman
54
80
 
55
81
  it "should support nested transactions" do
56
82
  @shard2.activate do |shard|
57
- User.count.should == 1 # we get the user from the before :all
83
+ expect(User.count).to eq 1 # we get the user from the before :all
58
84
  User.create! # should only last for the duration of this spec
59
85
  conn = ::ActiveRecord::Base.connection
60
- conn.open_transactions.should eql 2
86
+ expect(conn.open_transactions).to eql 2
61
87
  end
62
88
  end
63
89
 
64
90
  prepend_after :all do
65
91
  @shard2.activate do
66
- User.count.should == 1
92
+ expect(User.count).to eq 1
67
93
  conn = ::ActiveRecord::Base.connection
68
- conn.open_transactions.should eql 1 # RSpecHelper shouldn't have rolled back the before :all one above
94
+ expect(conn.open_transactions).to eql 1 # RSpecHelper shouldn't have rolled back the before :all one above
69
95
  rollback_transaction(::ActiveRecord::Base.connection)
70
96
  end
71
97
  end
@@ -9,19 +9,19 @@ module Switchman
9
9
  s1 = db.shards.create!
10
10
  s2 = db.shards.create!
11
11
 
12
- s1.activate { ::Rails.cache }.should == s2.activate { ::Rails.cache }
12
+ expect(s1.activate { ::Rails.cache }).to eq s2.activate { ::Rails.cache }
13
13
 
14
14
  from_1 = s1.activate { ::Rails.cache.fetch('key') { 1 } }
15
- from_1.should == 1
15
+ expect(from_1).to eq 1
16
16
  from_2 = s2.activate do
17
17
  ::Rails.cache.fetch('key') { 2 }
18
18
  end
19
- from_2.should == 2
19
+ expect(from_2).to eq 2
20
20
 
21
21
  from_1 = s1.activate { ::Rails.cache.fetch('key') }
22
- from_1.should == 1
22
+ expect(from_1).to eq 1
23
23
  from_2 = s2.activate { ::Rails.cache.fetch('key') }
24
- from_2.should == 2
24
+ expect(from_2).to eq 2
25
25
  end
26
26
 
27
27
  it "should not be assignable" do
@@ -18,7 +18,7 @@ module Switchman
18
18
  @current_pool = ::Shackles.activate(:slave) { ::ActiveRecord::Base.connection_pool.current_pool }
19
19
  end
20
20
  ::Shackles.activate(:slave) do
21
- ::ActiveRecord::Base.connection_pool.default_pool.should_not == @current_pool
21
+ expect(::ActiveRecord::Base.connection_pool.default_pool).not_to eq @current_pool
22
22
  end
23
23
  end
24
24
 
@@ -30,9 +30,9 @@ module Switchman
30
30
  models = ::ActiveRecord::Base.connection_handler.send(:class_to_pool)
31
31
  pools = {}
32
32
  models.each_pair { |k, v| pools[k] = v.current_pool }
33
- default_pools.keys.sort.should == pools.keys.sort
33
+ expect(default_pools.keys.sort).to eq pools.keys.sort
34
34
  default_pools.keys.each do |model|
35
- default_pools[model].should_not == pools[model]
35
+ expect(default_pools[model]).not_to eq pools[model]
36
36
  end
37
37
  end
38
38
  end
@@ -47,7 +47,7 @@ module Switchman
47
47
  s = ds.shards.create!
48
48
  s.activate do
49
49
  User.connection
50
- User.connection_pool.spec.config[:host].should_not == 'some.postgres.server'
50
+ expect(User.connection_pool.spec.config[:host]).not_to eq 'some.postgres.server'
51
51
  end
52
52
  end
53
53
 
@@ -55,8 +55,8 @@ module Switchman
55
55
  begin
56
56
  Shard.default.database_server.shackle!
57
57
  @shard2.activate do
58
- Shard.default.database_server.shackles_environment.should == :slave
59
- ::Shackles.environment.should == :master
58
+ expect(Shard.default.database_server.shackles_environment).to eq :slave
59
+ expect(::Shackles.environment).to eq :master
60
60
 
61
61
  Shard.default.database_server.expects(:unshackle).once
62
62
  User.shard(Shard.default).update_all(updated_at: nil)
@@ -69,13 +69,13 @@ module Switchman
69
69
  it "should deshackle for FOR UPDATE queries" do
70
70
  begin
71
71
  Shard.default.database_server.shackle!
72
- Shard.default.database_server.shackles_environment.should == :slave
72
+ expect(Shard.default.database_server.shackles_environment).to eq :slave
73
73
 
74
74
  u = User.create!
75
75
  Shard.default.database_server.expects(:unshackle).once.returns([])
76
76
  User.lock.first
77
77
  Shard.default.database_server.expects(:unshackle).once.returns([])
78
- lambda { u.lock! }.should raise_error(::ActiveRecord::RecordNotFound)
78
+ expect { u.lock! }.to raise_error(::ActiveRecord::RecordNotFound)
79
79
  ensure
80
80
  Shard.default.database_server.unshackle!
81
81
  end
@@ -90,7 +90,7 @@ module Switchman
90
90
  ::Rails.env.stubs(:test?).returns(false)
91
91
  s = ds.shards.create!
92
92
  s.activate do
93
- User.connection_pool.spec.config[:host].should == 'notshackled'
93
+ expect(User.connection_pool.spec.config[:host]).to eq 'notshackled'
94
94
  end
95
95
  ensure
96
96
  Shard.default.database_server.unshackle!
@@ -102,44 +102,44 @@ module Switchman
102
102
 
103
103
  it "should really disconnect all envs" do
104
104
  ::ActiveRecord::Base.connection
105
- ::ActiveRecord::Base.connection_pool.should be_connected
105
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
106
106
  @shard1.activate do
107
107
  ::ActiveRecord::Base.connection
108
- ::ActiveRecord::Base.connection_pool.should be_connected
108
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
109
109
  end
110
110
  @shard2.activate do
111
111
  ::ActiveRecord::Base.connection
112
- ::ActiveRecord::Base.connection_pool.should be_connected
112
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
113
113
  end
114
114
 
115
115
  ::Shackles.activate(:slave) do
116
116
  ::ActiveRecord::Base.connection
117
- ::ActiveRecord::Base.connection_pool.should be_connected
117
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
118
118
  @shard1.activate do
119
119
  ::ActiveRecord::Base.connection
120
- ::ActiveRecord::Base.connection_pool.should be_connected
120
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
121
121
  end
122
122
  @shard2.activate do
123
123
  ::ActiveRecord::Base.connection
124
- ::ActiveRecord::Base.connection_pool.should be_connected
124
+ expect(::ActiveRecord::Base.connection_pool).to be_connected
125
125
  end
126
126
  end
127
127
 
128
128
  ::ActiveRecord::Base.clear_all_connections!
129
- ::ActiveRecord::Base.connection_pool.should_not be_connected
129
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
130
130
  @shard1.activate do
131
- ::ActiveRecord::Base.connection_pool.should_not be_connected
131
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
132
132
  end
133
133
  @shard2.activate do
134
- ::ActiveRecord::Base.connection_pool.should_not be_connected
134
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
135
135
  end
136
136
  ::Shackles.activate(:slave) do
137
- ::ActiveRecord::Base.connection_pool.should_not be_connected
137
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
138
138
  @shard1.activate do
139
- ::ActiveRecord::Base.connection_pool.should_not be_connected
139
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
140
140
  end
141
141
  @shard2.activate do
142
- ::ActiveRecord::Base.connection_pool.should_not be_connected
142
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
143
143
  end
144
144
  end
145
145
  end
@@ -150,53 +150,53 @@ module Switchman
150
150
 
151
151
  it "should really return active connections to the pool in all envs" do
152
152
  ::ActiveRecord::Base.connection
153
- actual_connection_count.should_not == 0
153
+ expect(actual_connection_count).not_to eq 0
154
154
  @shard1.activate do
155
155
  ::ActiveRecord::Base.connection
156
- actual_connection_count.should_not == 0
156
+ expect(actual_connection_count).not_to eq 0
157
157
  end
158
158
  @shard2.activate do
159
159
  ::ActiveRecord::Base.connection
160
- actual_connection_count.should_not == 0
160
+ expect(actual_connection_count).not_to eq 0
161
161
  end
162
162
 
163
163
  ::Shackles.activate(:slave) do
164
164
  ::ActiveRecord::Base.connection
165
- actual_connection_count.should_not == 0
165
+ expect(actual_connection_count).not_to eq 0
166
166
  @shard1.activate do
167
167
  ::ActiveRecord::Base.connection
168
- actual_connection_count.should_not == 0
168
+ expect(actual_connection_count).not_to eq 0
169
169
  end
170
170
  @shard2.activate do
171
171
  ::ActiveRecord::Base.connection
172
- actual_connection_count.should_not == 0
172
+ expect(actual_connection_count).not_to eq 0
173
173
  end
174
174
  end
175
175
 
176
176
  ::ActiveRecord::Base.clear_active_connections!
177
- actual_connection_count.should == 0
177
+ expect(actual_connection_count).to eq 0
178
178
  @shard1.activate do
179
- actual_connection_count.should == 0
179
+ expect(actual_connection_count).to eq 0
180
180
  end
181
181
  @shard2.activate do
182
- actual_connection_count.should == 0
182
+ expect(actual_connection_count).to eq 0
183
183
  end
184
184
  ::Shackles.activate(:slave) do
185
- actual_connection_count.should == 0
185
+ expect(actual_connection_count).to eq 0
186
186
  @shard1.activate do
187
- actual_connection_count.should == 0
187
+ expect(actual_connection_count).to eq 0
188
188
  end
189
189
  @shard2.activate do
190
- actual_connection_count.should == 0
190
+ expect(actual_connection_count).to eq 0
191
191
  end
192
192
  end
193
193
  end
194
194
 
195
195
  it "should not establish connections when switching environments" do
196
196
  ::ActiveRecord::Base.clear_all_connections!
197
- ::ActiveRecord::Base.connection_pool.should_not be_connected
197
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
198
198
  ::Shackles.activate(:slave) {}
199
- ::ActiveRecord::Base.connection_pool.should_not be_connected
199
+ expect(::ActiveRecord::Base.connection_pool).not_to be_connected
200
200
  end
201
201
  end
202
202
  end