From e5cfbab197a038e2ad8d986137d808be9013568c Mon Sep 17 00:00:00 2001 From: Carlos Salguero Date: Tue, 12 Jul 2016 17:45:07 -0300 Subject: [PATCH] Tests for 'quote enum fields'. PR #102 --- t/pt-table-sync/enum_fields.t | 55 +++++++++++++++++++++++++ t/pt-table-sync/samples/enum_fields.sql | 17 ++++++++ 2 files changed, 72 insertions(+) create mode 100644 t/pt-table-sync/enum_fields.t create mode 100644 t/pt-table-sync/samples/enum_fields.sql diff --git a/t/pt-table-sync/enum_fields.t b/t/pt-table-sync/enum_fields.t new file mode 100644 index 00000000..ff8b9871 --- /dev/null +++ b/t/pt-table-sync/enum_fields.t @@ -0,0 +1,55 @@ +#!/usr/bin/env perl + +BEGIN { + die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n" + unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH}; + unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib"; +}; + +use strict; +use warnings FATAL => 'all'; +use English qw(-no_match_vars); +use Test::More; + +use PerconaTest; +use Sandbox; +require "$trunk/bin/pt-table-sync"; + +my $output; +my $dp = new DSNParser(opts=>$dsn_opts); +my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp); +my $master_dbh = $sb->get_dbh_for('master'); +my $slave_dbh = $sb->get_dbh_for('slave1'); + +if ( !$master_dbh ) { + plan skip_all => 'Cannot connect to sandbox master'; +} +elsif ( !$slave_dbh ) { + plan skip_all => 'Cannot connect to sandbox slave'; +} +else { + plan tests => 2; +} + +$sb->load_file('master', 't/pt-table-sync/samples/enum_fields.sql'); + +# ############################################################################# +# Issue 804: mk-table-sync: can't nibble because index name isn't lower case? +# ############################################################################# +$master_dbh->do('set sql_log_bin=0'); +$master_dbh->do(q/INSERT INTO enum_fields_db.rgb (name, hex_code) VALUES ('blue','0x0000FF')/); +$output = `$trunk/bin/pt-table-sync --sync-to-master h=127.1,P=12346,u=msandbox,p=msandbox -d enum_fields_db --print`; +$output = remove_traces($output); +is( + $output, + "REPLACE INTO `enum_fields_db`.`rgb`(`name`, `hex_code`) VALUES ('blue', '0x0000FF');", + 'Quote Enum fields' +); + +# ############################################################################# +# Done. +# ############################################################################# +$sb->wipe_clean($master_dbh); +$sb->wipe_clean($slave_dbh); +ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); +exit; diff --git a/t/pt-table-sync/samples/enum_fields.sql b/t/pt-table-sync/samples/enum_fields.sql new file mode 100644 index 00000000..128842b9 --- /dev/null +++ b/t/pt-table-sync/samples/enum_fields.sql @@ -0,0 +1,17 @@ +DROP DATABASE IF EXISTS enum_fields_db; + +CREATE DATABASE enum_fields_db; + +USE enum_fields_db; + +DROP TABLE IF EXISTS enum_fields_db.rgb; + +CREATE TABLE `enum_fields_db`.`rgb` ( + `name` VARCHAR(20) NOT NULL, + `hex_code` ENUM('0xFF0000', '0x00FF00', '0x0000FF') NULL, + PRIMARY KEY (`name`)); + + +INSERT INTO `enum_fields_db`.`rgb` (`name`, `hex_code`) +VALUES ('red','0xFF0000'), ('green', '0x00FF00'); +