The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Test for semi-synch plugin installation
#
#
my $TEST_VERSION = $ENV{TEST_VERSION};
my ($bare_version, $version) = get_bare_version ($TEST_VERSION);

my $plugindir = $ENV{SB_PLUGIN_DIR} 
    or die "expected environment variable \$SB_PLUGIN_DIR not set\n";

# print "<$TEST_VERSION>";exit;

my @test_sb = (
    {
        type        => 'exec',
        command     => "make_replication_sandbox "
                       . "--replication_directory=group_server $TEST_VERSION ",
        expected    => 'replication directory installed',
        msg         => 'group directory started',
    },
    {
        type        => 'exec',
        command     => "sbtool -o plugin "
                       . " --plugin=semisynch"
                       . " -s $sandbox_home/group_server ",
        expected    => ['@@rpl_semi_sync_master_enabled',  
                        '@@rpl_semi_sync_slave_enabled'],
        msg         => 'semisynch plugin installed on group_server',
    },
    {
        type        => 'sql',
        path        => "$sandbox_home/group_server/master",
        query       => "create table test.t1 (i int);"
                        . "show tables from test",
        expected    => 't1',
        msg         => 'table created on master'
    },
    {
        type        => 'sql',
        path        => "$sandbox_home/group_server/master",
        query       => "select variable_value "
                        . "from information_schema . global_status "
                        . "where variable_name = 'Rpl_semi_sync_master_yes_tx'",
        expected    => 1,
        msg         => 'semi-synch plugin working on group_server/master - 1',
    },
    {
        type        => 'sql',
        path        => "$sandbox_home/group_server/master",
        query       => "select variable_value "
                        . "from information_schema . global_status "
                        . "where variable_name = 'Rpl_semi_sync_master_no_tx'",
        expected    => 0,
        msg         => 'semi-synch plugin working on group_server/master - 2',
    },
    {   type => 'sleep', how_much => 2},
    {
        type        => 'sql',
        path        => "$sandbox_home/group_server/node1",
        query       => " show tables from test ",
        expected    => 't1',
        msg         => 'replication working on group_server/node1',
    },
    {
        type        => 'sql',
        path        => "$sandbox_home/group_server/node2",
        query       => " show tables from test ",
        expected    => 't1',
        msg         => ' replication working on group_server/node2',
    },
    { 
        type        => 'exec',
        command     => "$sandbox_home/group_server/stop_all",
        expected    => "ok",
        msg         => "group server stopped",
    },
  
);

for my $test (@test_sb) {

    if ($test->{type} eq 'exec') {
        ok_exec( $test);
    }
    elsif ($test->{type} eq 'sql') {
        ok_sql($test);
    }
    elsif ($test->{type} eq 'sleep') {
        sleep($test->{how_much} || 1 );
    }
    else {
        die "unrecognized type\n";
    }
}