API-CPanel

 view release on metacpan or  search on metacpan

t/01-test.t  view on Meta::CPAN

#!/usr/bin/perl -w

use strict;
use warnings;
use lib qw( ./lib );

use Data::Dumper;

our $ONLINE;

BEGIN {
    #$ENV{auth_user}   = 'restest';
    #$ENV{auth_passwd} = '123';
    #$ENV{host}        = '192.168.123.1';
    $ONLINE = $ENV{auth_user} && $ENV{auth_passwd} && $ENV{host};
}

my $manipulate_user = 'zsezse';

use Test::More tests => $ONLINE ? 61 : 61;

my $test_host = $ENV{host} || '127.0.0.1';

ok(1, 'Test OK');
use_ok('API::CPanel');

$a = 'refs';

is( refs( undef ),   '',       $a);
is( refs( {} ),      'HASH',   $a );
is( refs( [] ),      'ARRAY',  $a );
is( refs( sub {} ),  'CODE',   $a );
is( refs( \$a ),     'SCALAR', $a );

$a = 'is_success';

ok(! is_success(), $a);
ok(! is_success( { error => {}, data => {} } ), $a);
ok(! is_success( { data  => {} } ), $a);
ok(! is_success( { } ), $a);
ok(  is_success( { status => 1 } ), $a);

$a = 'filter_hash';
is_deeply( API::CPanel::filter_hash( {  }, [ ]), {}, $a );
is_deeply( API::CPanel::filter_hash( { aaa => 555, bbb => 111 }, [ 'aaa' ]), { aaa => 555 }, $a );
is_deeply( API::CPanel::filter_hash( { aaa => 555, bbb => 111 }, [ ]), { }, $a );
is_deeply( API::CPanel::filter_hash( { }, [ 'aaa' ]), { }, $a );

$a = 'mk_query_string';
is( API::CPanel::mk_query_string( {  }  ), '', $a );
is( API::CPanel::mk_query_string( ''    ), '', $a );
is( API::CPanel::mk_query_string( undef ), '', $a );
is( API::CPanel::mk_query_string( { aaa => 111, bbb => 222 } ), 'aaa=111&bbb=222', $a );
is( API::CPanel::mk_query_string( { bbb => 222, aaa => 111 } ), 'aaa=111&bbb=222', $a );
is( API::CPanel::mk_query_string( [ ] ), '', $a );
is( API::CPanel::mk_query_string( { dddd => 'dfdf' } ), 'dddd=dfdf', $a );

my $kill_start_end_slashes_test = {
    '////aaa////' => 'aaa',
    'bbb////'     => 'bbb',
    '////ccc'     => 'ccc', 
    ''            => '',
};

for (keys %$kill_start_end_slashes_test) {
    is(
        API::CPanel::kill_start_end_slashes ($_),
        $kill_start_end_slashes_test->{$_},
        'kill_start_end_slashes'
    );
}

$a = 'mk_full_query_string';
is( API::CPanel::mk_full_query_string( {
        host => $test_host, 
    } ), 
    '',
    $a
);

is( API::CPanel::mk_full_query_string( {
        host       => $test_host,
        allow_http => 1,
        path       => 'xml-api',
    } ), 
    '',
    $a
);

is(  API::CPanel::mk_full_query_string( {
        host       => $test_host,
        allow_http => 1,
        param1     => 'val1',
        param2     => 'val2',
        func       => 'test',
    } ), 
    "http://$test_host:2087/xml-api/test?param1=val1&param2=val2",
    $a
);

is(  API::CPanel::mk_full_query_string( {
        host       => $test_host,
        param1     => 'val1',
        param2     => 'val2',
        func       => 'test',
    } ), 
    "https://$test_host:2087/xml-api/test?param1=val1&param2=val2",
    $a
);


$a = 'mk_query_to_server';
is( API::CPanel::mk_query_to_server( '' ), '', $a );

my %correct_params = (
    auth_user   => $ENV{auth_user}   || 'fake',
    auth_passwd => $ENV{auth_passwd} || 'fake_pass',
    host        => $test_host,

);




$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listips>
  <result>
    <active>1</active>
    <dedicated>0</dedicated>
    <if>eth0</if>
    <ip>192.168.123.208</ip>
    <mainaddr>1</mainaddr>
    <netmask>255.255.255.0</netmask>
    <network>192.168.123.0</network>
    <removable>0</removable>
    <used>1</used>
  </result>
  <result>
    <active>1</active>
    <dedicated>1</dedicated>
    <if>eth0:1</if>
    <ip>192.168.123.222</ip>
    <mainaddr>0</mainaddr>
    <netmask>255.255.255.0</netmask>
    <network>192.168.123.0</network>
    <removable>1</removable>
    <used>0</used>
  </result>
  <result>
    <active>1</active>
    <dedicated>1</dedicated>
    <if>virbr0</if>
    <ip>192.168.122.1</ip>
    <mainaddr>0</mainaddr>
    <netmask>255.255.255.0</netmask>
    <network>192.168.122.0</network>
    <removable>1</removable>
    <used>0</used>
  </result>
