#At file:///home/ksm/sun/repo/WL4840/nuts/ based on revid:alfranio.correia@stripped
319 Serge Kozlov 2009-05-18
1. Update for WL#4840, WL#4845, #WL4846:
a) main code for support of matrix moved into matrix.pl
b) now each test has own config file
c) Rewritten code by code-reviews (remove die/exit, optimization)
2. WL#4853: added test data_types_charset.pm
3. WL#4854: added test data_types_eq.pm
added:
suites/rep/data_types/
suites/rep/data_types/config.pl
suites/rep/data_types/config_charset.pl
suites/rep/data_types/config_eq.pl
suites/rep/data_types/data_types.conf
suites/rep/data_types/matrix.dat
suites/rep/data_types/matrix.pl
suites/rep/data_types_charset.pm
suites/rep/data_types_eq.pm
suites/rep/data_types_main.pm
=== added directory 'suites/rep/data_types'
=== added file 'suites/rep/data_types/config.pl'
--- a/suites/rep/data_types/config.pl 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types/config.pl 2009-05-18 09:07:00 +0000
@@ -0,0 +1,40 @@
+package rep::data_types::config;
+
+BEGIN { }
+
+# Options for test
+
+# Verbose
+our $verbose= 1;
+
+# Record matrix
+our $record= 0;
+
+#
+our $mode= "";
+# Paths to files
+
+our $data_types_config_file= "./suites/rep/data_types/data_types.conf";
+our $error_messages_file= $Parameters::build . "/sql/share/errmsg.txt";
+our $matrix_file= "./suites/rep/data_types/matrix.dat";
+our $matrix_report_file= "./var/tmp/data_types";
+
+# Server options
+our $server_options = [
+ {
+ "name" => "engine",
+ "affected" => "master,slave",
+ "values" => ["MyISAM", "InnoDB", "MEMORY"],
+# "values" => ["InnoDB"],
+ },
+ {
+ "name" => "binlog_format",
+ "affected" => "master",
+ "values" => ["MIXED", "STATEMENT", "ROW"],
+# "values" => ["MIXED"],
+ },
+];
+
+return 1;
+
+END { }
=== added file 'suites/rep/data_types/config_charset.pl'
--- a/suites/rep/data_types/config_charset.pl 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types/config_charset.pl 2009-05-18 09:07:00 +0000
@@ -0,0 +1,59 @@
+package rep::data_types::config;
+
+BEGIN { }
+
+# Options for test
+
+# Verbose
+our $verbose= 1;
+
+# Record matrix
+our $record= 0;
+
+#
+our $mode= "";
+# Paths to files
+
+our $data_types_config_file= "./suites/rep/data_types/data_types.conf";
+our $error_messages_file= $Parameters::build . "/sql/share/errmsg.txt";
+our $matrix_file= "./suites/rep/data_types/matrix.dat";
+our $matrix_report_file= "./var/tmp/data_types";
+
+# Server options
+our $server_options = [
+ {
+ "name" => "engine",
+ "affected" => "master,slave",
+ "values" => ["MyISAM", "InnoDB", "MEMORY"],
+# "values" => ["InnoDB"],
+ },
+ {
+ "name" => "binlog_format",
+ "affected" => "master",
+ "values" => ["MIXED", "STATEMENT", "ROW"],
+# "values" => ["MIXED"],
+ },
+
+];
+
+our $charsets = {
+ "ucs2,utf16,utf32,utf8" => ["_general_ci", "_bin", "_czech_ci", "_danish_ci", "_esperanto_ci", "_estonian_ci", "_hungarian_ci", "_icelandic_ci", "_latvian_ci", "_lithuanian_ci", "_persian_ci", "_polish_ci", "_roman_ci", "_romanian_ci", "_sinhala_ci", "_slovak_ci", "_slovenian_ci", "_spanish2_ci", "_spanish_ci", "_swedish_ci", "_turkish_ci", "_unicode_ci"],
+ "ascii,cp850,macroman,cp852,keybcs2,macce,armscii8,cp1256,geostd8,greek,hebrew,cp866,koi8r,koi8u" => ["_general_ci", "_bin"],
+ "dec8,swe7" => ["_swedish_ci", "_bin"],
+ "hp8" => ["_english_ci", "_bin"],
+ "latin1" => ["_swedish_ci", "_bin", "_danish_ci", "_general_ci", "_general_cs", "_german1_ci", "_german2_ci", "_spanish_ci"],
+ "cp1250" => ["_general_ci", "_bin", "_croatian_ci", "_szech_cs", "_polish_ci"],
+ "latin2" => ["_general_ci", "_bin", "_croatian_ci", "_szech_cs", "_hungarian_ci"],
+ "latin5" => ["_turkish_ci", "_bin"],
+ "cp1257" => ["_general_ci", "_bin", "_lithuanian_ci"],
+ "latin7" => ["_general_ci", "_bin", "_estonian_cs", "_general_cs"],
+ "cp1251" => ["_general_ci", "_bin", "_bulgarian_ci", "_general_cs", "_ukrainian_ci"],
+ "big5,gb2312,gbk" => ["_chinese_ci", "_bin"],
+ "cp932,eucjpms,sjis" => ["_japanese_ci", "_bin"],
+ "euckr" => ["_korean_ci", "_bin"],
+ "tis620" => ["_thai_ci", "_bin"],
+};
+
+return 1;
+
+END { }
=== added file 'suites/rep/data_types/config_eq.pl'
--- a/suites/rep/data_types/config_eq.pl 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types/config_eq.pl 2009-05-18 09:07:00 +0000
@@ -0,0 +1,39 @@
+package rep::data_types::config;
+
+BEGIN { }
+
+# Options for test
+
+# Verbose
+our $verbose= 1;
+
+# Record matrix
+our $record= 0;
+
+#
+our $mode= "";
+# Paths to files
+
+our $data_types_config_file= "./suites/rep/data_types/data_types.conf";
+our $error_messages_file= $Parameters::build . "/sql/share/errmsg.txt";
+our $matrix_file= "./suites/rep/data_types/matrix.dat";
+
+# Server options
+our $server_options = [
+ {
+ "name" => "engine",
+ "affected" => "master,slave",
+ "values" => ["MyISAM", "InnoDB", "MEMORY"],
+# "values" => ["InnoDB"],
+ },
+ {
+ "name" => "binlog_format",
+ "affected" => "master",
+ "values" => ["MIXED", "STATEMENT", "ROW"],
+# "values" => ["MIXED"],
+ },
+];
+
+return 1;
+
+END { }
=== added file 'suites/rep/data_types/data_types.conf'
--- a/suites/rep/data_types/data_types.conf 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types/data_types.conf 2009-05-18 09:07:00 +0000
@@ -0,0 +1,151 @@
+[BIT]
+group: numeric
+values: 0b0000000000000000000000000000000000000000000000000000000000000000, 0b1111111111111111111111111111111111111111111111111111111111111111
+
+[TINYINT SIGNED]
+group: numeric
+values: -128, 0, 127
+
+[TINYINT UNSIGNED]
+group: numeric
+values: 0, 255
+
+[SMALLINT SIGNED]
+group: numeric
+values: -32768, 0, 32767
+
+[SMALLINT UNSIGNED]
+group: numeric
+values: 0, 65535
+
+[MEDIUMINT SIGNED]
+group: numeric
+values: -8388608, 0, 8388607
+
+[MEDIUMINT UNSIGNED]
+group: numeric
+values: 0, 16777215
+
+[INT SIGNED]
+group: numeric
+values: -2147483648, 0, 2147483647
+
+[INT UNSIGNED]
+group: numeric
+values: 0, 4294967295
+
+[BIGINT SIGNED]
+group: numeric
+values: -9223372036854775808, 0, 9223372036854775807
+
+[BIGINT UNSIGNED]
+group: numeric
+values: 0, 18446744073709551615
+
+[FLOAT SIGNED]
+group: numeric
+values: -3.402823466E+38, -1.175494351E-38, 0, 1.175494351E-38, 3.402823466E+38
+
+[FLOAT UNSIGNED]
+group: numeric
+values: 0, 1.175494351E-38, 3.402823466E+38
+
+[DOUBLE SIGNED]
+group: numeric
+values: -1.7976931348623157e+308, -2.2250738585072014E-308, 0, 2.2250738585072014E-308, 1.7976931348623157e+308
+
+[DOUBLE UNSIGNED]
+group: numeric
+values: 0, 2.2250738585072014E-308, 1.7976931348623157e+308
+
+[DATETIME]
+group: datetime
+values: '1000-01-01 00:00:00', '9999-12-31 23:59:59'
+
+[DATE]
+group: datetime
+values: '1000-01-01', '9999-12-31'
+
+[TIME]
+group: datetime
+values: '-838:59:59', '838:59:59'
+
+[TIMESTAMP]
+group: datetime
+values: '1970-01-01 00:00:01', '2038-01-09 03:14:07'
+
+[YEAR(2)]
+group: datetime
+values: '00', '69', '70', '99'
+
+[YEAR(4)]
+group: datetime
+values: '1901', '2155'
+
+[CHAR(255)]
+group: string
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[VARCHAR(255)]
+group: string
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[BINARY(255)]
+group: binary
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[VARBINARY(255)]
+group: binary
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[TINYBLOB]
+group: binary
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[BLOB]
+group: binary
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: REPEAT(@test_data,200)
+
+[MEDIUMBLOB]
+group: binary
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: REPEAT(@test_data,1000)
+
+#[LONGBLOB]
+#group: string
+#engines: innodb, myisam
+#query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+#values: REPEAT(@test_data,65000)
+
+[TINYTEXT]
+group: string
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: @test_data
+
+[TEXT]
+group: string
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: REPEAT(@test_data,200)
+
+[MEDIUMTEXT]
+group: string
+engines: innodb, myisam
+query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+values: REPEAT(@test_data,1000)
+
+#[LONGTEXT]
+#group: string
+#engines: innodb, myisam
+#query_before: SET @test_data = CHAR(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255)
+#values: REPEAT(@test_data,66000)
=== added file 'suites/rep/data_types/matrix.dat'
Binary files a/suites/rep/data_types/matrix.dat 1970-01-01 00:00:00 +0000 and b/suites/rep/data_types/matrix.dat 2009-05-18 09:07:00 +0000 differ
=== added file 'suites/rep/data_types/matrix.pl'
--- a/suites/rep/data_types/matrix.pl 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types/matrix.pl 2009-05-18 09:07:00 +0000
@@ -0,0 +1,566 @@
+package rep::data_types::matrix;
+
+BEGIN {}
+
+use strict;
+use warnings;
+use Storable;
+use My::Nuts::Library::Kernel::Server;
+use My::Nuts::Library::Kernel::Manager;
+use My::Nuts::Library::Kernel::Result;
+use My::Nuts::Library::Kernel::Replication;
+use My::Nuts::Library::Tests::SimpleTest;
+
+
+sub retrieve_matrix()
+{
+ my $filename= shift;
+ my $matrix= {};
+ $matrix= retrieve($filename) unless (!-e $filename);
+ return $matrix;
+}
+
+sub store_matrix()
+{
+ my ($mref, $filename)= @_;
+ $mref->{"info"}->{"created"}= localtime();
+ store($mref, $filename);
+}
+
+
+sub get_data_types()
+{
+ my $filename= shift;
+ my $types= {};
+ my $section;
+ open F, $filename or exit_from_test (1, "Could not open configuration file \"$filename\"");
+ while(<F>)
+ {
+ if (/^\#.*$/)
+ {
+ next;
+ }
+ elsif (/\[(.+)\]/)
+ {
+ $section= "$1";
+ }
+ elsif (/^values *\:\ *(.+\,.+)/)
+ {
+ $types->{$section}->{"values"}= [(split /\,\ +/, $1)];
+ }
+ elsif (/^size *\:\ *(.+\.\..+)/)
+ {
+ $types->{$section}->{"size"}= [(split /\ *\.\.\ */, $1)];
+ }
+ elsif (/^(query_before|group)\ *\:\ *(.+)/)
+ {
+ $types->{$section}->{$1}= $2;
+ }
+ elsif (/^([a-z\_A-Z]+)\ *\:\ *(.+\,.+)/)
+ {
+ $types->{$section}->{$1}= [(split /\,\ */, $2)];
+ }
+ elsif (/^([a-z\_A-Z]+)\ *\:\ *(.+)/)
+ {
+ $types->{$section}->{$1}= [$2];
+ }
+ }
+ close F;
+ return $types;
+}
+
+sub generate_matrix()
+{
+ my $params= shift;
+ my $types= $params->{"data_types"};
+ my $mode= $params->{"mode"};
+ my $matrix= [];
+ my $types_null;
+ if ($mode->{"null"})
+ {
+ $types_null = [$mode->{"null"}];
+ }
+ else
+ {
+ $types_null = ["NULL", "NOT NULL"];
+ }
+ # Generate matrix
+ foreach my $type_from (sort keys %$types)
+ {
+ foreach my $type_to (sort keys %$types)
+ {
+ foreach my $null_from ( @$types_null )
+ {
+ foreach my $null_to ( @$types_null )
+ {
+ my @values_from = @{$types->{$type_from}->{"values"}};
+ if ($null_from =~ m/^NULL$/)
+ {
+ unshift(@values_from, "NULL");
+ }
+ my @values_to = @{$types->{$type_to}->{"values"}};
+ if ($null_to =~ m/^NULL$/)
+ {
+ unshift(@values_to, "NULL");
+ }
+ my $ext_from= "$type_from $null_from";
+ $ext_from=~s/\ {2,10}//g;
+ $ext_from=~s/\ *$//g;
+ my $ext_to= "$type_to $null_to";
+ $ext_to=~s/\ {2,10}//g;
+ $ext_to=~s/\ *$//g;
+ my $add= 0;
+ if ($mode->{"collect"})
+ {
+ if ($ext_from eq $ext_to && $mode->{"collect"} eq "equal")
+ {
+ $add= 1;
+ }
+ }
+ if ($mode->{"group"})
+ {
+ my $group = $mode->{"group"};
+ if ($types->{$type_from}->{"group"} =~ qr/$group/ && $types->{$type_to}->{"group"} =~ qr/$group/ )
+ {
+ $add= 1;
+ }
+ }
+ if (scalar(keys %$mode) == 0)
+ {
+ $add= 1;
+ }
+ if ($add == 1)
+ {
+ push(@$matrix, {"from_orig"=> $type_from, "to_orig"=> $type_to, "from"=> $ext_from, "to"=> $ext_to, "values_from"=> [@values_from], "values_to"=> [@values_to]});
+ }
+ }
+ }
+ }
+ }
+ return $matrix;
+}
+
+sub get_server_options()
+{
+ my $params= shift;
+ my $server_options= $params->{"server_options"};
+ my $filter= $params->{"filter"};
+ my $opts= [];
+ my $option_num= 1;
+ my $diva= {};
+ my $cur_val;
+ foreach my $option (@{$server_options})
+ {
+ if ($option->{"affected"} =~ m/$filter/)
+ {
+ $diva->{$option->{"name"}}= $option_num;
+ $option_num= $option_num * scalar( @{$option->{"values"}} );
+ }
+ }
+ for (my $i = 0; $i < $option_num; $i++)
+ {
+ $cur_val= $i;
+ my $opt= {};
+ foreach my $option (reverse @{$server_options})
+ {
+ if ($option->{"affected"} =~ m/$filter/)
+ {
+ my $k= int($cur_val/$diva->{$option->{"name"}});
+ if ($diva->{$option->{"name"}} == 1)
+ {
+ $k= $cur_val % scalar( @{$option->{"values"}} );
+ }
+ $opt->{$option->{"name"}}= $option->{"values"}->[$k];
+ $cur_val= $cur_val % $diva->{$option->{"name"}};
+ }
+ }
+ push(@$opts, $opt);
+ }
+ return $opts;
+}
+
+
+sub get_error_msgs()
+{
+ my $errfile= shift;
+ my $errors= {};
+ open F, $errfile or exit_from_test (1, "Could not open file \"$errfile\"");
+ my $start_error_number;
+ while(<F>)
+ {
+ if (m/start-error-number +(\d+)/)
+ {
+ $start_error_number= $1;
+ }
+ elsif (m/^((ER|WARN)[A-Za-z0-9_\-]+)/)
+ {
+ $errors->{$start_error_number}= $1;
+ $errors->{$start_error_number}=~ s/\s+$//;
+ $start_error_number++;
+ }
+ }
+ close F;
+ return $errors;
+}
+
+sub vprint
+{
+ my $vmode= shift;
+ my $text= shift;
+ if ($rep::data_types::config::verbose >= $vmode)
+ {
+ print $text;
+ }
+}
+
+sub sync
+{
+ my ($master,$slave)= @_;
+ if (
+ (retrieve_master_status($master, "Position") eq retrieve_slave_status($slave, "Exec_Master_Log_Pos")) &&
+ (retrieve_slave_status($slave, "Slave_IO_Running") =~ m/yes/i) &&
+ (retrieve_slave_status($slave, "Slave_SQL_Running") =~ m/yes/i))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+sub matrix_key
+{
+ my ($opt_from, $opt_to, $type_from, $type_to) = @_;
+ my $opt_name;
+ my $matrix_key = "master:[type=" . $type_from . ",";
+ foreach $opt_name ( sort keys %$opt_from)
+ {
+ $matrix_key .= "$opt_name=" . $opt_from->{$opt_name} . ",";
+ }
+ $matrix_key =~ s/\,$//;
+ $matrix_key .= "];slave:[type=" . $type_to . ",";;
+ foreach $opt_name ( sort keys %$opt_to)
+ {
+ $matrix_key .= "$opt_name=" . $opt_to->{$opt_name} . ",";
+ }
+ $matrix_key =~ s/\,$//;
+ $matrix_key .= "]";
+ return lc $matrix_key;
+}
+
+sub report_matrix()
+{
+ my $params= shift;
+ my $mref= $params->{"matrix"};
+ my $filename= $params->{"filename"};
+ my $r_matrix = {};
+ my $opt;
+ my $t_from;
+ my $t_to;
+ my $html_out = "<html>\n<head><title>Data type matrix</title></head><body>\nReport created by ".$mref->{"info"}->{"created"}."<br>\n";
+ $html_out .= "ER_* - MySQL error messages, TER_* - errors in test: data replicated but invalid<br>\r";
+ # repack matrix
+ foreach my $key ( keys %$mref )
+ {
+ if ($key =~ m/^master\:\[type\=([0-9a-z ()]+)\,*.*\];slave\:\[type\=([0-9a-z ()]+)\,*.*\]$/)
+ {
+ $t_from= $1;
+ $t_to= $2;
+ $opt= $key;
+ $opt=~ s/type\=[0-9a-z ()]+\,//g;
+ $r_matrix->{$opt}->{$t_from}->{$t_to}= $mref->{$key}->{"result"};
+ }
+ }
+ foreach $opt ( keys %$r_matrix)
+ {
+ $html_out .= "<h3>$opt</h3>\n<table border=1><tr>\n\t<td></td>\n";
+ foreach $t_from ( sort keys %{$r_matrix->{$opt}} )
+ {
+ $html_out .= "\t<td><b>$t_from</b></td>\n";
+ }
+ $html_out .= "</tr>\n";
+ foreach $t_from ( sort keys %{$r_matrix->{$opt}} )
+ {
+ $html_out .= "<tr>\n\t<td><b>$t_from</b></td>\n";
+ foreach $t_to ( sort keys %{$r_matrix->{$opt}->{$t_from}} )
+ {
+ my $result= "";
+ my $bg= "#ffffff";
+ if ($r_matrix->{$opt}->{$t_from}->{$t_to})
+ {
+ $result= $r_matrix->{$opt}->{$t_from}->{$t_to};
+ if ($result =~ m/ok/i)
+ {
+ $bg= "#80ff80";
+ }
+ elsif ($result =~ m/^TER_.+_ENGINE_WRONG_TYPE/)
+ {
+ $bg= "#c0c0c0";
+ }
+ elsif ($result =~ m/^(ER\_|TER\_).+/)
+ {
+ $bg= "#ff5b5b";
+ }
+ }
+ $html_out .= "\t<td bgcolor=$bg>$result</td>\n";
+ }
+ $html_out .= "</tr>\n";
+ }
+ $html_out .= "</tr>\n</table>\n";
+ }
+ $html_out .= "</body>\n</html>\n";
+ open MATRIX, ">$filename";
+ print MATRIX $html_out;
+ close MATRIX;
+}
+
+sub test_matrix()
+{
+ my $params= shift;
+ my $master= $params->{"master"};
+ my $slave= $params->{"slave"};
+ my $options_from= $params->{"master_options"};
+ my $options_to= $params->{"slave_options"};
+ my $types= $params->{"data_types"};
+ my $errors= $params->{"errors"};
+ my $matrix= $params->{"matrix"};
+ my $matrix_cur= $params->{"current_matrix"};
+ my $matrix_orig= $params->{"original_matrix"};
+ my $counter= 1;
+ my $test_error;
+ my $test_desc;
+ my $slave_query;
+ my $rs;
+ my @rs_data= ();
+ my $matrix_key;
+ my $err;
+ foreach my $option_set_from (@$options_from)
+ {
+ foreach my $option_set_to (@$options_to)
+ {
+ my $engine_from= " ENGINE=" . $option_set_from->{"engine"};
+ my $engine_to= " ENGINE=" . $option_set_to->{"engine"};
+ my $need_restart_rep= 0;
+ my $skip_pair= 0;
+ ok_sql ( $master, "SET BINLOG_FORMAT='" . $option_set_from->{"binlog_format"} . "'" );
+ vprint(1, "*** master:" . join(",", (values %$option_set_from)) . ", slave:" . join(",", (values %$option_set_to)) . " ***\n");
+ foreach my $pair (@$matrix)
+ {
+ my $type_from= $pair->{"from"};
+ my $type_to= $pair->{"to"};
+ my $values_from= $pair->{"values_from"};
+ $matrix_key = matrix_key($option_set_from, $option_set_to, $type_from, $type_to);
+ my $test_info= "$type_from -> $type_to";
+ if ($need_restart_rep == 1)
+ {
+ stop_replication($slave);
+ reset_master($master);
+ reset_slave($slave);
+ attach($master, $slave);
+ ok_wait_start_replication($slave, 0.1);
+ $need_restart_rep= 0;
+ }
+ if ($types->{$pair->{"from_orig"}}->{"engines"})
+ {
+ if ( join(",", @{$types->{$pair->{"from_orig"}}->{"engines"}}) !~ qr/$option_set_from->{"engine"}/i)
+ {
+ $skip_pair= 1;
+ $test_desc= "Engine " . $option_set_from->{"engine"} . " on master does not support type $type_from";
+ $test_error= "TER_MASTER_ENGINE_WRONG_TYPE";
+ }
+ }
+ if ($types->{$pair->{"to_orig"}}->{"engines"})
+ {
+ if ( join(",", @{$types->{$pair->{"to_orig"}}->{"engines"}}) !~ qr/$option_set_to->{"engine"}/i)
+ {
+ $skip_pair= 1;
+ $test_desc= "Engine " . $option_set_to->{"engine"} . " on slave does not support type $type_to";
+ $test_error= "TER_SLAVE_ENGINE_WRONG_TYPE";
+ }
+ }
+ if ($skip_pair == 0)
+ {
+ ok_sql ( $master, "DROP TABLE IF EXISTS t_test,t_orig;" );
+ ok_sql ( $master, "CREATE TABLE t_test (col_num INT NOT NULL, col_test $type_from, col_info VARCHAR(250)) $engine_from;" );
+ ok_sql ( $master, "CREATE TABLE t_orig (col_num INT NOT NULL, col_test $type_from, col_info VARCHAR(250)) $engine_from;" );
+ $rs= sql( $master, "SHOW CREATE TABLE t_test;" );
+ @rs_data= get_next($rs);
+ if (scalar(@rs_data) >= 2)
+ {
+ if ($rs_data[1] !~ qr/$engine_from/i)
+ {
+ $_= $rs_data[1];
+ s/\n//g;
+ vprint(1, "... unable to set $engine_from on master: $_\n");
+ $counter++;
+ }
+ }
+ else
+ {
+ vprint(1, "$counter ERROR: $test_info\n unable to create table on master\n");
+ $counter++;
+ next;
+ }
+ ok_synchronize ( $master, $slave );
+ ok_sql ( $slave, "DROP TABLE IF EXISTS t_test,t_conv;" );
+ ok_sql ( $slave, "CREATE TABLE t_test (col_num INT NOT NULL, col_test $type_to, col_info VARCHAR(250)) $engine_to;" );
+ ok_sql ( $slave, "CREATE TABLE t_conv (col_num INT NOT NULL, col_test $type_from, col_info VARCHAR(250)) $engine_from;" );
+ $rs= sql( $slave, "SHOW CREATE TABLE t_test;" );
+ @rs_data= get_next($rs);
+ if (scalar(@rs_data) >= 2)
+ {
+ if ($rs_data[1] !~ qr/$engine_to/i)
+ {
+ $_= $rs_data[1];
+ s/\n//g;
+ vprint(1, "$counter ERROR: $test_info\n unable to set $engine_to on slave: $_\n");
+ $counter++;
+ next;
+ }
+ }
+ else
+ {
+ vprint(1, "$counter ERROR: $test_info\n unable to create table on slave\n");
+ $counter++;
+ next;
+ }
+ my $test_ok= 1;
+ $test_error= "";
+ if ($types->{$pair->{"from_orig"}}->{"query_before"})
+ {
+ ok_sql ( $master, $types->{$pair->{"from_orig"}}->{"query_before"}.";" );
+ }
+ # create inserts
+ my $i= 1;
+ foreach my $test_value (@$values_from)
+ {
+ sql ( $master, "INSERT INTO t_test VALUES ($i, $test_value, \"$counter. $i. $type_from -> $type_to\");");
+ sql ( $master, "INSERT INTO t_orig VALUES ($i, $test_value, \"$counter. $i. $type_from -> $type_to\");");
+ $i++;
+ }
+ $err= 0;
+ synchronize ( $master, $slave );
+ my $sync= sync($master, $slave);
+ if ($sync == 0)
+ {
+ $rs= sql ($slave, "SELECT COUNT(*) FROM t_test;");
+ @rs_data= get_next($rs);
+ if ($rs_data[0] == scalar(@$values_from))
+ {
+ # convert data
+ ok_sql ( $slave, "INSERT INTO t_conv (SELECT * FROM t_test);" );
+ $i= 1;
+ foreach my $test_value (@$values_from)
+ {
+ if ($test_value =~ m/NULL/)
+ {
+ $slave_query= "SELECT COUNT(*) FROM t_orig,t_conv WHERE t_orig.col_num = t_conv.col_num AND t_orig.col_num = $i AND t_orig.col_test IS NULL AND t_conv.col_test IS NULL;";
+ }
+ else
+ {
+ $slave_query= "SELECT COUNT(*) FROM t_orig,t_conv WHERE t_orig.col_num = t_conv.col_num AND t_orig.col_num = $i AND t_orig.col_test = t_conv.col_test";
+ }
+ $rs= sql ($slave, $slave_query);
+ if ( !is_error($rs) )
+ {
+ @rs_data= get_next($rs);
+ if ($rs_data[0])
+ {
+ if ($rs_data[0] == 0)
+ {
+ $test_ok= 0;
+ $test_error= "TER_DATA_NOT_EQ";
+ $test_desc= "Data for row $i is not equal";
+ }
+ }
+ else
+ {
+ $test_ok= 0;
+ $test_error= "TER_NO_DATA";
+ $test_desc= "No data for row $i ($test_value)";
+ }
+ }
+ else
+ {
+ $test_ok= 0;
+ $test_error= $errors->{get_errors_code($rs)};
+ $test_desc= "Error for query $slave_query";
+ }
+ $i++;
+ }
+ }
+ else
+ {
+ # not replicated
+ $test_ok= 0;
+ $test_error= "TER_WRONG_ROW_NUM";
+ $test_desc= "Some rows are not replicated (" . $rs_data[0] . "/" . scalar(@$values_from) . ")";
+ }
+ }
+ else
+ {
+ # not sync
+ $test_ok= 0;
+ $err= retrieve_slave_status($slave, "Last_SQL_Errno");
+ if ($err =~ /[0-9]{2,4}/)
+ {
+ $test_error= $errors->{$err};
+ $test_desc= "Slave SQL thread stopped with error";
+ }
+ else
+ {
+ $test_error= "TER_SYNC";
+ $test_desc= "Slave are not synchronized with master";
+ }
+ $need_restart_rep= 1;
+ }
+ if ($test_ok == 1)
+ {
+ vprint(2, "$counter OK: $test_info\n");
+ $matrix_cur->{$matrix_key}->{"result"} = "OK";
+ }
+ else
+ {
+ vprint(2, "$counter $test_error: $test_info\n");
+ $matrix_cur->{$matrix_key}->{"result"} = $test_error;
+ #$matrix_cur->{$matrix_key}->{"description"} = $test_desc;
+ }
+ }
+ else
+ {
+ vprint(2, "$counter $test_error: $test_info\n");
+ $matrix_cur->{$matrix_key}->{"result"}= $test_error;
+ #$matrix_cur->{$matrix_key}->{"description"} = $test_desc;
+ $skip_pair= 0;
+ }
+ if (defined $matrix_cur->{$matrix_key}->{"result"} && defined $matrix_orig->{$matrix_key}->{"result"})
+ {
+ if ($matrix_cur->{$matrix_key}->{"result"} ne $matrix_orig->{$matrix_key}->{"result"})
+ {
+ vprint(0, "$counter DIFF: $test_info\n expected:" . $matrix_orig->{$matrix_key}->{"result"} . " got:" . $matrix_cur->{$matrix_key}->{"result"} . "\n") unless ($rep::data_types::config::record > 0);
+ }
+ }
+ else
+ {
+ vprint(0, "$counter DIFF_NO_DATA: $test_info\n") unless ($rep::data_types::config::record > 0);
+ }
+ $counter++;
+ }
+ }
+ }
+}
+
+
+sub exit_from_test
+{
+ my ($code, $text)= @_;
+ print $text . "\n";
+ return $code;
+}
+
+return 1;
+
+END {}
+
+
=== added file 'suites/rep/data_types_charset.pm'
--- a/suites/rep/data_types_charset.pm 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types_charset.pm 2009-05-18 09:07:00 +0000
@@ -0,0 +1,206 @@
+package rep::data_types_charset;
+use Exporter;
+our @ISA = qw(Exporter My::Nuts::Library::Tests::SimpleTest);
+use strict;
+use warnings;
+use My::Nuts::Library::Kernel::Server;
+use My::Nuts::Library::Kernel::Manager;
+use My::Nuts::Library::Kernel::Result;
+use My::Nuts::Library::Tests::SimpleTest;
+use My::Nuts::Library::Kernel::Replication;
+use Test::More;
+use Storable;
+
+# Test configuration
+require "data_types/config_charset.pl";
+require "data_types/matrix.pl";
+
+# Internal variables
+our $types = {};
+our $matrix = [];
+our $errors = {};
+our $master_options = [];
+our $slave_options = [];
+our $matrix_orig = {};
+our $matrix_cur = {};
+our $counter= 1;
+
+sub prepare
+{
+ # Get error codes
+ $errors= rep::data_types::matrix::get_error_msgs($rep::data_types::config::error_messages_file);
+ # Read stored matrix
+ $matrix_orig= rep::data_types::matrix::retrieve_matrix($rep::data_types::config::matrix_file);
+ # Read config file for data types
+ $types= rep::data_types::matrix::get_data_types($rep::data_types::config::data_types_config_file);
+ # Generate array of pairs of types (matrix)
+ $matrix= rep::data_types::matrix::generate_matrix(
+ {
+ "data_types" => $types,
+ "mode" =>
+ {
+ "group" => "string",
+ "null" => "NOT NULL",
+ },
+ }
+ );
+ vprint(1, "\nFound " . scalar(@$matrix) . " combinations\n");
+ $matrix= add_charsets($matrix, $rep::data_types::config::charsets);
+ vprint(1, "Extended with charsets and collations to " . scalar(@$matrix) . "\n");
+ rep::data_types::matrix::report_matrix(
+ {
+ "matrix" => $matrix_orig,
+ "filename" => $rep::data_types::config::matrix_report_file . ".orig.html"
+ }
+ );
+ # Read master options
+ $master_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "master"
+ }
+ );
+ # Read slave options
+ $slave_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "slave"
+ }
+ );
+ vprint(1, "Extended with server options to " . (scalar(@$matrix) * scalar(@$master_options) * scalar(@$slave_options)) . "\n");
+ return;
+}
+
+sub startup
+{
+ return;
+}
+
+sub fire
+{
+ my ($test) = @_;
+ my $master = server ($test);
+ my $slave = server ($test);
+ my $dbname = "test";
+ plan tests => 12342;
+
+ # Setup topology
+ attach ( $master, $slave );
+
+ # Initial workload
+ ok_sql ( $master, "CREATE DATABASE IF NOT EXISTS " . $dbname );
+ ok_sql ( $master, "USE " . $dbname );
+ ok_sql ( $slave, "USE " . $dbname );
+ rep::data_types::matrix::test_matrix(
+ {
+ "master" => $master,
+ "slave" => $slave,
+ "master_options" => $master_options,
+ "slave_options" => $slave_options,
+ "data_types" => $types,
+ "matrix" => $matrix,
+ "errors" => $errors,
+ "current_matrix" => $matrix_cur,
+ "original_matrix"=> $matrix_orig
+ }
+ );
+ $matrix_cur->{"info"}->{"created"}= localtime();
+ #rep::data_types::matrix::report_matrix(
+ # {
+ # "matrix"=> $matrix_cur,
+ # "filename"=> $rep::data_types::config::matrix_report_file . ".cur.html"
+ # }
+ #);
+}
+
+sub add_charsets()
+{
+ my ($matrix, $charsets)= @_;
+ my $char_coll= [];
+ my $matrix_cl= [];
+ foreach my $group (keys %$charsets)
+ {
+ my @csets= ($group);
+ if ($group =~ m/\,/i)
+ {
+ @csets= split(",", $group);
+ }
+ foreach my $cset (@csets)
+ {
+ foreach my $coll (@{$charsets->{$group}})
+ {
+ push(@$char_coll, {"charset"=>$cset, "collation"=>"$cset$coll"})
+ }
+ }
+ }
+ foreach my $pair (@$matrix)
+ {
+ foreach my $from_cs (@$char_coll)
+ {
+ foreach my $to_cs (@$char_coll)
+ {
+ my %pair_h= ();
+ %pair_h= %$pair;
+ my $pair_cl= \%pair_h;
+ $_= " CHARACTER SET " . $from_cs->{"charset"} . " COLLATE " . $from_cs->{"collation"};
+ $pair_cl->{"from"} =~ s/ /$_ /;
+ $_= " CHARACTER SET " . $to_cs->{"charset"} . " COLLATE " . $to_cs->{"collation"};
+ $pair_cl->{"to"} =~ s/ /$_ /;
+ push(@$matrix_cl, $pair_cl);
+ #print $matrix_cl->[scalar(@$matrix_cl)-1]->{"from"} . " -> " . $matrix_cl->[scalar(@$matrix_cl)-1]->{"to"} . "\n\n";
+ }
+ }
+ }
+ return $matrix_cl;
+}
+
+
+sub vprint()
+{
+ my $vmode= shift;
+ my $text= shift;
+ if ($rep::data_types::config::verbose >= $vmode)
+ {
+ print $text;
+ }
+}
+
+sub sync()
+{
+ my ($master,$slave)= @_;
+ if (
+ (retrieve_master_status($master, "Position") eq retrieve_slave_status($slave, "Exec_Master_Log_Pos")) &&
+ (retrieve_slave_status($slave, "Slave_IO_Running") =~ m/yes/i) &&
+ (retrieve_slave_status($slave, "Slave_SQL_Running") =~ m/yes/i))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+sub exit_from_test
+{
+ my ($code, $text)= @_;
+ print $text . "\n";
+ return $code;
+}
+
+sub shutdown
+{
+ return;
+}
+1;
+__END__;
+
+=head1 NAME
+
+rep::data_types
+
+=head1 SYNOPSIS
+
+Matrix builder
+
+=back
=== added file 'suites/rep/data_types_eq.pm'
--- a/suites/rep/data_types_eq.pm 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types_eq.pm 2009-05-18 09:07:00 +0000
@@ -0,0 +1,151 @@
+package rep::data_types_eq;
+use Exporter;
+our @ISA = qw(Exporter My::Nuts::Library::Tests::SimpleTest);
+use strict;
+use warnings;
+use My::Nuts::Library::Kernel::Server;
+use My::Nuts::Library::Kernel::Manager;
+use My::Nuts::Library::Kernel::Result;
+use My::Nuts::Library::Tests::SimpleTest;
+use My::Nuts::Library::Kernel::Replication;
+use Test::More;
+use Storable;
+
+# Test configuration
+require "data_types/config_eq.pl";
+require "data_types/matrix.pl";
+
+# Internal variables
+our $types = {};
+our $matrix = [];
+our $errors = {};
+our $master_options = [];
+our $slave_options = [];
+our $matrix_orig = {};
+our $matrix_cur = {};
+our $counter= 1;
+
+sub prepare
+{
+ # Get error codes
+ $errors= rep::data_types::matrix::get_error_msgs($rep::data_types::config::error_messages_file);
+ # Read stored matrix
+ $matrix_orig= rep::data_types::matrix::retrieve_matrix($rep::data_types::config::matrix_file);
+ # Read config file for data types
+ $types= rep::data_types::matrix::get_data_types($rep::data_types::config::data_types_config_file);
+ # Generate array of pairs of types (matrix)
+ $matrix= rep::data_types::matrix::generate_matrix(
+ {
+ "data_types" => $types,
+ "mode" => { "collect" => "equal" }
+ }
+ );
+ # Read master options
+ $master_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "master"
+ }
+ );
+ # Read slave options
+ $slave_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "slave"
+ }
+ );
+ vprint(1, "\nFound " . scalar(@$matrix) . " combinations, extended with server options to " . (scalar(@$matrix) * scalar(@$master_options) * scalar(@$slave_options)) . "\n");
+ return;
+}
+
+sub startup
+{
+ return;
+}
+
+sub fire
+{
+ my ($test) = @_;
+ my $master = server ($test);
+ my $slave = server ($test);
+ my $dbname = "test";
+ plan tests => 12342;
+
+ # Setup topology
+ attach ( $master, $slave );
+
+ # Initial workload
+ ok_sql ( $master, "CREATE DATABASE IF NOT EXISTS " . $dbname );
+ ok_sql ( $master, "USE " . $dbname );
+ ok_sql ( $slave, "USE " . $dbname );
+ rep::data_types::matrix::test_matrix(
+ {
+ "master" => $master,
+ "slave" => $slave,
+ "master_options" => $master_options,
+ "slave_options" => $slave_options,
+ "data_types" => $types,
+ "matrix" => $matrix,
+ "errors" => $errors,
+ "current_matrix" => $matrix_cur,
+ "original_matrix"=> $matrix_orig
+ }
+ );
+ $matrix_cur->{"info"}->{"created"}= localtime();
+ #rep::data_types::matrix::report_matrix(
+ # {
+ # "matrix"=> $matrix_cur,
+ # "filename"=> $rep::data_types::config::matrix_report_file . ".cur.html"
+ # }
+ #);
+}
+
+sub vprint()
+{
+ my $vmode= shift;
+ my $text= shift;
+ if ($rep::data_types::config::verbose >= $vmode)
+ {
+ print $text;
+ }
+}
+
+sub sync()
+{
+ my ($master,$slave)= @_;
+ if (
+ (retrieve_master_status($master, "Position") eq retrieve_slave_status($slave, "Exec_Master_Log_Pos")) &&
+ (retrieve_slave_status($slave, "Slave_IO_Running") =~ m/yes/i) &&
+ (retrieve_slave_status($slave, "Slave_SQL_Running") =~ m/yes/i))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+sub exit_from_test
+{
+ my ($code, $text)= @_;
+ print $text . "\n";
+ return $code;
+}
+
+sub shutdown
+{
+ return;
+}
+1;
+__END__;
+
+=head1 NAME
+
+rep::data_types
+
+=head1 SYNOPSIS
+
+Matrix builder
+
+=back
=== added file 'suites/rep/data_types_main.pm'
--- a/suites/rep/data_types_main.pm 1970-01-01 00:00:00 +0000
+++ b/suites/rep/data_types_main.pm 2009-05-18 09:07:00 +0000
@@ -0,0 +1,161 @@
+package rep::data_types_main;
+use Exporter;
+our @ISA = qw(Exporter My::Nuts::Library::Tests::SimpleTest);
+use strict;
+use warnings;
+use My::Nuts::Library::Kernel::Server;
+use My::Nuts::Library::Kernel::Manager;
+use My::Nuts::Library::Kernel::Result;
+use My::Nuts::Library::Tests::SimpleTest;
+use My::Nuts::Library::Kernel::Replication;
+use Test::More;
+use Storable;
+
+# Test configuration
+require "data_types/config.pl";
+require "data_types/matrix.pl";
+
+# Internal variables
+our $types = {};
+our $matrix = [];
+our $errors = {};
+our $master_options = [];
+our $slave_options = [];
+our $matrix_orig = {};
+our $matrix_cur = {};
+our $counter= 1;
+
+sub prepare
+{
+ # Get error codes
+ $errors= rep::data_types::matrix::get_error_msgs($rep::data_types::config::error_messages_file);
+ # Read stored matrix
+ $matrix_orig= rep::data_types::matrix::retrieve_matrix($rep::data_types::config::matrix_file);
+ # Read config file for data types
+ $types= rep::data_types::matrix::get_data_types($rep::data_types::config::data_types_config_file);
+ # Generate array of pairs of types (matrix)
+ $matrix= rep::data_types::matrix::generate_matrix(
+ {
+ "data_types" => $types,
+ "mode" => {}
+ }
+ );
+ rep::data_types::matrix::report_matrix(
+ {
+ "matrix" => $matrix_orig,
+ "filename" => $rep::data_types::config::matrix_report_file . ".orig.html"
+ }
+ );
+ # Read master options
+ $master_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "master"
+ }
+ );
+ # Read slave options
+ $slave_options= rep::data_types::matrix::get_server_options(
+ {
+ "server_options" => $rep::data_types::config::server_options,
+ "filter" => "slave"
+ }
+ );
+ vprint(1, "\nFound " . scalar(@$matrix) . " combinations, extended with server options to " . (scalar(@$matrix) * scalar(@$master_options) * scalar(@$slave_options)) . "\n");
+ return;
+}
+
+sub startup
+{
+ return;
+}
+
+sub fire
+{
+ my ($test) = @_;
+ my $master = server ($test);
+ my $slave = server ($test);
+ my $dbname = "test";
+ plan tests => 1;
+
+ # Setup topology
+ attach ( $master, $slave );
+
+ # Initial workload
+ ok_sql ( $master, "CREATE DATABASE IF NOT EXISTS " . $dbname );
+ ok_sql ( $master, "USE " . $dbname );
+ ok_sql ( $slave, "USE " . $dbname );
+ rep::data_types::matrix::test_matrix(
+ {
+ "master" => $master,
+ "slave" => $slave,
+ "master_options" => $master_options,
+ "slave_options" => $slave_options,
+ "data_types" => $types,
+ "matrix" => $matrix,
+ "errors" => $errors,
+ "current_matrix" => $matrix_cur,
+ "original_matrix"=> $matrix_orig
+ }
+ );
+ #rep::data_types::matrix::store_matrix($matrix_cur, $rep::data_types::config::matrix_file);
+ if (!-e $rep::data_types::config::matrix_file || $rep::data_types::config::record > 0)
+ {
+ rep::data_types::matrix::store_matrix($matrix_cur, $rep::data_types::config::matrix_file)
+ }
+ rep::data_types::matrix::report_matrix(
+ {
+ "matrix"=> $matrix_cur,
+ "filename"=> $rep::data_types::config::matrix_report_file . ".cur.html"
+ }
+ );
+}
+
+sub vprint()
+{
+ my $vmode= shift;
+ my $text= shift;
+ if ($rep::data_types::config::verbose >= $vmode)
+ {
+ print $text;
+ }
+}
+
+sub sync()
+{
+ my ($master,$slave)= @_;
+ if (
+ (retrieve_master_status($master, "Position") eq retrieve_slave_status($slave, "Exec_Master_Log_Pos")) &&
+ (retrieve_slave_status($slave, "Slave_IO_Running") =~ m/yes/i) &&
+ (retrieve_slave_status($slave, "Slave_SQL_Running") =~ m/yes/i))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+sub exit_from_test
+{
+ my ($code, $text)= @_;
+ print $text . "\n";
+ return $code;
+}
+
+sub shutdown
+{
+ return;
+}
+1;
+__END__;
+
+=head1 NAME
+
+rep::data_types
+
+=head1 SYNOPSIS
+
+Matrix builder
+
+=back
| Thread |
|---|
| • bzr commit into nuts branch (Serge.Kozlov:319) WL#4840 WL#4845 WL#4853WL#4854 | Serge Kozlov | 18 May |