benhutton-mysql2psql 0.2.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.
- checksums.yaml +7 -0
- data/CHANGELOG +19 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +34 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +148 -0
- data/Rakefile +95 -0
- data/bin/mysql2psql +7 -0
- data/lib/mysql2psql/config.rb +142 -0
- data/lib/mysql2psql/config_base.rb +39 -0
- data/lib/mysql2psql/converter.rb +62 -0
- data/lib/mysql2psql/errors.rb +16 -0
- data/lib/mysql2psql/mysql_reader.rb +230 -0
- data/lib/mysql2psql/postgres_db_writer.rb +201 -0
- data/lib/mysql2psql/postgres_file_writer.rb +152 -0
- data/lib/mysql2psql/postgres_writer.rb +168 -0
- data/lib/mysql2psql/version.rb +9 -0
- data/lib/mysql2psql/writer.rb +6 -0
- data/lib/mysql2psql.rb +41 -0
- data/mysql2psql.gemspec +106 -0
- data/test/fixtures/config_all_options.yml +50 -0
- data/test/fixtures/seed_integration_tests.sql +119 -0
- data/test/integration/convert_to_db_test.rb +137 -0
- data/test/integration/convert_to_file_test.rb +121 -0
- data/test/integration/converter_test.rb +28 -0
- data/test/integration/mysql_reader_base_test.rb +34 -0
- data/test/integration/mysql_reader_test.rb +41 -0
- data/test/integration/postgres_db_writer_base_test.rb +22 -0
- data/test/lib/ext_test_unit.rb +33 -0
- data/test/lib/test_helper.rb +131 -0
- data/test/units/config_base_test.rb +49 -0
- data/test/units/config_test.rb +73 -0
- data/test/units/postgres_file_writer_test.rb +29 -0
- metadata +220 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql'
|
4
|
+
|
5
|
+
class ConvertToFileTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
seed_test_database
|
9
|
+
@options=get_test_config_by_label(:localmysql_to_file_convert_all)
|
10
|
+
@mysql2psql = Mysql2psql.new([@options.filepath])
|
11
|
+
@mysql2psql.convert
|
12
|
+
@content = IO.read(@mysql2psql.options.destfile)
|
13
|
+
end
|
14
|
+
def teardown
|
15
|
+
delete_files_for_test_config(@options)
|
16
|
+
end
|
17
|
+
def content
|
18
|
+
@content
|
19
|
+
end
|
20
|
+
|
21
|
+
# verify table creation
|
22
|
+
def test_table_creation
|
23
|
+
assert_not_nil content.match('DROP TABLE IF EXISTS "numeric_types_basics" CASCADE')
|
24
|
+
assert_not_nil content.match(/CREATE TABLE "numeric_types_basics"/)
|
25
|
+
end
|
26
|
+
|
27
|
+
# tests for the conversion of numeric types
|
28
|
+
def get_basic_numerics_match(column)
|
29
|
+
Regexp.new('CREATE TABLE "numeric_types_basics".*"' + column + '" ([^\n]*).*\)', Regexp::MULTILINE).match( content )
|
30
|
+
end
|
31
|
+
def test_basic_numerics_tinyint
|
32
|
+
match = get_basic_numerics_match( 'f_tinyint' )
|
33
|
+
assert_match /smallint/,match[1]
|
34
|
+
end
|
35
|
+
def test_basic_numerics_tinyint_u
|
36
|
+
match = get_basic_numerics_match( 'f_tinyint_u' )
|
37
|
+
assert_match /smallint/,match[1]
|
38
|
+
end
|
39
|
+
def test_basic_numerics_smallint
|
40
|
+
match = get_basic_numerics_match( 'f_smallint' )
|
41
|
+
assert_match /smallint/,match[1]
|
42
|
+
end
|
43
|
+
def test_basic_numerics_smallint_u
|
44
|
+
match = get_basic_numerics_match( 'f_smallint_u' )
|
45
|
+
assert_match /integer/,match[1]
|
46
|
+
end
|
47
|
+
def test_basic_numerics_mediumint
|
48
|
+
match = get_basic_numerics_match( 'f_mediumint' )
|
49
|
+
assert_match /integer/,match[1]
|
50
|
+
end
|
51
|
+
def test_basic_numerics_int
|
52
|
+
match = get_basic_numerics_match( 'f_int' )
|
53
|
+
assert_match /integer/,match[1]
|
54
|
+
end
|
55
|
+
def test_basic_numerics_integer
|
56
|
+
match = get_basic_numerics_match( 'f_integer' )
|
57
|
+
assert_match /integer/,match[1]
|
58
|
+
end
|
59
|
+
def test_basic_numerics_bigint
|
60
|
+
match = get_basic_numerics_match( 'f_bigint' )
|
61
|
+
assert_match /bigint/,match[1]
|
62
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_bigint" bigint,.*\)', Regexp::MULTILINE).match( content )
|
63
|
+
end
|
64
|
+
def test_basic_numerics_real
|
65
|
+
match = get_basic_numerics_match( 'f_real' )
|
66
|
+
assert_match /double precision/,match[1]
|
67
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_real" double precision,.*\)', Regexp::MULTILINE).match( content )
|
68
|
+
end
|
69
|
+
def test_basic_numerics_double
|
70
|
+
match = get_basic_numerics_match( 'f_double' )
|
71
|
+
assert_match /double precision/,match[1]
|
72
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_double" double precision,.*\)', Regexp::MULTILINE).match( content )
|
73
|
+
end
|
74
|
+
def test_basic_numerics_float
|
75
|
+
match = get_basic_numerics_match( 'f_float' )
|
76
|
+
assert_match /double precision/,match[1]
|
77
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_float" double precision.*\)', Regexp::MULTILINE).match( content )
|
78
|
+
end
|
79
|
+
def test_basic_numerics_float_u
|
80
|
+
match = get_basic_numerics_match( 'f_float_u' )
|
81
|
+
assert_match /double precision/,match[1]
|
82
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_float_u" double precision.*\)', Regexp::MULTILINE).match( content )
|
83
|
+
end
|
84
|
+
def test_basic_numerics_decimal
|
85
|
+
match = get_basic_numerics_match( 'f_decimal' )
|
86
|
+
assert_match /numeric/,match[1]
|
87
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_decimal" numeric\(10, 0\),.*\)', Regexp::MULTILINE).match( content )
|
88
|
+
end
|
89
|
+
def test_basic_numerics_numeric
|
90
|
+
match = get_basic_numerics_match( 'f_numeric' )
|
91
|
+
assert_match /numeric/,match[1]
|
92
|
+
#assert_not_nil Regexp.new('CREATE TABLE "numeric_types_basics".*"f_numeric" numeric\(10, 0\)[\w\n]*\)', Regexp::MULTILINE).match( content )
|
93
|
+
end
|
94
|
+
|
95
|
+
# test boolean conversion
|
96
|
+
def get_boolean_column_definition_match(column)
|
97
|
+
Regexp.new('CREATE TABLE "test_boolean_conversion".*"' + column + '" ([^\n]*)[^;]*', Regexp::MULTILINE).match(content)[1]
|
98
|
+
end
|
99
|
+
def test_boolean_default_values
|
100
|
+
assert_match /DEFAULT false/, get_boolean_column_definition_match('bit_1_default_0')
|
101
|
+
assert_match /DEFAULT false/, get_boolean_column_definition_match('tinyint_1_default_0')
|
102
|
+
|
103
|
+
assert_match /DEFAULT true/, get_boolean_column_definition_match('bit_1_default_1')
|
104
|
+
assert_match /DEFAULT true/, get_boolean_column_definition_match('tinyint_1_default_1')
|
105
|
+
assert_match /DEFAULT true/, get_boolean_column_definition_match('tinyint_1_default_2')
|
106
|
+
end
|
107
|
+
|
108
|
+
# test autoincrement handling
|
109
|
+
def test_autoincrement
|
110
|
+
assert_not_nil Regexp.new('CREATE TABLE "basic_autoincrement".*"auto_id" integer DEFAULT.*\)', Regexp::MULTILINE).match( content )
|
111
|
+
end
|
112
|
+
|
113
|
+
# test view creation (or lack thereof!)
|
114
|
+
def test_should_not_copy_views_as_tables
|
115
|
+
assert_no_match /CREATE TABLE "test_view"/, content
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_truncate
|
119
|
+
assert_match /TRUNCATE/, content
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql/converter'
|
4
|
+
|
5
|
+
class ConverterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
seed_test_database
|
9
|
+
@@options=get_test_config_by_label(:localmysql_to_file_convert_nothing)
|
10
|
+
end
|
11
|
+
def teardown
|
12
|
+
delete_files_for_test_config(@@options)
|
13
|
+
end
|
14
|
+
def options
|
15
|
+
@@options
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_new_converter
|
19
|
+
assert_nothing_raised do
|
20
|
+
reader=get_test_reader(options)
|
21
|
+
writer=get_test_file_writer(options)
|
22
|
+
converter=Mysql2psql::Converter.new(reader,writer,options)
|
23
|
+
assert_equal 0,converter.convert
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql/mysql_reader'
|
4
|
+
|
5
|
+
class MysqlReaderBaseTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
seed_test_database
|
9
|
+
@options = get_test_config_by_label(:localmysql_to_file_convert_nothing)
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
delete_files_for_test_config(@options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_mysql_connection
|
17
|
+
assert_nothing_raised do
|
18
|
+
reader = Mysql2psql::MysqlReader.new(@options)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
def test_mysql_reconnect
|
22
|
+
assert_nothing_raised do
|
23
|
+
reader = Mysql2psql::MysqlReader.new(@options)
|
24
|
+
reader.reconnect
|
25
|
+
end
|
26
|
+
end
|
27
|
+
def test_mysql_connection_without_port
|
28
|
+
assert_nothing_raised do
|
29
|
+
@options.mysqlport = ""
|
30
|
+
@options.mysqlsocket = ""
|
31
|
+
reader = Mysql2psql::MysqlReader.new(@options)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MysqlReaderTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
seed_test_database
|
7
|
+
@options = get_test_config_by_label(:localmysql_to_file_convert_nothing)
|
8
|
+
@reader=get_test_reader(@options)
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
delete_files_for_test_config(@options)
|
12
|
+
end
|
13
|
+
def reader
|
14
|
+
@reader
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_db_connection
|
18
|
+
assert_nothing_raised do
|
19
|
+
reader.mysql.ping
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def test_tables_collection
|
23
|
+
values = reader.tables.select{|t| t.name == 'numeric_types_basics'}
|
24
|
+
assert_true values.length==1
|
25
|
+
assert_equal 'numeric_types_basics', values[0].name
|
26
|
+
end
|
27
|
+
def test_paginated_read
|
28
|
+
expected_rows=5
|
29
|
+
page_size=2
|
30
|
+
expected_pages=(1.0 * expected_rows / page_size).ceil
|
31
|
+
|
32
|
+
row_count=my_row_count=0
|
33
|
+
table = reader.tables.select{|t| t.name == 'numeric_types_basics'}[0]
|
34
|
+
reader.paginated_read(table, page_size) do |row,counter|
|
35
|
+
row_count=counter
|
36
|
+
my_row_count+=1
|
37
|
+
end
|
38
|
+
assert_equal expected_rows, row_count
|
39
|
+
assert_equal expected_rows, my_row_count
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql/postgres_db_writer'
|
4
|
+
|
5
|
+
class PostgresDbWriterBaseTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
seed_test_database
|
9
|
+
@options = get_test_config_by_label(:localmysql_to_db_convert_nothing)
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
delete_files_for_test_config(@options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_pg_connection
|
17
|
+
assert_nothing_raised do
|
18
|
+
reader = Mysql2psql::PostgresDbWriter.new(@options)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Test::Unit
|
2
|
+
|
3
|
+
class TestCase
|
4
|
+
|
5
|
+
def self.must(name, &block)
|
6
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
7
|
+
defined = instance_method(test_name) rescue false
|
8
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
9
|
+
if block_given?
|
10
|
+
define_method(test_name, &block)
|
11
|
+
else
|
12
|
+
define_method(test_name) do
|
13
|
+
flunk "No implementation provided for #{name}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
module Test::Unit::Assertions
|
23
|
+
def assert_false(object, message="")
|
24
|
+
assert_equal(false, object, message)
|
25
|
+
end
|
26
|
+
def assert_true(object, message="")
|
27
|
+
assert_equal(true, object, message)
|
28
|
+
end
|
29
|
+
def assert_nil(object, message="")
|
30
|
+
assert_equal(nil, object, message)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
begin
|
3
|
+
gem 'test-unit'
|
4
|
+
require "test/unit"
|
5
|
+
rescue LoadError
|
6
|
+
# assume using stdlib Test:Unit
|
7
|
+
require 'test/unit'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'ext_test_unit'
|
11
|
+
|
12
|
+
def seed_test_database
|
13
|
+
options=get_test_config_by_label(:localmysql_to_file_convert_nothing)
|
14
|
+
seedfilepath = "#{File.dirname(__FILE__)}/../fixtures/seed_integration_tests.sql"
|
15
|
+
mysql_cmd = `which mysql`.empty? ? 'mysql5' : 'mysql'
|
16
|
+
rc=system("#{mysql_cmd} -u#{options.mysqlusername} #{options.mysqldatabase} < #{seedfilepath}")
|
17
|
+
raise StandardError unless rc
|
18
|
+
return true
|
19
|
+
rescue
|
20
|
+
raise StandardError.new("Failed to seed integration test db. See README for setup requirements.")
|
21
|
+
ensure
|
22
|
+
delete_files_for_test_config(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_test_reader(options)
|
26
|
+
require 'mysql2psql/mysql_reader'
|
27
|
+
Mysql2psql::MysqlReader.new(options)
|
28
|
+
rescue
|
29
|
+
raise StandardError.new("Failed to initialize integration test db. See README for setup requirements.")
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_test_file_writer(options)
|
33
|
+
require 'mysql2psql/postgres_file_writer'
|
34
|
+
Mysql2psql::PostgresFileWriter.new(options.destfile)
|
35
|
+
rescue => e
|
36
|
+
puts e.inspect
|
37
|
+
raise StandardError.new("Failed to initialize file writer from #{options.inspect}. See README for setup requirements.")
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_test_converter(options)
|
41
|
+
require 'mysql2psql/converter'
|
42
|
+
reader=get_test_reader(options)
|
43
|
+
writer=get_test_file_writer(options)
|
44
|
+
Mysql2psql::Converter.new(reader,writer,options)
|
45
|
+
rescue
|
46
|
+
raise StandardError.new("Failed to initialize converter from #{options.inspect}. See README for setup requirements.")
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_temp_file(basename)
|
50
|
+
require 'tempfile'
|
51
|
+
f = Tempfile.new(basename)
|
52
|
+
path = f.path
|
53
|
+
f.close!()
|
54
|
+
path
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_new_test_config(options={})
|
58
|
+
require 'mysql2psql/config'
|
59
|
+
require 'mysql2psql/config_base'
|
60
|
+
if options.delete(:to_file)
|
61
|
+
options[:to_filename] = get_temp_file('mysql2psql_tmp_output')
|
62
|
+
end
|
63
|
+
configtext = Mysql2psql::Config.template(options)
|
64
|
+
configfile=get_temp_file('mysql2psql_tmp_config')
|
65
|
+
File.open(configfile, 'w') {|f| f.write(configtext) }
|
66
|
+
Mysql2psql::ConfigBase.new( configfile )
|
67
|
+
rescue
|
68
|
+
raise StandardError.new("Failed to initialize options from #{configfile}. See README for setup requirements.")
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_test_config_by_label(name)
|
72
|
+
options = case name
|
73
|
+
when :localmysql_to_file_convert_nothing
|
74
|
+
{
|
75
|
+
:to_file => true,
|
76
|
+
:include_tables => ['unobtainium'],
|
77
|
+
:exclude_tables => ['kryptonite'],
|
78
|
+
:suppress_data => true,
|
79
|
+
:suppress_ddl => true,
|
80
|
+
:supress_sequence_update => false,
|
81
|
+
:suppress_indexes => false,
|
82
|
+
:force_truncate => false,
|
83
|
+
:use_timezones => false
|
84
|
+
}
|
85
|
+
when :localmysql_to_file_convert_all
|
86
|
+
{
|
87
|
+
:to_file => true,
|
88
|
+
:include_tables => [],
|
89
|
+
:exclude_tables => [],
|
90
|
+
:suppress_data => false,
|
91
|
+
:suppress_ddl => false,
|
92
|
+
:supress_sequence_update => false,
|
93
|
+
:suppress_indexes => false,
|
94
|
+
:force_truncate => true,
|
95
|
+
:use_timezones => false
|
96
|
+
}
|
97
|
+
when :localmysql_to_db_convert_all
|
98
|
+
{
|
99
|
+
:to_file => false,
|
100
|
+
:include_tables => [],
|
101
|
+
:exclude_tables => [],
|
102
|
+
:suppress_data => false,
|
103
|
+
:suppress_ddl => false,
|
104
|
+
:supress_sequence_update => false,
|
105
|
+
:suppress_indexes => false,
|
106
|
+
:force_truncate => false,
|
107
|
+
:use_timezones => false
|
108
|
+
}
|
109
|
+
when :localmysql_to_db_convert_nothing
|
110
|
+
{
|
111
|
+
:to_file => false,
|
112
|
+
:include_tables => ['unobtainium'],
|
113
|
+
:exclude_tables => ['kryptonite'],
|
114
|
+
:suppress_data => true,
|
115
|
+
:suppress_ddl => true,
|
116
|
+
:supress_sequence_update => false,
|
117
|
+
:suppress_indexes => false,
|
118
|
+
:force_truncate => false,
|
119
|
+
:use_timezones => false
|
120
|
+
}
|
121
|
+
else
|
122
|
+
raise StandardError.new("Invalid label: #{name}")
|
123
|
+
end
|
124
|
+
get_new_test_config(options)
|
125
|
+
end
|
126
|
+
|
127
|
+
def delete_files_for_test_config(config)
|
128
|
+
File.delete(config.destfile) if File.exists?(config.destfile)
|
129
|
+
File.delete(config.filepath) if File.exists?(config.filepath)
|
130
|
+
rescue
|
131
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'mysql2psql/config_base'
|
3
|
+
|
4
|
+
#
|
5
|
+
#
|
6
|
+
class ConfigBaseTest < Test::Unit::TestCase
|
7
|
+
attr_reader :config, :configfilepath
|
8
|
+
def setup
|
9
|
+
@configfilepath="#{File.dirname(__FILE__)}/../fixtures/config_all_options.yml"
|
10
|
+
@config = Mysql2psql::ConfigBase.new( configfilepath )
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@config = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_config_loaded
|
18
|
+
assert_not_nil config.config
|
19
|
+
assert_equal configfilepath,config.filepath
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_uninitialized_error_when_not_found_and_no_default
|
23
|
+
assert_raises(Mysql2psql::UninitializedValueError) do
|
24
|
+
value = @config.not_found(:none)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_default_when_not_found
|
29
|
+
expected = 'defaultvalue'
|
30
|
+
value = @config.not_found(expected)
|
31
|
+
assert_equal expected,value
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_mysql_hostname
|
35
|
+
value = @config.mysqlhostname
|
36
|
+
assert_equal 'localhost',value
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_mysql_hostname_array_access
|
40
|
+
value = @config[:mysqlhostname]
|
41
|
+
assert_equal 'localhost',value
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_dest_file
|
45
|
+
value = @config.destfile
|
46
|
+
assert_equal 'somefile',value
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql/config'
|
4
|
+
|
5
|
+
class ConfigTest < Test::Unit::TestCase
|
6
|
+
attr_reader :configfile_new, :configfile_all_opts, :configfile_not_found
|
7
|
+
def setup
|
8
|
+
@configfile_all_opts = "#{File.dirname(__FILE__)}/../fixtures/config_all_options.yml"
|
9
|
+
@configfile_not_found = "#{File.dirname(__FILE__)}/../fixtures/config_not_found.yml.do_not_create_this_file"
|
10
|
+
@configfile_new = get_temp_file('mysql2psql_test_config')
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
File.delete(configfile_new) if File.exists?(configfile_new)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_config_loaded
|
17
|
+
value = Mysql2psql::Config.new(configfile_all_opts, false)
|
18
|
+
assert_not_nil value
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_config_file_not_found
|
22
|
+
assert_raise(Mysql2psql::ConfigurationFileNotFound) do
|
23
|
+
value = Mysql2psql::Config.new(configfile_not_found, false)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_initialize_new_config_file
|
28
|
+
assert_raise(Mysql2psql::ConfigurationFileInitialized) do
|
29
|
+
value = Mysql2psql::Config.new(configfile_new, true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_config_option_pgdatabase_as_array_index
|
34
|
+
expected = 'somename'
|
35
|
+
config = Mysql2psql::Config.new(configfile_all_opts, false)
|
36
|
+
assert_equal expected,config[:pgdatabase]
|
37
|
+
end
|
38
|
+
def test_template_option_to_filename
|
39
|
+
expected = 'test_filename'
|
40
|
+
value = Mysql2psql::Config.template({ :to_filename => expected })
|
41
|
+
assert_match /file: #{expected}/,value
|
42
|
+
end
|
43
|
+
def test_template_option_suppress_data
|
44
|
+
expected = true
|
45
|
+
value = Mysql2psql::Config.template({ :suppress_data => expected })
|
46
|
+
assert_match /suppress_data: #{expected}/,value #NB: option spelling needs fixing
|
47
|
+
end
|
48
|
+
def test_template_option_suppress_ddl
|
49
|
+
expected = true
|
50
|
+
value = Mysql2psql::Config.template({ :suppress_ddl => expected })
|
51
|
+
assert_match /suppress_ddl: #{expected}/,value #NB: option spelling needs fixing
|
52
|
+
end
|
53
|
+
def test_template_option_suppress_sequence_update
|
54
|
+
expected = true
|
55
|
+
value = Mysql2psql::Config.template({ :suppress_sequence_update => expected })
|
56
|
+
assert_match /suppress_sequence_update: #{expected}/,value #NB: option spelling needs fixing
|
57
|
+
end
|
58
|
+
def test_template_option_suppress_indexes
|
59
|
+
expected = true
|
60
|
+
value = Mysql2psql::Config.template({ :suppress_indexes => expected })
|
61
|
+
assert_match /suppress_indexes: #{expected}/,value #NB: option spelling needs fixing
|
62
|
+
end
|
63
|
+
def test_template_option_force_truncate
|
64
|
+
expected = true
|
65
|
+
value = Mysql2psql::Config.template({ :force_truncate => expected })
|
66
|
+
assert_match /force_truncate: #{expected}/,value
|
67
|
+
end
|
68
|
+
def test_template_option_use_timezones
|
69
|
+
expected = true
|
70
|
+
value = Mysql2psql::Config.template({ :use_timezones => expected })
|
71
|
+
assert_match /use_timezones: #{expected}/,value
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'mysql2psql'
|
4
|
+
|
5
|
+
class PostgresFileWriterTest < Test::Unit::TestCase
|
6
|
+
attr_accessor :destfile
|
7
|
+
def setup
|
8
|
+
begin
|
9
|
+
f = Tempfile.new('mysql2psql_test_destfile')
|
10
|
+
@destfile = f.path
|
11
|
+
f.close!()
|
12
|
+
rescue => e
|
13
|
+
raise StandardError.new("Failed to initialize integration test db. See README for setup requirements.")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
def teardown
|
17
|
+
File.delete(destfile) if File.exists?(destfile)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_basic_write
|
21
|
+
writer = Mysql2psql::PostgresFileWriter.new(destfile)
|
22
|
+
writer.close
|
23
|
+
content = IO.read(destfile)
|
24
|
+
assert_not_nil content.match("SET client_encoding = 'UTF8'")
|
25
|
+
assert_nil content.match("unobtanium")
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|