mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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 <<EOF
 | |
| [mysqld]
 | |
| # Comment
 | |
| option1=values2
 | |
| option2= value4
 | |
| option4
 | |
| basedir=thebasedir
 | |
| [mysqld_1]
 | |
| [mysqld_2]
 | |
| [mysqld.9]
 | |
| [client]
 | |
| socket  =\tasocketpath
 | |
| EOF
 | |
| ;
 | |
| close OUT;
 | |
| 
 | |
| my $config= My::Config->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 <<EOF
 | |
| [mysqld]
 | |
| !include test.cnf
 | |
| # Comment
 | |
| option1=values3
 | |
| basedir=anotherbasedir
 | |
| EOF
 | |
| ;
 | |
| close OUT;
 | |
| 
 | |
| # Read the config file
 | |
| my $config3= My::Config->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";
 | |
| 
 | 
