rubyrep 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +18 -0
  5. data/Gemfile.lock +84 -0
  6. data/History.txt +6 -0
  7. data/README.txt +1 -1
  8. data/Rakefile +6 -27
  9. data/bin/rubyrep +1 -1
  10. data/config/mysql_config.rb +2 -2
  11. data/config/postgres_config.rb +5 -3
  12. data/lib/rubyrep/command_runner.rb +1 -1
  13. data/lib/rubyrep/connection_extenders/connection_extenders.rb +30 -44
  14. data/lib/rubyrep/connection_extenders/mysql_extender.rb +23 -1
  15. data/lib/rubyrep/connection_extenders/postgresql_extender.rb +31 -168
  16. data/lib/rubyrep/generate_runner.rb +1 -1
  17. data/lib/rubyrep/logged_change.rb +1 -1
  18. data/lib/rubyrep/proxy_connection.rb +22 -12
  19. data/lib/rubyrep/replication_difference.rb +1 -1
  20. data/lib/rubyrep/replication_extenders/mysql_replication.rb +1 -1
  21. data/lib/rubyrep/replication_helper.rb +1 -1
  22. data/lib/rubyrep/replication_runner.rb +10 -0
  23. data/lib/rubyrep/scan_report_printers/scan_detail_reporter.rb +1 -1
  24. data/lib/rubyrep/table_spec_resolver.rb +1 -1
  25. data/lib/rubyrep/type_casting_cursor.rb +8 -4
  26. data/lib/rubyrep/version.rb +1 -7
  27. data/lib/rubyrep.rb +4 -3
  28. data/rubyrep +4 -0
  29. data/rubyrep.bat +5 -0
  30. data/rubyrep.gemspec +29 -0
  31. data/sims/performance/big_rep_spec.rb +34 -17
  32. data/sims/performance/performance.rake +11 -31
  33. data/tasks/database.rake +14 -14
  34. data/tasks/java.rake +18 -5
  35. data/tasks/rspec.rake +14 -34
  36. data/tasks/stats.rake +1 -16
  37. metadata +99 -162
  38. data/.gemtest +0 -0
  39. data/config/requirements.rb +0 -32
  40. data/lib/rubyrep/connection_extenders/jdbc_extender.rb +0 -65
  41. data/spec/base_runner_spec.rb +0 -218
  42. data/spec/buffered_committer_spec.rb +0 -274
  43. data/spec/command_runner_spec.rb +0 -145
  44. data/spec/committers_spec.rb +0 -178
  45. data/spec/configuration_spec.rb +0 -203
  46. data/spec/connection_extender_interface_spec.rb +0 -141
  47. data/spec/connection_extenders_registration_spec.rb +0 -164
  48. data/spec/database_proxy_spec.rb +0 -48
  49. data/spec/database_rake_spec.rb +0 -40
  50. data/spec/db_specific_connection_extenders_spec.rb +0 -34
  51. data/spec/db_specific_replication_extenders_spec.rb +0 -38
  52. data/spec/direct_table_scan_spec.rb +0 -61
  53. data/spec/dolphins.jpg +0 -0
  54. data/spec/generate_runner_spec.rb +0 -84
  55. data/spec/initializer_spec.rb +0 -46
  56. data/spec/log_helper_spec.rb +0 -39
  57. data/spec/logged_change_loader_spec.rb +0 -68
  58. data/spec/logged_change_spec.rb +0 -470
  59. data/spec/noisy_connection_spec.rb +0 -78
  60. data/spec/postgresql_replication_spec.rb +0 -48
  61. data/spec/postgresql_schema_support_spec.rb +0 -212
  62. data/spec/postgresql_support_spec.rb +0 -63
  63. data/spec/progress_bar_spec.rb +0 -77
  64. data/spec/proxied_table_scan_spec.rb +0 -151
  65. data/spec/proxy_block_cursor_spec.rb +0 -197
  66. data/spec/proxy_connection_spec.rb +0 -423
  67. data/spec/proxy_cursor_spec.rb +0 -56
  68. data/spec/proxy_row_cursor_spec.rb +0 -66
  69. data/spec/proxy_runner_spec.rb +0 -70
  70. data/spec/replication_difference_spec.rb +0 -161
  71. data/spec/replication_extender_interface_spec.rb +0 -367
  72. data/spec/replication_extenders_spec.rb +0 -32
  73. data/spec/replication_helper_spec.rb +0 -178
  74. data/spec/replication_initializer_spec.rb +0 -509
  75. data/spec/replication_run_spec.rb +0 -443
  76. data/spec/replication_runner_spec.rb +0 -254
  77. data/spec/replicators_spec.rb +0 -36
  78. data/spec/rubyrep_spec.rb +0 -8
  79. data/spec/scan_detail_reporter_spec.rb +0 -119
  80. data/spec/scan_progress_printers_spec.rb +0 -68
  81. data/spec/scan_report_printers_spec.rb +0 -67
  82. data/spec/scan_runner_spec.rb +0 -50
  83. data/spec/scan_summary_reporter_spec.rb +0 -61
  84. data/spec/session_spec.rb +0 -253
  85. data/spec/spec.opts +0 -1
  86. data/spec/spec_helper.rb +0 -305
  87. data/spec/strange_name_support_spec.rb +0 -135
  88. data/spec/sync_helper_spec.rb +0 -169
  89. data/spec/sync_runner_spec.rb +0 -78
  90. data/spec/syncers_spec.rb +0 -171
  91. data/spec/table_scan_helper_spec.rb +0 -36
  92. data/spec/table_scan_spec.rb +0 -49
  93. data/spec/table_sorter_spec.rb +0 -30
  94. data/spec/table_spec_resolver_spec.rb +0 -111
  95. data/spec/table_sync_spec.rb +0 -140
  96. data/spec/task_sweeper_spec.rb +0 -47
  97. data/spec/trigger_mode_switcher_spec.rb +0 -83
  98. data/spec/two_way_replicator_spec.rb +0 -721
  99. data/spec/two_way_syncer_spec.rb +0 -256
  100. data/spec/type_casting_cursor_spec.rb +0 -50
  101. data/spec/uninstall_runner_spec.rb +0 -93
  102. data/tasks/rubyrep.tailor +0 -18
  103. data/tasks/website.rake +0 -19