</listips>
THEEND

#$API::CPanel::DEBUG=1;
my $ip_list = API::CPanel::Ip::list(
    {
	%correct_params,
    }
);

my $main_shared_ip = $ip_list->[0];
#diag "Get ips from panel: " . Dumper( $ip_list ) . scalar @$ip_list;
ok($ip_list && ref $ip_list eq 'ARRAY' && scalar @$ip_list, 'API::CPanel::Ip::list');
#$API::CPanel::DEBUG=0;

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<createacct>
  <result>
    <options>
      <ip>192.168.123.208</ip>
      <nameserver>ns1.centostest.ru</nameserver>
      <nameserver2>ns2.centostest.ru</nameserver2>
      <nameserver3></nameserver3>
      <nameserver4></nameserver4>
      <nameservera></nameservera>
      <nameservera2></nameservera2>
      <nameservera3></nameservera3>
      <nameservera4></nameservera4>
      <nameserverentry></nameserverentry>
      <nameserverentry2></nameserverentry2>
      <nameserverentry3></nameserverentry3>
      <nameserverentry4></nameserverentry4>
      <package>default</package>
    </options>
    <rawout>
    </rawout>
    <status>1</status>
    <statusmsg>Account Creation Ok</statusmsg>
  </result>
</createacct>
THEEND

my $result = API::CPanel::User::create(
    {
	%correct_params,
	username    => $manipulate_user,
	domain      => 'zse1.ru',
	password    => 'sdfdsGdhd',
	maxsql      => 11,
    }
);
is( $result, 1, 'API::CPanel::User::create' );

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<createacct>
  <result>
    <options></options>
    <rawout></rawout>
    <status>0</status>
    <statusmsg>Sorry, a group for that username already exists.</statusmsg>
  </result>
</createacct>
THEEND

$result = API::CPanel::User::create(
    {
	%correct_params,
	username    => $manipulate_user,
	password    => 'sdfdsGdhd',
	domain      => 'zse1.ru',
    }
);
is( $result, '', 'API::CPanel::User::create repeat');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<passwd>
  <passwd>
    <rawout>Changing password for zsezse
Password for zsezse has been changed
Updating ftp passwords for zsezse
Ftp password files updated.
Ftp vhost passwords synced

t/01-test.t  view on Meta::CPAN

    <maxlst>unlimited</maxlst>
    <maxparked>*unknown*</maxparked>
    <maxpop>unlimited</maxpop>
    <maxsql>unlimited</maxsql>
    <maxsub>unlimited</maxsub>
    <owner>root</owner>
    <partition>home</partition>
    <plan>default</plan>
    <shell>/bin/bash</shell>
    <startdate>10 Mar 22 16:21</startdate>
    <suspended>0</suspended>
    <suspendreason>not suspended</suspendreason>
    <suspendtime></suspendtime>
    <theme>x3</theme>
    <unix_startdate>1269249671</unix_startdate>
    <user>zseru</user>
  </acct>
  <status>1</status>
  <statusmsg>Ok</statusmsg>
</listaccts>
THEEND

my $active_count = API::CPanel::User::active_user_count(
    {
	%correct_params,
    }
);
ok( $result =~ /^\d+$/ , 'API::CPanel::User::active_user_count');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<suspendacct>
  <result>
    <status>1</status>
    <statusmsg>&lt;script&gt;if (self[]) { clear_ui_status(); }&lt;/script&gt;
Changing Shell to /bin/false...Changing shell for zseasd.
Warning: &quot;/bin/false&quot; is not listed in /etc/shells
Shell changed.
Done
Locking Password...Locking password for user zseasd.
passwd: Success
Done
Suspending mysql users
Notification =&gt; root\@localhost via EMAIL [level =&gt; 3]
Using Quota v3 Support
Suspended document root /home/zseasd/public_html
Using Quota v3 Support
Suspending FTP accounts...
Updating ftp passwords for zseasd
Ftp password files updated.
Ftp vhost passwords synced
zseasds account has been suspended
</statusmsg>
  </result>
</suspendacct>
THEEND

