#!/usr/bin/env perl # -*- cperl -*- # Copyright (c) 2007 MySQL AB # Use is subject to license terms. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA use strict; use warnings; use File::Temp qw / tempdir /; my $dir = tempdir( CLEANUP => 1 ); use Test::More qw(no_plan); BEGIN { use_ok ( "My::Config" ) }; my $test_cnf= "$dir/test.cnf"; # Write test config file open(OUT, ">", $test_cnf) or die; print $test_cnf, "\n"; print OUT <new($test_cnf); isa_ok( $config, "My::Config" ); print $config; ok ( $config->group("mysqld_2"), "group mysqld_2 exists"); ok ( $config->group("mysqld_1"), "group mysqld_1 exists"); ok ( $config->group("mysqld.9"), "group mysqld.9 exists"); ok ( $config->group("mysqld.9")->suffix() eq ".9", "group mysqld.9 has suffix .9"); ok ( $config->group("mysqld"), "group mysqld exists"); ok ( $config->group("client"), "group client exists"); ok ( !$config->group("mysqld_3"), "group mysqld_3 does not exist"); ok ( $config->options_in_group("mysqld") == 4, "options in [mysqld] is 4"); ok ( $config->options_in_group("nonexist") == 0, "options in [nonexist] is 0"); { my @groups= $config->groups(); ok(@groups == 5, "5 groups"); my $idx= 0; foreach my $name ('mysqld', 'mysqld_1', 'mysqld_2', 'mysqld.9', 'client') { is($groups[$idx++]->name(), $name, "checking groups $idx"); } } { my @groups= $config->like("mysqld"); ok(@groups == 4, "4 groups like mysqld"); my $idx= 0; foreach my $name ('mysqld', 'mysqld_1', 'mysqld_2', 'mysqld.9') { is($groups[$idx++]->name(), $name, "checking like(\"mysqld\") $idx"); } } { my @groups= $config->like("not"); ok(@groups == 0, "checking like(\"not\")"); } is($config->first_like("mysqld_")->name(), "mysqld_1", "first_like"); is( $config->value('mysqld', 'option4'), undef, "mysqld_option4 exists, does not have a value"); ok( $config->exists('mysqld', 'option4'), "mysqld_option4 exists"); ok( $config->exists('mysqld', 'option2'), "mysqld_option2 exists"); ok( !$config->exists('mysqld', 'option5'), "mysqld_option5 does not exists"); # Save the config to file my $test2_cnf= "$dir/test2.cnf"; $config->save($test2_cnf); # read it back and check it's the same my $config2= My::Config->new($test2_cnf); isa_ok( $config2, "My::Config" ); is_deeply( \$config, \$config2, "test.cnf is equal to test2.cnf"); my $test_include_cnf= "$dir/test_include.cnf"; # Write test config file that includes test.cnf open(OUT, ">", $test_include_cnf) or die; print OUT <new($test_include_cnf); isa_ok( $config3, "My::Config" ); print $config3; is( $config3->value('mysqld', 'basedir'), 'anotherbasedir', "mysqld_basedir has been overridden by value in test_include.cnf"); is( $config3->value('mysqld', 'option1'), 'values3', "mysqld_option1 has been overridden by value in test_include.cnf"); is( $config3->value('mysqld', 'option2'), 'value4', "mysqld_option2 is from included file"); is( $config3->value('client', 'socket'), 'asocketpath', "client.socket is from included file"); is( $config3->value('mysqld', 'option4'), undef, "mysqld_option4 exists, does not have a value"); print "$config3\n";