The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 6;
use Test::Fatal;
use File::Temp;
use Data::Dumper;
use Storable;
use Log::Log4perl;
use English;

use_ok(q(Zabbix::ServerScript::DefaultConfig));

$ENV{BASENAME} = q(zabbix_server_script_test);
$ENV{ID} = $ENV{BASENAME};
$ENV{LOG_FILENAME} = qq(/tmp/$ENV{BASENAME}.log);

subtest q(Check log-related parameters) => sub {
	isnt($Zabbix::ServerScript::Config->{log}, undef, q('log' section is defined));
	is(exception { Log::Log4perl->init($Zabbix::ServerScript::Config->{log}) }, undef, q('log' section contains valid Log4perl initialization data));
	isnt($Zabbix::ServerScript::Config->{log_dir}, undef, q('log_dir' section is defined));
	ok(-d $Zabbix::ServerScript::Config->{log_dir}, q('log_dir' exists));
	ok(-r $Zabbix::ServerScript::Config->{log_dir}, q('log_dir' is readable));
	ok(-w $Zabbix::ServerScript::Config->{log_dir}, q('log_dir' is writable));
	ok(-x $Zabbix::ServerScript::Config->{log_dir}, q('log_dir' is executable));
};

subtest q(Check API-related parameters) => sub {
	isnt($Zabbix::ServerScript::Config->{api}, undef, q('api' section is defined));
	ok(exists $Zabbix::ServerScript::Config->{api}->{url}, q(Provide 'url' example in 'api' section));
	is_deeply($Zabbix::ServerScript::Config->{api}->{rw}, { login => undef, password => undef }, q(Provide 'rw' example in 'api' section));
};

subtest q(Check PID-related parameters) => sub {
	ok(-d $Zabbix::ServerScript::Config->{pid_dir}, q('pid_dir' exists));
	ok(-r $Zabbix::ServerScript::Config->{pid_dir}, q('pid_dir' is readable));
	ok(-w $Zabbix::ServerScript::Config->{pid_dir}, q('pid_dir' is writable));
	ok(-x $Zabbix::ServerScript::Config->{pid_dir}, q('pid_dir' is executable));
};

subtest q(Check cache-related parameters) => sub {
	ok(-d $Zabbix::ServerScript::Config->{cache_dir}, q('cache_dir' exists));
	ok(-r $Zabbix::ServerScript::Config->{cache_dir}, q('cache_dir' is readable));
	ok(-w $Zabbix::ServerScript::Config->{cache_dir}, q('cache_dir' is writable));
	ok(-x $Zabbix::ServerScript::Config->{cache_dir}, q('cache_dir' is executable));
};

subtest q(Check config-related parameters) => sub {
	SKIP: {
		skip q(/usr/local/etc/ does not exist on Mac OS X by default), 3 if $OSNAME eq q(darwin);
		ok(-d $Zabbix::ServerScript::Config->{config_dir}, q('config_dir' exists));
		ok(-r $Zabbix::ServerScript::Config->{config_dir}, q('config_dir' is readable));
		ok(-x $Zabbix::ServerScript::Config->{config_dir}, q('config_dir' is executable));
	}
};

unlink(q(/tmp/zabbix_server_script_test.log));
done_testing;