$result = API::CPanel::User::disable(
    {
	%correct_params,
	user   => $manipulate_user,
	reason => 'test reason1',
    }
);
is( $result, 1, 'API::CPanel::User::disable');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
  <acct>
    <disklimit>unlimited</disklimit>
    <diskused>0M</diskused>
    <domain>qewqe.ru</domain>
    <email>*unknown*</email>
    <ip>192.168.123.208</ip>
    <maxaddons>*unknown*</maxaddons>
    <maxftp>unlimited</maxftp>
    <maxlst>unlimited</maxlst>
    <maxparked>*unknown*</maxparked>
    <maxpop>unlimited</maxpop>
    <maxsql>unlimited</maxsql>
    <maxsub>unlimited</maxsub>
    <owner>root</owner>
    <partition>home</partition>
    <plan>default</plan>
    <shell>/bin/bash</shell>
    <startdate>10 Mar 22 16:18</startdate>
    <suspended>0</suspended>
    <suspendreason>not suspended</suspendreason>
    <suspendtime></suspendtime>
    <theme>x3</theme>
    <unix_startdate>1269249522</unix_startdate>
    <user>qewqeru</user>
  </acct>
  <acct>
    <disklimit>unlimited</disklimit>
    <diskused>0M</diskused>
    <domain>zse1.ru</domain>
    <email>*unknown*</email>
    <ip>192.168.123.208</ip>
    <maxaddons>*unknown*</maxaddons>
    <maxftp>unlimited</maxftp>
    <maxlst>unlimited</maxlst>
    <maxparked>*unknown*</maxparked>
    <maxpop>unlimited</maxpop>
    <maxsql>14</maxsql>
    <maxsub>unlimited</maxsub>
    <owner>root</owner>
    <partition>home</partition>
    <plan>default</plan>
    <shell>/bin/false</shell>
    <startdate>10 Mar 24 11:55</startdate>
    <suspended>1</suspended>
    <suspendreason>test reason1</suspendreason>
    <suspendtime>1269406521</suspendtime>
    <theme>x</theme>
    <unix_startdate>1269406518</unix_startdate>
    <user>zseasd</user>
  </acct>
  <acct>
    <disklimit>unlimited</disklimit>
    <diskused>0M</diskused>
    <domain>zse.ru</domain>
    <email>*unknown*</email>
    <ip>192.168.123.208</ip>
    <maxaddons>*unknown*</maxaddons>
    <maxftp>unlimited</maxftp>
    <maxlst>unlimited</maxlst>
    <maxparked>*unknown*</maxparked>
    <maxpop>unlimited</maxpop>
    <maxsql>unlimited</maxsql>
    <maxsub>unlimited</maxsub>
    <owner>root</owner>
    <partition>home</partition>
    <plan>default</plan>
    <shell>/bin/bash</shell>
    <startdate>10 Mar 22 16:21</startdate>
    <suspended>0</suspended>
    <suspendreason>not suspended</suspendreason>
    <suspendtime></suspendtime>
    <theme>x3</theme>
    <unix_startdate>1269249671</unix_startdate>
    <user>zseru</user>
  </acct>
  <status>1</status>
  <statusmsg>Ok</statusmsg>
</listaccts>
THEEND

$result = API::CPanel::User::active_user_count(
    {
	%correct_params,
    }
);
is( $result, $active_count - 1, 'API::CPanel::User::active_user_count');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<suspendacct>
  <result>
    <status>1</status>
    <statusmsg>&lt;script&gt;if (self['clear_ui_status']) { clear_ui_status(); }&lt;/script&gt;
Changing Shell to /bin/false...Changing shell for zseasd.
Warning: &quot;/bin/false&quot; is not listed in /etc/shells
Shell not changed.
Done
Locking Password...Locking password for user zseasd.
passwd: Success
Done
Suspending mysql users
Notification =&gt; root\@localhost via EMAIL [level =&gt; 3]
Account Already Suspended
</statusmsg>
  </result>
</suspendacct>
THEEND

$result = API::CPanel::User::disable(
    {
	%correct_params,
	user   => $manipulate_user,
	reason => 'test reason2',
    }
);
is( $result, 1, 'API::CPanel::User::disable repeat');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<unsuspendacct>
  <result>
    <status>1</status>
    <statusmsg>&lt;script&gt;if (self['clear_ui_status']) { clear_ui_status(); }&lt;/script&gt;
Changing shell for zseasd.
Shell changed.
Unlocking password for user zseasd.
passwd: Success.
Unsuspending FTP accounts...
Updating ftp passwords for zseasd
Ftp password files updated.
Ftp vhost passwords synced
zseasds account is now active
Unsuspending mysql users
Notification =&gt; root\@localhost via EMAIL [level =&gt; 3]
</statusmsg>
  </result>
