rubyrep 1.2.0 → 2.0.0

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.
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
metadata CHANGED
@@ -1,84 +1,97 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubyrep
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 0
10
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Arndt Lehmann
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-03-07 00:00:00 +09:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: activesupport
11
+ date: 2017-06-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.14'
20
+ type: :development
23
21
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 13
30
- segments:
31
- - 3
32
- - 0
33
- - 5
34
- version: 3.0.5
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.5'
55
+ - !ruby/object:Gem::Dependency
38
56
  name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.2'
62
+ type: :runtime
39
63
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: awesome_print
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
43
73
  - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 13
46
- segments:
47
- - 3
48
- - 0
49
- - 5
50
- version: 3.0.5
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
51
76
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: hoe
55
77
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
59
80
  - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 41
62
- segments:
63
- - 2
64
- - 9
65
- - 1
66
- version: 2.9.1
67
- type: :development
68
- version_requirements: *id003
69
- description: ""
70
- email:
71
- - mail@arndtlehman.com
72
- executables:
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description:
84
+ email:
85
+ - arndtlehmann@arndtlehmann.com
86
+ executables:
73
87
  - rubyrep
74
88
  extensions: []
75
-
76
- extra_rdoc_files:
77
- - History.txt
78
- - License.txt
79
- - Manifest.txt
80
- - README.txt
81
- files:
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - Gemfile
94
+ - Gemfile.lock
82
95
  - History.txt
83
96
  - License.txt
84
97
  - Manifest.txt
@@ -91,7 +104,6 @@ files:
91
104
  - config/proxied_test_config.rb
92
105
  - config/redmine_config.rb
93
106
  - config/rep_config.rb
94
- - config/requirements.rb
95
107
  - config/test_config.rb
96
108
  - lib/rubyrep.rb
97
109
  - lib/rubyrep/base_runner.rb
@@ -100,7 +112,6 @@ files:
100
112
  - lib/rubyrep/committers/committers.rb
101
113
  - lib/rubyrep/configuration.rb
102
114
  - lib/rubyrep/connection_extenders/connection_extenders.rb
103
- - lib/rubyrep/connection_extenders/jdbc_extender.rb
104
115
  - lib/rubyrep/connection_extenders/mysql_extender.rb
105
116
  - lib/rubyrep/connection_extenders/postgresql_extender.rb
106
117
  - lib/rubyrep/database_proxy.rb
@@ -150,6 +161,7 @@ files:
150
161
  - lib/rubyrep/version.rb
151
162
  - rubyrep
152
163
  - rubyrep.bat
164
+ - rubyrep.gemspec
153
165
  - script/destroy
154
166
  - script/generate
155
167
  - script/txt2html
@@ -159,112 +171,37 @@ files:
159
171
  - sims/performance/big_sync_spec.rb
160
172
  - sims/performance/performance.rake
161
173
  - sims/sim_helper.rb
