active_record_host_pool 1.2.5 → 2.0.0.pre.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/test_arhp.rb DELETED
@@ -1,186 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'helper'
4
-
5
- class ActiveRecordHostPoolTest < Minitest::Test
6
- include ARHPTestSetup
7
- def setup
8
- if RAILS_6_1_WITH_NON_LEGACY_CONNECTION_HANDLING
9
- Phenix.rise! config_path: 'test/three_tier_database.yml'
10
- else
11
- Phenix.rise!
12
- end
13
- arhp_create_models
14
- end
15
-
16
- def teardown
17
- ActiveRecord::Base.connection.disconnect!
18
- ActiveRecordHostPool::PoolProxy.class_variable_set(:@@_connection_pools, {})
19
- Phenix.burn!
20
- end
21
-
22
- def test_process_forking_with_connections
23
- # Ensure we have a connection already
24
- assert_equal(true, ActiveRecord::Base.connected?)
25
-
26
- # Verify that when we fork, the process doesn't crash
27
- pid = Process.fork do
28
- if ActiveRecord.version >= Gem::Version.new('5.2')
29
- assert_equal(false, ActiveRecord::Base.connected?) # New to Rails 5.2
30
- else
31
- assert_equal(true, ActiveRecord::Base.connected?)
32
- end
33
- end
34
- Process.wait(pid)
35
- # Cleanup any connections we may have left around
36
- ActiveRecord::Base.connection_handler.clear_all_connections!
37
- end
38
-
39
- def test_models_with_matching_hosts_ports_sockets_usernames_and_replica_status_should_share_a_connection
40
- assert_equal(Pool1DbA.connection.raw_connection, Pool1DbB.connection.raw_connection)
41
- assert_equal(Pool2DbD.connection.raw_connection, Pool2DbE.connection.raw_connection)
42
- end
43
-
44
- def test_models_with_different_ports_should_not_share_a_connection
45
- refute_equal(Pool1DbA.connection.raw_connection, Pool2DbD.connection.raw_connection)
46
- end
47
-
48
- def test_models_with_different_usernames_should_not_share_a_connection
49
- refute_equal(Pool2DbE.connection.raw_connection, Pool3DbE.connection.raw_connection)
50
- end
51
-
52
- def test_should_select_on_correct_database
53
- Pool1DbA.connection.send(:select_all, 'select 1')
54
- assert_equal 'arhp_test_db_a', current_database(Pool1DbA)
55
-
56
- Pool2DbD.connection.send(:select_all, 'select 1')
57
- assert_equal 'arhp_test_db_d', current_database(Pool2DbD)
58
-
59
- Pool3DbE.connection.send(:select_all, 'select 1')
60
- assert_equal 'arhp_test_db_e', current_database(Pool3DbE)
61
- end
62
-
63
- def test_should_insert_on_correct_database
64
- Pool1DbA.connection.send(:insert, "insert into tests values(NULL, 'foo')")
65
- assert_equal 'arhp_test_db_a', current_database(Pool1DbA)
66
-
67
- Pool2DbD.connection.send(:insert, "insert into tests values(NULL, 'foo')")
68
- assert_equal 'arhp_test_db_d', current_database(Pool2DbD)
69
-
70
- Pool3DbE.connection.send(:insert, "insert into tests values(NULL, 'foo')")
71
- assert_equal 'arhp_test_db_e', current_database(Pool3DbE)
72
- end
73
-
74
- def test_connection_returns_a_proxy
75
- assert_kind_of ActiveRecordHostPool::ConnectionProxy, Pool1DbA.connection
76
- end
77
-
78
- def test_connection_proxy_handles_private_methods
79
- # Relies on connection.class returning the real class
80
- Pool1DbA.connection.class.class_eval do
81
- private
82
-
83
- def test_private_method
84
- true
85
- end
86
- end
87
- assert Pool1DbA.connection.respond_to?(:test_private_method, true)
88
- refute Pool1DbA.connection.respond_to?(:test_private_method)
89
- assert_includes(Pool1DbA.connection.private_methods, :test_private_method)
90
- assert_equal true, Pool1DbA.connection.send(:test_private_method)
91
- end
92
-
93
- def test_object_creation
94
- Pool1DbA.create(val: 'foo')
95
- assert_equal('arhp_test_db_a', current_database(Pool1DbA))
96
-
97
- Pool2DbD.create(val: 'bar')
98
- assert_equal('arhp_test_db_a', current_database(Pool1DbA))
99
- assert_equal('arhp_test_db_d', current_database(Pool2DbD))
100
-
101
- Pool1DbB.create!(val: 'bar_distinct')
102
- assert_equal('arhp_test_db_b', current_database(Pool1DbB))
103
- assert Pool1DbB.find_by_val('bar_distinct')
104
- refute Pool1DbA.find_by_val('bar_distinct')
105
- end
106
-
107
- def test_disconnect
108
- Pool1DbA.create(val: 'foo')
109
- unproxied = Pool1DbA.connection.unproxied
110
- Pool1DbA.connection_handler.clear_all_connections!
111
- Pool1DbA.create(val: 'foo')
112
- assert(unproxied != Pool1DbA.connection.unproxied)
113
- end
114
-
115
- def test_checkout
116
- connection = ActiveRecord::Base.connection_pool.checkout
117
- assert_kind_of(ActiveRecordHostPool::ConnectionProxy, connection)
118
- ActiveRecord::Base.connection_pool.checkin(connection)
119
- c2 = ActiveRecord::Base.connection_pool.checkout
120
- assert(c2 == connection)
121
- end
122
-
123
- def test_no_switch_when_creating_db
124
- conn = Pool1DbA.connection
125
- assert_called(conn, :execute_without_switching) do
126
- refute_called(conn, :_switch_connection) do
127
- assert conn._host_pool_current_database
128
- conn.create_database(:some_args)
129
- end
130
- end
131
- end
132
-
133
- def test_no_switch_when_dropping_db
134
- conn = Pool1DbA.connection
135
- assert_called(conn, :execute_without_switching) do
136
- refute_called(conn, :_switch_connection) do
137
- assert conn._host_pool_current_database
138
- conn.drop_database(:some_args)
139
- end
140
- end
141
- end
142
-
143
- def test_underlying_assumption_about_test_db
144
- debug_me = false
145
- # ensure connection
146
- Pool1DbA.first
147
-
148
- # which is the "default" DB to connect to?
149
- first_db = Pool1DbA.connection.unproxied.instance_variable_get(:@_cached_current_database)
150
- puts "\nOk, we started on #{first_db}" if debug_me
151
-
152
- switch_to_klass = case first_db
153
- when 'arhp_test_db_b'
154
- Pool1DbA
155
- when 'arhp_test_db_a'
156
- Pool1DbB
157
- else
158
- raise "Expected a database name, got #{first_db.inspect}"
159
- end
160
- expected_database = switch_to_klass.connection.instance_variable_get(:@database)
161
-
162
- # switch to the other database
163
- switch_to_klass.first
164
- puts "\nAnd now we're on #{current_database(switch_to_klass)}" if debug_me
165
-
166
- # get the current thread id so we can shoot ourselves in the head
167
- thread_id = switch_to_klass.connection.select_value('select @@pseudo_thread_id')
168
-
169
- # now, disable our auto-switching and trigger a mysql reconnect
170
- switch_to_klass.connection.unproxied.stub(:_switch_connection, true) do
171
- Pool2DbD.connection.execute("KILL #{thread_id}")
172
- end
173
-
174
- # and finally, did mysql reconnect correctly?
175
- puts "\nAnd now we end up on #{current_database(switch_to_klass)}" if debug_me
176
- assert_equal expected_database, current_database(switch_to_klass)
177
- end
178
-
179
- def test_release_connection
180
- pool = ActiveRecord::Base.connection_pool
181
- conn = pool.connection
182
- assert_called_with(pool, :checkin, [conn]) do
183
- pool.release_connection
184
- end
185
- end
186
- end