</unsuspendacct>
THEEND

$result = API::CPanel::User::enable(
    {
	%correct_params,
	user => $manipulate_user,
    }
);
is( $result, 1, 'API::CPanel::User::enable');

$result = API::CPanel::User::enable(
    {
	%correct_params,
	user   => $manipulate_user,
    }
);
is( $result, 1, 'API::CPanel::User::enable repeat');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
  <acct>
    <disklimit>unlimited</disklimit>
    <diskused>0M</diskused>
    <domain>qewqe.ru</domain>
    <email>*unknown*</email>
    <ip>192.168.123.208</ip>
    <maxaddons>*unknown*</maxaddons>
    <maxftp>unlimited</maxftp>
    <maxlst>unlimited</maxlst>
    <maxparked>*unknown*</maxparked>
    <maxpop>unlimited</maxpop>
    <maxsql>unlimited</maxsql>
    <maxsub>unlimited</maxsub>
    <owner>root</owner>
    <partition>home</partition>
    <plan>default</plan>
    <shell>/bin/bash</shell>

t/01-test.t  view on Meta::CPAN

...DoneRunning post removal scripts (/scripts/legacypostkillacct, /scripts/postkillacct)......DoneAccount Removal Complete!!!...zseasd account removed...Done</rawout>
    <status>1</status>
    <statusmsg>zseasd account removed</statusmsg>
  </result>
</removeacct>
THEEND

$result = API::CPanel::User::delete(
    {
	%correct_params,
	user => $manipulate_user,
    }
);
is( $result, 1, 'API::CPanel::User::delete');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<removeacct>
  <result>
    <rawout></rawout>
    <status>0</status>
    <statusmsg>Warning!.. system user zseasd does not exist!
</statusmsg>
  </result>
</removeacct>
THEEND

$result = API::CPanel::User::delete(
    {
	%correct_params,
	user => $manipulate_user,
    }
);
is( $result, '', 'API::CPanel::User::delete repeat');


#diag Dumper( $result );

# Mysql òåñòû

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
    <module>Mysql</module>
    <func>adduser</func>
    <type>event</type>
    <source>internal</source>
    <apiversion>1</apiversion>
    <data>
        <result></result>
    </data>
    <event>
        <result>1</result>
     </event>
</cpanelresult>
THEEND

$result = API::CPanel::Mysql::adduser(
    {
        %correct_params,
        do_as_user => 'zsezse5',
        username   => 'test13',
        password   => 'test13pass',
    }
);
is( $result, 1, 'API::CPanel::Mysql::adduser');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
    <module>Mysql</module>
    <func>adddb</func>
    <type>event</type>
    <source>internal</source>
    <apiversion>1</apiversion>
    <data>
        <result></result>
    </data>
    <event>
        <result>1</result>
    </event>
</cpanelresult>
THEEND

$result = API::CPanel::Mysql::adddb(
    {
        %correct_params,
        do_as_user => 'zsezse5',
        dbname     => 'default',
    }
);
is( $result, 1, 'API::CPanel::Mysql::adddb');


$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
    <module>Mysql</module>
    <func>adduserdb</func>
    <type>event</type>
    <source>internal</source>
    <apiversion>1</apiversion>
    <data>
        <result></result>
    </data>
    <event>
        <result>1</result>
    </event>
</cpanelresult>
THEEND

$result = API::CPanel::Mysql::grant_perms(
    {
        %correct_params,
        do_as_user => 'zsezse5',
        dbname     => 'zsezse5_default',
        dbuser     => 'zsezse5_test13',
        perms_list => 'all',
    }
);
is( $result, 1, 'API::CPanel::Mysql::grant_perms');

$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
  <apiversion>2</apiversion>
  <data>
    <reason>
         aaaaa.asdasd.ru was successfully parked on top of aaaaa.x
    </reason>
    <result>1</result>
  </data>
  <event>
    <result>1</result>
  </event>
  <func>addaddondomain</func>
  <module>AddonDomain</module>
</cpanelresult>
THEEND

my $addondomain = 'ssssss.ru';
my $subdomain = 'ssssss';
$result = API::CPanel::Domain::add_addon_domain(
    {
        %correct_params,
        do_as_user      => 'zsezse5',
        dir             => "public_html/$addondomain",
        newdomain       => $addondomain,
        pass            => 'asdsadasdsad',
        subdomain       => $subdomain,
    }
);
is( $result->{data}->{result}, 1 , 'API::CPanel::Domain::add_addon_domain');



( run in 1.415 second using v1.01-cache-2.11-cpan-cd2fffc590a )