162
- - spec/base_runner_spec.rb
163
- - spec/buffered_committer_spec.rb
164
- - spec/command_runner_spec.rb
165
- - spec/committers_spec.rb
166
- - spec/configuration_spec.rb
167
- - spec/connection_extender_interface_spec.rb
168
- - spec/connection_extenders_registration_spec.rb
169
- - spec/database_proxy_spec.rb
170
- - spec/database_rake_spec.rb
171
- - spec/db_specific_connection_extenders_spec.rb
172
- - spec/db_specific_replication_extenders_spec.rb
173
- - spec/direct_table_scan_spec.rb
174
- - spec/dolphins.jpg
175
- - spec/generate_runner_spec.rb
176
- - spec/initializer_spec.rb
177
- - spec/log_helper_spec.rb
178
- - spec/logged_change_loader_spec.rb
179
- - spec/logged_change_spec.rb
180
- - spec/noisy_connection_spec.rb
181
- - spec/postgresql_replication_spec.rb
182
- - spec/postgresql_schema_support_spec.rb
183
- - spec/postgresql_support_spec.rb
184
- - spec/progress_bar_spec.rb
185
- - spec/proxied_table_scan_spec.rb
186
- - spec/proxy_block_cursor_spec.rb
187
- - spec/proxy_connection_spec.rb
188
- - spec/proxy_cursor_spec.rb
189
- - spec/proxy_row_cursor_spec.rb
190
- - spec/proxy_runner_spec.rb
191
- - spec/replication_difference_spec.rb
192
- - spec/replication_extender_interface_spec.rb
193
- - spec/replication_extenders_spec.rb
194
- - spec/replication_helper_spec.rb
195
- - spec/replication_initializer_spec.rb
196
- - spec/replication_run_spec.rb
197
- - spec/replication_runner_spec.rb
198
- - spec/replicators_spec.rb
199
- - spec/rubyrep_spec.rb
200
- - spec/scan_detail_reporter_spec.rb
201
- - spec/scan_progress_printers_spec.rb
202
- - spec/scan_report_printers_spec.rb
203
- - spec/scan_runner_spec.rb
204
- - spec/scan_summary_reporter_spec.rb
205
- - spec/session_spec.rb
206
- - spec/spec.opts
207
- - spec/spec_helper.rb
208
- - spec/strange_name_support_spec.rb
209
- - spec/sync_helper_spec.rb
210
- - spec/sync_runner_spec.rb
211
- - spec/syncers_spec.rb
212
- - spec/table_scan_helper_spec.rb
213
- - spec/table_scan_spec.rb
214
- - spec/table_sorter_spec.rb
215
- - spec/table_spec_resolver_spec.rb
216
- - spec/table_sync_spec.rb
217
- - spec/task_sweeper_spec.rb
218
- - spec/trigger_mode_switcher_spec.rb
219
- - spec/two_way_replicator_spec.rb
220
- - spec/two_way_syncer_spec.rb
221
- - spec/type_casting_cursor_spec.rb
222
- - spec/uninstall_runner_spec.rb
223
174
  - tasks/database.rake
224
175
  - tasks/deployment.rake
225
176
  - tasks/environment.rake
226
177
  - tasks/java.rake
227
178
  - tasks/redmine_test.rake
228
179
  - tasks/rspec.rake
229
- - tasks/rubyrep.tailor
230
180
  - tasks/stats.rake
231
181
  - tasks/task_helper.rb
232
- - tasks/website.rake
233
- - .gemtest
234
- has_rdoc: true
235
- homepage:
236
- licenses: []
237
-
182
+ homepage: http://www.rubyrep.org
183
+ licenses:
184
+ - MIT
185
+ metadata: {}
238
186
  post_install_message:
239
- rdoc_options:
240
- - --main
241
- - README.txt
242
- require_paths:
187
+ rdoc_options: []
188
+ require_paths:
243
189
  - lib
244
- required_ruby_version: !ruby/object:Gem::Requirement
245
- none: false
246
- requirements:
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
247
192
  - - ">="
248
- - !ruby/object:Gem::Version
249
- hash: 3
250
- segments:
251
- - 0
252
- version: "0"
253
- required_rubygems_version: !ruby/object:Gem::Requirement
254
- none: false
255
- requirements:
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
256
197
  - - ">="
257
- - !ruby/object:Gem::Version
258
- hash: 3
259
- segments:
260
- - 0
261
- version: "0"
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
262
200
  requirements: []
263
-
264
- rubyforge_project: rubyrep
265
- rubygems_version: 1.5.2
201
+ rubyforge_project:
202
+ rubygems_version: 2.6.8
266
203
  signing_key:
267
- specification_version: 3
268
- summary: ""
204
+ specification_version: 4
205
+ summary: Open-source solution for asynchronous, master-master replication of relational
206
+ databases.
269
207
  test_files: []
