mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/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-1301 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 overriden by value in test_include.cnf");
 | 
						|
 | 
						|
is( $config3->value('mysqld', 'option1'), 'values3',
 | 
						|
    "mysqld_option1 has been overriden 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";
 | 
						|
 |