my
$prov
= Provision::Unix->new(
debug
=> 0 );
my
$vos
;
eval
{
$vos
= Provision::Unix::VirtualOS->new(
prov
=>
$prov
,
fatal
=> 0,
debug
=> 0 ) };
if
(
$EVAL_ERROR
) {
my
$message
=
$EVAL_ERROR
;
chop
$message
;
plan
skip_all
=>
$message
;
}
else
{
plan
'no_plan'
;
};
ok(
defined
$vos
,
'get Provision::Unix::VirtualOS object'
);
ok(
$vos
->isa(
'Provision::Unix::VirtualOS'
),
'check object class'
);
my
$virt_class
=
ref
$vos
->{vtype};
my
@parts
=
split
/::/,
$virt_class
;
my
$virt_type
=
lc
(
$parts
[-1] );
ok(
$virt_type
,
"virtualization type: $virt_type"
);
my
$template_dir
;
my
$template_that_exists
=
undef
;
if
(
$virt_type
=~ /virtuozzo|ovz|openvz|xen/ ) {
$template_dir
=
$vos
->get_template_dir(
v_type
=>
$virt_type
);
ok(
$template_dir
,
"get_template_dir, $template_dir"
);
my
$templates
=
$vos
->get_template_list(
v_type
=>
$virt_type
);
ok(
$templates
&&
scalar
@$templates
,
'get_template_list'
) or
do
{
warn
"no templates installed!"
;
exit
;
};
my
@preferred
;
@preferred
=
grep
{
$_
->{name} =~ /debian/}
@$templates
or
@preferred
=
grep
{
$_
->{name} =~ /cpanel/}
@$templates
or
@preferred
=
grep
{
$_
->{name} =~ /ubuntu/}
@$templates
or
@preferred
=
grep
{
$_
->{name} =~ /centos/}
@$templates
or
$template_that_exists
=
@$templates
[0]->{name};
if
( !
$template_that_exists
) {
my
@list
=
grep
{
$_
->{name} =~ /
default
/}
sort
{
$b
cmp
$a
}
@preferred
;
if
(
scalar
@list
> 0 ) {
no
warnings;
my
@sorted
=
sort
{ (
$b
=~ /(\d\.\d)/)[0] <=> (
$a
=~ /(\d\.\d)/)[0] }
@list
;
$template_that_exists
=
$sorted
[0]->{name}
if
scalar
@sorted
> 0;
};
$template_that_exists
||=
$preferred
[0]->{name};
};
};
my
$ve_id_or_name
=
$virt_type
eq
'openvz'
? 72000
:
$virt_type
eq
'ovz'
? 72000
:
$virt_type
eq
'virtuozzo'
? 72000
:
$virt_type
eq
'xen'
?
'test1'
:
$virt_type
eq
'ezjail'
?
'test1'
:
$virt_type
eq
'jail'
?
'test1'
:
undef
;
my
%common
= (
name
=>
$ve_id_or_name
,
debug
=> 0,
fatal
=> 0,
);
my
$required_bin
=
$virt_type
eq
'openvz'
?
'vzlist'
:
$virt_type
eq
'ovz'
?
'vzlist'
:
$virt_type
eq
'virtuozzo'
?
'vzlist'
:
$virt_type
eq
'xen'
?
'xm'
:
undef
;
my
%requires_template
=
map
{
$_
=> 1 }
qw/ xen ovz openvz virtuozzo /
;
my
$util
=
$prov
->get_util;
if
(
defined
$required_bin
) {
my
$found_bin
=
$util
->find_bin(
$required_bin
,
fatal
=> 0,
debug
=> 0 );
if
( !
$found_bin
|| !-x
$found_bin
) {
print
"Skipped tests b/c virtual type $virt_type chosen but $required_bin not found.\n"
;
exit
;
}
}
ok( !
$vos
->is_valid_ip(
'1.1.1'
),
'is_valid_ip -'
);
ok( !
$vos
->is_valid_ip(
'1.1.1.1.1'
),
'is_valid_ip -'
);
ok(
$vos
->is_valid_ip(
'1.1.1.1'
),
'is_valid_ip +'
);
ok( !
$vos
->is_valid_ip(
'0.0.0.0'
),
'is_valid_ip -'
);
ok( !
$vos
->is_valid_ip(
'255.255.255.255'
),
'is_valid_ip -'
);
ok( !
$vos
->is_valid_ip(
'0.1.1.1'
),
'is_valid_ip -'
);
ok(
$vos
->is_valid_ip(
'2.1.1.1'
),
'is_valid_ip +'
);
my
$fs_root
=
$vos
->get_fs_root(
$ve_id_or_name
);
SKIP: {
skip
"you are not root"
, 13
if
$EFFECTIVE_USER_ID
!= 0;
skip
"could not determine a valid name"
, 12
if
!
$ve_id_or_name
;
my
$r
;
if
( -d
"$fs_root/etc"
) {
print
"\n$fs_root/etc/resolv.conf\n"
;
$r
=
$vos
->set_nameservers(
%common
,
nameservers
=>
'67.223.251.133 64.79.200.113'
,
test_mode
=> 1,
);
ok(
$r
,
"set_nameservers"
);
};
if
(
$vos
->is_present(
name
=>
$ve_id_or_name
) ) {
$r
=
$vos
->get_status(
name
=>
$ve_id_or_name
);
ok(
$r
,
'get_status'
);
};
if
(
$virt_type
eq
'xen'
) {
}
my
%request
= (
%common
);
if
(
$vos
->is_present(
%common
) ) {
if
(
$vos
->is_running(
%common
) ) {
ok(
$vos
->stop(
%common
),
'stop'
);
};
$request
{test_mode} = 0;
ok(
$vos
->destroy(
%common
),
'destroy'
);
sleep
1;
}
$request
{test_mode} = 1;
$request
{ip} =
'10.0.1.68'
;
$request
{ram} = 512;
$request
{disk_size} = 4000;
$r
=
$vos
->create(
%request
);
if
(
$requires_template
{
$virt_type
} ) {
ok( !
$r
,
'create, no template'
);
}
else
{
ok(
$r
,
'create, no template'
);
}
$request
{ip} =
'10.0.1.'
;
ok( !
$vos
->create(
%request
),
'create, no valid IPs'
);
$request
{ip} =
'10.0.1.70'
;
$request
{template} =
'non-existing'
;
ok( !
$vos
->create(
%request
),
'create, invalid template'
);
if
(
$requires_template
{
$virt_type
} ) {
$request
{template} =
$template_that_exists
;
}
else
{
delete
$request
{template};
};
$request
{ip} =
'10.0.1.73 10.0.1.74 10.0.1.75'
;
$request
{password} =
'p_u_t3stlng'
;
$request
{ssh_key} =
'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv6f4BW89Afnsx51BkxGvPbLeqDK+o6RXp+82KSIhoiWzCJp/dwhB7xNBR0W7Lt/n7KJUGYdlP7h5YlmgvpdJayzMkbsoBW2Hj9/7MkFraUlWYIU9QtAUCOARBPQWC3JIkslVvInGBxMxH5vcCO0/3TM/FFZylPTXjyqmsVDgnY4C1zFW3SdGDh7+1NCDh4Jsved+UVE5KwN/ZGyWKpWXLqMlEFTTxJ1aRk563p8wW3F7cPQ59tLP+a3iHdH9sE09ynbI/I/tnAHcbZncwmdLy0vMA6Jp3rWwjXoxHJQLOfrLJzit8wzG867+RYDfm6SZWg7iYZYUlps1LSXSnUxuTQ== matt@SpryBook-Pro.local'
;
ok(
$vos
->create(
%request
),
"create, valid template ($template_that_exists), test mode"
);
$request
{hostname} =
'test1.example.com'
;
$request
{nameservers} =
'64.79.200.111 64.79.200.113'
;
$request
{test_mode} = 0;
ok(
$vos
->create(
%request
),
'create, valid request'
)
or
do
{
$request
{debug} = 1;
warn
Dumper(\
%request
);
diag
$vos
->create(
%request
);
};
ok(
$vos
->start(
%common
),
'start'
);
ok(
$vos
->restart(
%common
),
'restart'
);
ok(
$vos
->set_password(
%common
,
user
=>
'root'
,
password
=>
'letm3iwchlnny'
,
ssh_key
=>
'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv6f4BW89Afnsx51BkxGvPbLeqDK+o6RXp+82KSIhoiWzCJp/dwhB7xNBR0W7Lt/n7KJUGYdlP7h5YlmgvpdJayzMkbsoBW2Hj9/7MkFraUlWYIU9QtAUCOARBPQWC3JIkslVvInGBxMxH5vcCO0/3TM/FFZylPTXjyqmsVDgnY4C1zFW3SdGDh7+1NCDh4Jsved+UVE5KwN/ZGyWKpWXLqMlEFTTxJ1aRk563p8wW3F7cPQ59tLP+a3iHdH9sE09ynbI/I/tnAHcbZncwmdLy0vMA6Jp3rWwjXoxHJQLOfrLJzit8wzG867+RYDfm6SZWg7iYZYUlps1LSXSnUxuTQ== matt@SpryBook-Pro.local'
,
),
'set_password'
);
ok(
$vos
->disable(
%common
),
'disable'
);
ok(
$vos
->enable(
%common
),
'enable'
);
ok(
$vos
->stop(
%common
),
'stop'
);
ok(
$vos
->destroy(
%common
,
test_mode
=> 0),
'destroy'
);
};