@@ -1,274 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe Committers::BufferedCommitter do
6
- before(:each) do
7
- Initializer.configuration = standard_config
8
- end
9
-
10
- it "should register itself" do
11
- Committers.committers[:buffered_commit].should == Committers::BufferedCommitter
12
- end
13
-
14
- # Stubs out the starting of transactions in the given Session.
15
- def stub_begin_transaction(session)
16
- session.left.stub! :begin_db_transaction
17
- session.right.stub! :begin_db_transaction
18
- end
19
-
20
- # Stubs out the executing of SQL statements for the given Session.
21
- def stub_execute(session)
22
- session.left.stub! :execute
23
- session.right.stub! :execute
24
- end
25
-
26
- it "trigger_mode_switcher should return and if necessary create the trigger mode switcher" do
27
- session = Session.new
28
- stub_begin_transaction session
29
- stub_execute session
30
- committer = Committers::BufferedCommitter.new(session)
31
- switcher = committer.trigger_mode_switcher
32
- switcher.should be_an_instance_of(TriggerModeSwitcher)
33
-
34
- committer.trigger_mode_switcher.should == switcher # ensure it is only created one
35
- end
36
-
37
- it "exclude_rr_activity should exclude the rubyrep activity for the specified table" do
38
- session = Session.new
39
- stub_begin_transaction session
40
- stub_execute session
41
- committer = Committers::BufferedCommitter.new(session)
42
- committer.trigger_mode_switcher.should_receive(:exclude_rr_activity).with(:left, 'dummy_table')
43
- committer.exclude_rr_activity :left, 'dummy_table'
44
- end
45
-
46
- it "activity_marker_table should return the correct table name" do
47
- config = deep_copy(standard_config)
48
- config.options[:rep_prefix] = 'rx'
49
- session = Session.new config
50
- stub_begin_transaction session
51
- stub_execute session
52
- committer = Committers::BufferedCommitter.new(session)
53
- committer.activity_marker_table.should == 'rx_running_flags'
54
- end
55
-
56
- it "maintain_activity_status should return true if activity marker table exists" do
57
- session = Session.new
58
- stub_begin_transaction session
59
- stub_execute session
60
- committer = Committers::BufferedCommitter.new(session)
61
- committer.maintain_activity_status?.should be_true
62
- end
63
-
64
- it "maintain_activity_status should return false if activity marker does not exist" do
65
- config = deep_copy(standard_config)
66
- config.options[:rep_prefix] = 'rx'
67
- session = Session.new config
68
- stub_begin_transaction session
69
- stub_execute session
70
- committer = Committers::BufferedCommitter.new(session)
71
- committer.maintain_activity_status?.should be_false
72
- end
73
-
74
- it "commit_frequency should return the configured commit frequency" do
75
- config = deep_copy(standard_config)
76
- config.options[:commit_frequency] = 5
77
- session = Session.new config
78
- stub_begin_transaction session
79
- stub_execute session
80
- committer = Committers::BufferedCommitter.new(session)
81
- committer.commit_frequency.should == 5
82
- end
83
-
84
- it "commit_frequency should return the the default commit frequency if nothing else is configured" do
85
- config = deep_copy(standard_config)
86
- config.options.delete :commit_frequency
87
- session = Session.new config
88
- stub_begin_transaction session
89
- stub_execute session
90
- committer = Committers::BufferedCommitter.new(session)
91
- committer.commit_frequency.should == Committers::BufferedCommitter::DEFAULT_COMMIT_FREQUENCY
92
- end
93
-
94
- it "initialize should start transactions and setup rubyrep activity filtering" do
95
- session = nil
96
- begin
97
- session = Session.new
98
- session.left.should_receive(:begin_db_transaction)
99
- session.right.should_receive(:begin_db_transaction)
100
- session.left.select_one("select * from rr_running_flags").should be_nil # verify starting situation
101
- committer = Committers::BufferedCommitter.new(session)
102
-
103
- # rubyrep activity should be marked
104
- session.left.select_one("select * from rr_running_flags").should_not be_nil
105
- session.right.select_one("select * from rr_running_flags").should_not be_nil
106
- ensure
107
- session.left.execute "delete from rr_running_flags" if session
108
- session.right.execute "delete from rr_running_flags" if session
109
- end
110
- end
111
-
112
- it "commit_db_transactions should commit the transactions in both databases" do
113
- session = Session.new
114
- stub_begin_transaction session
115
- stub_execute session
116
- committer = Committers::BufferedCommitter.new(session)
117
-
118
- session.left.should_receive(:commit_db_transaction)
119
- session.right.should_receive(:commit_db_transaction)
120
- committer.commit_db_transactions
121
- end
122
-
123
- it "commit_db_transactions should clear the activity marker table" do
124
- session = Session.new
125
- stub_begin_transaction session
126
- session.left.stub!(:commit_db_transaction)
127
- session.right.stub!(:commit_db_transaction)
128
- stub_execute session
129
- committer = Committers::BufferedCommitter.new(session)
130
-
131
- session.left.should_receive(:execute).with("delete from rr_running_flags")
132
- session.right.should_receive(:execute).with("delete from rr_running_flags")
133
- committer.commit_db_transactions
134
- end
135
-
136
- it "commit_db_transactions should not clear the activity marker table if it doesn't exist" do
137
- config = deep_copy(standard_config)
138
- config.options[:rep_prefix] = 'rx'
139
- session = Session.new config
140
- stub_begin_transaction session
141
- session.left.stub!(:commit_db_transaction)
142
- session.right.stub!(:commit_db_transaction)
143
- stub_execute session
144
- committer = Committers::BufferedCommitter.new(session)
145
-
146
- session.left.should_not_receive(:execute)
147
- session.right.should_not_receive(:execute)
148
- committer.commit_db_transactions
149
- end
150
-
151
- it "begin_db_transactions should begin new transactions in both databases" do
152
- session = Session.new
153
- stub_begin_transaction session
154
- stub_execute session
155
- committer = Committers::BufferedCommitter.new(session)
156
-
157
- session.left.should_receive(:begin_db_transaction)
158
- session.right.should_receive(:begin_db_transaction)
159
- committer.begin_db_transactions
160
- end
161
-
162
- it "begin_db_transactions should insert a record into the activity marker table" do
163
- session = Session.new
164
- stub_begin_transaction session
165
- stub_execute session
166
- committer = Committers::BufferedCommitter.new(session)
167
-
168
- session.left.should_receive(:execute).with("insert into rr_running_flags values(1)")
169
- session.right.should_receive(:execute).with("insert into rr_running_flags values(1)")
170
- committer.begin_db_transactions
171
- end
172
-
173
- it "begin_db_transactions should not clear the activity marker table if it doesn't exist" do
174
- config = deep_copy(standard_config)
175
- config.options[:rep_prefix] = 'rx'
176
- session = Session.new config
177
- stub_begin_transaction session
178
- stub_execute session
179
- committer = Committers::BufferedCommitter.new(session)
180
-
181
- session.left.should_not_receive(:execute)
182
- session.right.should_not_receive(:execute)
183
- committer.begin_db_transactions
184
- end
185
-
186
- it "rollback_db_transactions should roll back the transactions in both databases" do
187
- session = Session.new
188
- stub_begin_transaction session
189
- stub_execute session
190
- committer = Committers::BufferedCommitter.new(session)
191
-
192
- session.left.should_receive(:rollback_db_transaction)
193
- session.right.should_receive(:rollback_db_transaction)
194
- committer.rollback_db_transactions
195
- end
196
-
197
- it "commit should only commit and start new transactions if the specified number of changes have been executed" do
198
- config = deep_copy(standard_config)
199
- config.options[:commit_frequency] = 2
200
- session = Session.new config
201
- stub_begin_transaction session
202
- stub_execute session
203
- committer = Committers::BufferedCommitter.new(session)
204
-
205
- committer.should_receive(:commit_db_transactions).twice
206
- committer.should_receive(:begin_db_transactions).twice
207
- committer.commit
208
- committer.new_transaction?.should be_false
209
- 3.times {committer.commit}
210
- committer.new_transaction?.should be_true
211
- end
212
-
213
- it "insert_record should commit" do
214
- session = Session.new
215
- stub_begin_transaction session
216
- stub_execute session
217
- committer = Committers::BufferedCommitter.new(session)
218
-
219
- committer.should_receive(:exclude_rr_activity).with(:right, 'right_table').ordered
220
- session.right.should_receive(:insert_record).with('right_table', :dummy_values).ordered
221
- committer.should_receive(:commit).ordered
222
-
223
- committer.insert_record(:right, 'right_table', :dummy_values)
224
- end
225
-
226
- it "update_record should commit" do
227
- session = Session.new
228
- stub_begin_transaction session
229
- stub_execute session
230
- committer = Committers::BufferedCommitter.new(session)
231
-
232
- committer.should_receive(:exclude_rr_activity).with(:right, 'right_table').ordered
233
- session.right.should_receive(:update_record).with('right_table', :dummy_values, :dummy_org_key).ordered
234
- committer.should_receive(:commit).ordered
235
-
236
- committer.update_record(:right, 'right_table', :dummy_values, :dummy_org_key)
237
- end
238
-
239
- it "delete_record should commit" do
240
- session = Session.new
241
- stub_begin_transaction session
242
- stub_execute session
243
- committer = Committers::BufferedCommitter.new(session)
244
-
245
- committer.should_receive(:exclude_rr_activity).with(:right, 'right_table').ordered
246
- session.right.should_receive(:delete_record).with('right_table', :dummy_values).ordered
247
- committer.should_receive(:commit).ordered
248
-
249
- committer.delete_record(:right, 'right_table', :dummy_values)
250
- end
251
-
252
- it "finalize should commit the transactions if called with success = true" do
253
- session = Session.new
254
- stub_begin_transaction session
255
- stub_execute session
256
- committer = Committers::BufferedCommitter.new(session)
257
-
258
- committer.should_receive(:commit_db_transactions)
259
-
260
- committer.finalize true
261
- end
262
-
263
- it "finalize should rollbackup the transactions if called with success = false" do
264
- session = Session.new
265
- stub_begin_transaction session
266
- stub_execute session
267
- committer = Committers::BufferedCommitter.new(session)
268
-
269
- committer.should_receive(:rollback_db_transactions)
270
-
271
- committer.finalize false
272
- end
273
- end
274
-
@@ -1,145 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe CommandRunner do
6
- before(:each) do
7
- @org_commands = CommandRunner.commands
8
- CommandRunner.instance_variable_set :@commands, nil
9
- end
10
-
11
- after(:each) do
12
- CommandRunner.instance_variable_set :@commands, @org_commands
13
- end
14
-
15
- it "show_version should print the version string" do
16
- $stdout.should_receive(:puts).with(/rubyrep version ([0-9]+\.){2}[0-9]+/)
17
- CommandRunner.show_version
18
- end
19
-
20
- it "register should register commands, commands should return it" do
21
- CommandRunner.register :bla => :bla_command
22
- CommandRunner.register :blub => :blub_command
23
- CommandRunner.commands.should == {
24
- :bla => :bla_command,
25
- :blub => :blub_command
26
- }
27
- end
28
-
29
- it "run should print a short help if --help is specified" do
30
- org_stderr = $stderr
31
- $stderr = StringIO.new
32
- begin
33
- CommandRunner.register 'c1' => {:description => 'desc 1'}, 'c2' => {:description => 'desc 2'}
34
- CommandRunner.run(['--help'])
35
- $stderr.string.should =~ /Usage/
36
- $stderr.string.should =~ /c1.*desc 1\n/
37
- $stderr.string.should =~ /c2.*desc 2\n/
38
- ensure
39
- $stderr = org_stderr
40
- end
41
- end
42
-
43
- it "run should print help if no command line parameters are given" do
44
- org_stderr = $stderr
45
- $stderr = StringIO.new
46
- begin
47
- CommandRunner.run([]).should == 1
48
- $stderr.string.should =~ /Available commands/
49
- ensure
50
- $stderr = org_stderr
51
- end
52
- end
53
-
54
- it "run should print help if --help or help without further params is given" do
55
- org_stderr = $stderr
56
- $stderr = StringIO.new
57
- begin
58
- CommandRunner.run(['--help']).should == 0
59
- $stderr.string.should =~ /Available commands/
60
- $stderr = StringIO.new
61
- CommandRunner.run(['help']).should == 0
62
- $stderr.string.should =~ /Available commands/
63
- ensure
64
- $stderr = org_stderr
65
- end
66
- end
67
-
68
- it "run should print version if --version is given" do
69
- CommandRunner.should_receive(:show_version)
70
- CommandRunner.run(['--version'])
71
- end
72
-
73
- it "run should call the specified command with the specified params" do
74
- c = mock('dummy_command')
75
- c.should_receive(:run).with(['param1', 'param2'])
76
- CommandRunner.register 'dummy_command' => {:command => c}
77
- CommandRunner.run(['dummy_command', 'param1', 'param2'])
78
- end
79
-
80
- it "run should print help if unknown command is given" do
81
- org_stderr = $stderr
82
- $stderr = StringIO.new
83
- begin
84
- CommandRunner.run('non-existing-command').should == 1
85
- $stderr.string.should =~ /Available commands/
86
- ensure
87
- $stderr = org_stderr
88
- end
89
- end
90
-
91
- it "run should print stacktrace if --verbose option is given" do
92
- org_stderr = $stderr
93
- $stderr = StringIO.new
94
- begin
95
- c = mock('dummy_command')
96
- c.stub!(:run).and_return {raise 'bla'}
97
- CommandRunner.register 'dummy_command' => {:command => c}
98
- CommandRunner.run(['--verbose', 'dummy_command', '-c', 'non_existing_file']).should == 1
99
- $stderr.string.should =~ /Exception caught/
100
- $stderr.string.should =~ /command_runner.rb:[0-9]+:in /
101
-
102
- # also verify that no stacktrace is printed if --verbose is not specified
103
- $stderr = StringIO.new
104
- CommandRunner.run(['dummy_command', '-c', 'non_existing_file']).should == 1
105
- $stderr.string.should =~ /Exception caught/
106
- $stderr.string.should_not =~ /command_runner.rb:[0-9]+:in /
107
- ensure
108
- $stderr = org_stderr
109
- end
110
- end
111
-
112
- it "rubyrep should call CommandRunner#run" do
113
- CommandRunner.should_receive(:run).with(ARGV).and_return(0)
114
- Kernel.any_instance_should_receive(:exit) {
115
- load File.dirname(__FILE__) + '/../bin/rubyrep'
116
- }
117
- end
118
- end
119
-
120
- describe HelpRunner do
121
- it "should register itself" do
122
- CommandRunner.commands['help'][:command].should == HelpRunner
123
- CommandRunner.commands['help'][:description].should be_an_instance_of(String)
124
- end
125
-
126
- it "run should call help for the specified command" do
127
- CommandRunner.should_receive(:run).with(['dummy_command', '--help'])
128
- HelpRunner.run(['dummy_command'])
129
- end
130
-
131
- it "run should print help for itself if '--help' or 'help' is specified" do
132
- org_stderr = $stderr
133
- $stderr = StringIO.new
134
- begin
135
- HelpRunner.run(['--help'])
136
- $stderr.string.should =~ /Shows the help for the specified command/
137
-
138
- $stderr = StringIO.new
139
- HelpRunner.run(['help'])
140
- $stderr.string.should =~ /Shows the help for the specified command/
141
- ensure
142
- $stderr = org_stderr
143
- end
144
- end
145
- end
@@ -1,178 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe Committers do
6
- before(:each) do
7
- @old_committers = Committers.committers
8
- end
9
-
10
- after(:each) do
11
- Committers.instance_variable_set :@committers, @old_committers
12
- end
13
-
14
- it "committers should return empty hash if nil" do
15
- Committers.instance_variable_set :@committers, nil
16
- Committers.committers.should == {}
17
- end
18
-
19
- it "committers should return the registered committers" do
20
- Committers.instance_variable_set :@committers, :dummy_data
21
- Committers.committers.should == :dummy_data
22
- end
23
-
24
- it "register should register the provided commiter" do
25
- Committers.instance_variable_set :@committers, nil
26
- Committers.register :a_key => :a
27
- Committers.register :b_key => :b
28
- Committers.committers[:a_key].should == :a
29
- Committers.committers[:b_key].should == :b
30
- end
31
- end
32
-
33
-
34
- describe "Committer", :shared => true do
35
- it "should support the right constructor interface" do
36
- session = mock("session")
37
- session.should_receive(:left).any_number_of_times \
38
- .and_return(mock("left connection", :null_object => true))
39
- session.should_receive(:right).any_number_of_times \
40
- .and_return(mock("right connection", :null_object => true))
41
- @committer.class.new session
42
- end
43
-
44
- it "should proxy insert_record, update_record and delete_record calls" do
45
- left_connection = mock("left connection", :null_object => true)
46
- left_connection.should_receive(:insert_record).with("left", :dummy_insert_values)
47
-
48
- right_connection = mock("right connection", :null_object => true)
49
- right_connection.should_receive(:update_record).with("right", :dummy_update_values, :dummy_org_key)
50
- right_connection.should_receive(:delete_record).with("right", :dummy_delete_values)
51
-
52
- session = mock("session")
53
- session.should_receive(:left).any_number_of_times.and_return(left_connection)
54
- session.should_receive(:right).any_number_of_times.and_return(right_connection)
55
-
56
- committer = @committer.class.new session
57
-
58
- committer.insert_record :left, 'left', :dummy_insert_values
59
- committer.update_record :right, 'right', :dummy_update_values, :dummy_org_key
60
- committer.delete_record :right, 'right', :dummy_delete_values
61
- end
62
-
63
- it "should support finalize" do
64
- @committer.finalize(false)
65
- end
66
- end
67
-
68
- describe Committers::DefaultCommitter do
69
- before(:each) do
70
- @session = mock("session")
71
- @session.should_receive(:left).any_number_of_times.and_return(:left_connection)
72
- @session.should_receive(:right).any_number_of_times.and_return(:right_connection)
73
- @committer = Committers::DefaultCommitter.new @session
74
- end
75
-
76
- it "should register itself" do
77
- Committers.committers[:default].should == Committers::DefaultCommitter
78
- end
79
-
80
- it "initialize should store the provided parameters" do
81
- @committer.session.should == @session
82
- @committer.connections \
83
- .should == {:left => @session.left, :right => @session.right}
84
- end
85
-
86
- it "new_transaction? should return false" do
87
- @committer.new_transaction?.should be_false
88
- end
89
-
90
- it_should_behave_like "Committer"
91
- end
92
-
93
- describe Committers::NeverCommitter do
94
- before(:each) do
95
- @old_session = Committers::NeverCommitter.current_session
96
- Committers::NeverCommitter.current_session = nil
97
- @session = mock("session")
98
- @session.should_receive(:left).any_number_of_times \
99
- .and_return(mock("left connection", :null_object => true))
100
- @session.should_receive(:right).any_number_of_times \
101
- .and_return(mock("right connection", :null_object => true))
102
- @committer = Committers::NeverCommitter.new @session
103
- end
104
-
105
- after(:each) do
106
- Committers::NeverCommitter.current_session = @old_session
107
- end
108
-
109
- it "should register itself" do
110
- Committers.committers[:never_commit].should == Committers::NeverCommitter
111
- end
112
-
113
- it "initialize should store the provided parameters" do
114
- @committer.session.should == @session
115
- @committer.connections \
116
- .should == {:left => @session.left, :right => @session.right}
117
- end
118
-
119
- it "initialize should rollback the previous current session and then register the new one as current session" do
120
- old_session = mock("old session", :null_object => true)
121
- new_session = mock("new session", :null_object => true)
122
- Committers::NeverCommitter.current_session = old_session
123
- Committers::NeverCommitter.should_receive(:rollback_current_session)
124
-
125
- Committers::NeverCommitter.new new_session
126
- Committers::NeverCommitter.current_session.should == new_session
127
- end
128
-
129
- it "initialize should start new transactions" do
130
- # Ensure that initialize handles the case of no previous database session
131
- # being present
132
- Committers::NeverCommitter.current_session = nil
133
- new_session = mock("new session")
134
-
135
- left_connection = mock("left connection")
136
- left_connection.should_receive :begin_db_transaction
137
- new_session.should_receive(:left).any_number_of_times.and_return(left_connection)
138
-
139
- right_connection = mock("right connection")
140
- right_connection.should_receive :begin_db_transaction
141
- new_session.should_receive(:right).any_number_of_times.and_return(right_connection)
142
-
143
- @committer = Committers::NeverCommitter.new new_session
144
- end
145
-
146
- it "rollback_current_session should rollback current session" do
147
- old_session = mock("old session")
148
-
149
- left_connection = mock("left connection")
150
- left_connection.should_receive :rollback_db_transaction
151
- old_session.should_receive(:left).and_return(left_connection)
152
-
153
- right_connection = mock("right connection")
154
- right_connection.should_receive :rollback_db_transaction
155
- old_session.should_receive(:right).and_return(right_connection)
156
-
157
- Committers::NeverCommitter.current_session = old_session
158
- Committers::NeverCommitter.rollback_current_session
159
- end
160
-
161
- it "should work will real sessions" do
162
- session = Session.new(standard_config)
163
- Committers::NeverCommitter.new session
164
- Committers::NeverCommitter.new session
165
- Committers::NeverCommitter.rollback_current_session
166
- end
167
-
168
- it "should work will real proxied sessions" do
169
- ensure_proxy
170
- session = Session.new(proxied_config)
171
- Committers::NeverCommitter.new session
172
- Committers::NeverCommitter.new session
173
- Committers::NeverCommitter.rollback_current_session
174
- end
175
-
176
- it_should_behave_like "Committer"
177
-
178
- end