270
-
data/.gemtest DELETED
File without changes
@@ -1,32 +0,0 @@
1
- require 'fileutils'
2
- include FileUtils
3
-
4
- require 'rubygems'
5
-
6
- # Load essential gems. Exit if not available.
7
- %w[rake active_record].each do |req_gem|
8
- begin
9
- require req_gem
10
- rescue LoadError
11
- puts "This Rakefile requires the '#{req_gem}' RubyGem."
12
- puts "Installation: gem install #{req_gem} -y"
13
- exit
14
- end
15
- end
16
-
17
- # Load gem builder / ruby-forge integration gems. Complain but continue if not available.
18
- %w[hoe].each do |req_gem|
19
- begin
20
- require req_gem
21
- rescue LoadError
22
- # The jruby platform is probably only used for testing.
23
- # So if on jruby, do not even complain.
24
- if not RUBY_PLATFORM =~ /java/
25
- puts "Without #{req_gem} rake tasks to build the gem / integrate the RubyForge will not be available."
26
- end
27
- end
28
- end
29
-
30
- $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
31
-
32
- require 'rubyrep'
@@ -1,65 +0,0 @@
1
- require 'java'
2
-
3
- module RR
4
- module ConnectionExtenders
5
-
6
- # Provides various JDBC specific functionality required by Rubyrep.
7
- module JdbcSQLExtender
8
- RR::ConnectionExtenders.register :jdbc => self
9
-
10
- # Monkey patch for activerecord-jdbc-adapter-0.7.2 as it doesn't set the
11
- # +@active+ flag to false, thus ActiveRecord#active? incorrectly confirms
12
- # the connection to still be active.
13
- def disconnect!
14
- super
15
- @active = false
16
- end
17
-
18
- # Returns an ordered list of primary key column names of the given table
19
- def primary_key_names(table)
20
- if tables.grep(/^#{table}$/i).empty?
21
- # Note: Cannot use tables.include? as returned tables are made lowercase under JRuby MySQL
22
- raise "table '#{table}' does not exist"
23
- end
24
- columns = []
25
- result_set = @connection.connection.getMetaData.getPrimaryKeys(nil, nil, table);
26
- while result_set.next
27
- column_name = result_set.getString("COLUMN_NAME")
28
- key_seq = result_set.getShort("KEY_SEQ")
29
- columns << {:column_name => column_name, :key_seq => key_seq}
30
- end
31
- columns.sort! {|a, b| a[:key_seq] <=> b[:key_seq]}
32
- key_names = columns.map {|column| column[:column_name]}
33
- key_names
34
- end
35
-
36
- # Returns for each given table, which other tables it references via
37
- # foreign key constraints.
38
- # * tables: an array of table names
39
- # * returns: a hash with
40
- # * key: name of the referencing table
41
- # * value: an array of names of referenced tables
42
- def referenced_tables(tables)
43
- result = {}
44
- tables.each do |table|
45
- references_of_this_table = []
46
- result_set = @connection.connection.getMetaData.getImportedKeys(nil, nil, table)
47
- while result_set.next
48
- referenced_table = result_set.getString("PKTABLE_NAME")
49
- unless references_of_this_table.include? referenced_table
50
- references_of_this_table << referenced_table
51
- end
52
- end
53
- result[table] = references_of_this_table
54
- end
55
- result
56
- end
57
- end
58
- end
59
- end
60
-
61
- require 'activerecord-jdbc-adapter'
62
- if ArJdbc.const_defined?(:PostgreSQL)
63
- ArJdbc::PostgreSQL::RecordNotUnique = ActiveRecord::RecordNotUnique unless ArJdbc::PostgreSQL.const_defined?(:RecordNotUnique)
64
- ArJdbc::PostgreSQL::InvalidForeignKey = ActiveRecord::InvalidForeignKey unless ArJdbc::PostgreSQL.const_defined?(:InvalidForeignKey)
65
- end
@@ -1,218 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe BaseRunner do
6
- before(:each) do
7
- end
8
-
9
- it "process_options should make options as nil and teturn status as 1 if command line parameters are unknown" do
10
- # also verify that an error message is printed
11
- $stderr.should_receive(:puts).any_number_of_times
12
- runner = BaseRunner.new
13
- status = runner.process_options ["--nonsense"]
14
- runner.options.should == nil
15
- status.should == 1
16
- end
17
-
18
- it "process_options should make options as nil and return status as 1 if config option is not given" do
19
- # also verify that an error message is printed
20
- $stderr.should_receive(:puts).any_number_of_times
21
- runner = BaseRunner.new
22
- status = runner.process_options ["table"]
23
- runner.options.should == nil
24
- status.should == 1
25
- end
26
-
27
- it "process_options should show the summary description (if usage is printed)" do
28
- org_stderr = $stderr
29
- $stderr = StringIO.new
30
- begin
31
- base_runner = BaseRunner.new
32
- base_runner.should_receive(:summary_description).
33
- and_return("my_summary_description")
34
- base_runner.process_options ["--help"]
35
- $stderr.string.should =~ /my_summary_description/
36
- ensure
37
- $stderr = org_stderr
38
- end
39
- end
40
-
41
- it "process_options should make options as nil and return status as 0 if command line includes '--help'" do
42
- # also verify that the help message is printed
43
- $stderr.should_receive(:puts)
44
- runner = BaseRunner.new
45
- status = runner.process_options ["--help"]
46
- runner.options.should == nil
47
- status.should == 0
48
- end
49
-
50
- it "process_options should set the correct options" do
51
- runner = BaseRunner.new
52
- runner.process_options ["-c", "config_path", "table_spec1", "table_spec2"]
53
- runner.options[:config_file].should == 'config_path'
54
- runner.options[:table_specs].should == ['table_spec1', 'table_spec2']
55
- end
56
-
57
- it "process_options should add runner specific options" do
58
- BaseRunner.any_instance_should_receive(:add_specific_options) do
59
- runner = BaseRunner.new
60
- runner.process_options ["-c", "config_path"]
61
- end
62
- end
63
-
64
- it "process_options should assign the command line specified report printer" do
65
- org_printers = ScanReportPrinters.printers
66
- begin
67
- ScanReportPrinters.instance_eval { class_variable_set :@@report_printers, nil }
68
-
69
- ScanReportPrinters.register :dummy_printer_class, "-y", "--printer_y[=arg]", "description"
70
-
71
- runner = BaseRunner.new
72
- runner.stub!(:session)
73
- runner.process_options ["-c", "config_path", "--printer_y=arg_for_y", "table_spec"]
74
- runner.report_printer_class.should == :dummy_printer_class
75
- runner.report_printer_arg.should == 'arg_for_y'
76
- ensure
77
- ScanReportPrinters.instance_eval { class_variable_set :@@report_printers, org_printers }
78
- end
79
- end
80
-
81
- it "process_options should assign the command line specified progress printer class" do
82
- org_printers = ScanProgressPrinters.printers
83
- begin
84
- ScanProgressPrinters.instance_eval { class_variable_set :@@progress_printers, nil }
85
-
86
- printer_y_class = mock("printer_y_class")
87
- printer_y_class.should_receive(:arg=)
88
-
89
- ScanProgressPrinters.register :printer_y_key, printer_y_class, "-y", "--printer_y[=arg]", "description"
90
-
91
- runner = BaseRunner.new
92
- runner.process_options ["-c", "config_path", "-y", "arg_for_y"]
93
- runner.progress_printer.should == printer_y_class
94
- ensure
95
- ScanProgressPrinters.instance_eval { class_variable_set :@@progress_printers, org_printers }
96
- end
97
- end
98
-
99
- it "add_specific_options should not do anything" do
100
- BaseRunner.new.add_specific_options nil
101
- end
102
-
103
- it "create_processor should not do anything" do
104
- BaseRunner.new.create_processor "dummy_left_table", "dummy_right_table"
105
- end
106
-
107
- it "prepare_table_pairs should return the provided table pairs unmodied" do
108
- BaseRunner.new.prepare_table_pairs(:dummy_table_pairs).
109
- should == :dummy_table_pairs
110
- end
111
-
112
- it "run should not start a scan if the command line is invalid" do
113
- $stderr.should_receive(:puts).any_number_of_times
114
- BaseRunner.any_instance_should_not_receive(:execute) {
115
- BaseRunner.run(["--nonsense"])
116
- }
117
- end
118
-
119
- it "run should start a scan if the command line is correct" do
120
- BaseRunner.any_instance_should_receive(:execute) {
121
- BaseRunner.run(["--config=path", "table"])
122
- }
123
- end
124
-
125
- it "report_printer should create and return the printer as specified per command line options" do
126
- printer_class = mock("printer class")
127
- printer_class.should_receive(:new).with(:dummy_session, :dummy_arg).and_return(:dummy_printer)
128
- runner = BaseRunner.new
129
- runner.stub!(:session).and_return(:dummy_session)
130
- runner.report_printer_class = printer_class
131
- runner.report_printer_arg = :dummy_arg
132
- runner.report_printer.should == :dummy_printer
133
- runner.report_printer # ensure the printer object is cached
134
- end
135
-
136
- it "report_printer should return the ScanSummaryReporter if no other printer was chosen" do
137
- runner = BaseRunner.new
138
- runner.stub!(:session)
139
- runner.report_printer.should be_an_instance_of(ScanReportPrinters::ScanSummaryReporter)
140
- end
141
-
142
- it "progress_printer should return the config file specified printer if none was give via command line" do
143
- runner = BaseRunner.new
144
- runner.options = {
145
- :config_file => "#{File.dirname(__FILE__)}/../config/test_config.rb",
146
- :table_specs => ["scanner_records", "extender_one_record"]
147
- }
148
- config_specified_printer_key = Session.new(standard_config).configuration.options[:scan_progress_printer]
149
- config_specified_printer_class = ScanProgressPrinters.
150
- printers[config_specified_printer_key][:printer_class]
151
- runner.progress_printer.should == config_specified_printer_class
152
- end
153
-
154
- it "signal_scanning_completion should signal completion if the scan report printer supports it" do
155
- printer = mock("printer")
156
- printer.should_receive(:scanning_finished)
157
- printer.should_receive(:respond_to?).with(:scanning_finished).and_return(true)
158
- runner = BaseRunner.new
159
- runner.stub!(:report_printer).and_return(printer)
160
- runner.signal_scanning_completion
161
- end
162
-
163
- it "signal_scanning_completion should not signal completion if the scan report printer doesn't supports it" do
164
- printer = mock("printer")
165
- printer.should_not_receive(:scanning_finished)
166
- printer.should_receive(:respond_to?).with(:scanning_finished).and_return(false)
167
- runner = BaseRunner.new
168
- runner.stub!(:report_printer).and_return(printer)
169
- runner.signal_scanning_completion
170
- end
171
-
172
- it "execute should process the specified tables" do
173
- org_stdout = $stdout
174
- $stdout = StringIO.new
175
- begin
176
- runner = BaseRunner.new
177
- runner.options = {
178
- :config_file => "#{File.dirname(__FILE__)}/../config/test_config.rb",
179
- :table_specs => ["scanner_records", "extender_one_record"]
180
- }
181
-
182
- # create and install a dummy processor
183
- processor = mock("dummy_processor")
184
- processor.should_receive(:run).twice.and_yield(:left, :dummy_row)
185
-
186
- # verify that the scanner receives the progress printer
187
- runner.stub!(:progress_printer).and_return(:dummy_printer_class)
188
- processor.should_receive(:progress_printer=).twice.with(:dummy_printer_class)
189
-
190
- runner.should_receive(:create_processor).twice.and_return(processor)
191
-
192
- # verify that the scanning_completion signal is given to scan report printer
193
- runner.should_receive :signal_scanning_completion
194
-
195
- runner.execute
196
-
197
- # verify that rubyrep infrastructure tables were excluded
198
- runner.session.configuration.excluded_table_specs.include?(/^rr_.*/).should be_true
199
-
200
- $stdout.string.should =~ /scanner_records.* 1\n/
201
- $stdout.string.should =~ /extender_one_record.* 1\n/
202
- ensure
203
- $stdout = org_stdout
204
- end
205
- end
206
-
207
- it "table_pairs should return the prepared table pairs" do
208
- runner = BaseRunner.new
209
- runner.options = {
210
- :config_file => "#{File.dirname(__FILE__)}/../config/test_config.rb",
211
- :table_specs => ['scanner_records']
212
- }
213
- runner.should_receive(:prepare_table_pairs).with([
214
- {:left => 'scanner_records', :right => 'scanner_records'},
215
- ]).and_return(:dummy_table_pairs)
216
- runner.table_pairs.should == :dummy_table_pairs
217
- end
218
- end