#!/usr/bin/perl
my
(
$numtests
,
@replies
);
BEGIN {
$numtests
= 0;
eval
"use Test::NoWarnings"
;
if
( ! $@ ) {
$numtests
++;
}
@replies
= (
{
name
=>
'nobody on the server'
,
data
=>
'BQcCAAAAARc2AQCAaAQAAAoADDJUZWFtIERlYXRobWF0Y2ggIzk5IAwxQ1NOICM5OQwzIGJzMC43LjEAGAAA'
,
attrs
=> {
'map'
=>
''
,
players
=> 0,
protocol
=> 1128,
max_players
=> 24,
gamemode
=> get_gamemode_from_name(
'tdm'
),
minutes_left
=> 10,
pingtime
=> 1,
player_list
=> [],
desc_nocolor
=>
'Team Deathmatch #99 CSN #99 bs0.7.1'
,
is_full
=> 0,
},
},
{
name
=>
'full server'
,
data
=>
'BQcCAAAAARdFAQCAaAQAFANhcG9sbG9fZGVzZXJ0Y2l0eQAMMlRlYW0gRGVhdGhtYXRjaCAjMiAMMUNTTiAjNAwzIGJzMC43LjEAFAAA'
,
attrs
=> {
'map'
=>
'apollo_desertcity'
,
players
=> 20,
protocol
=> 1128,
max_players
=> 20,
gamemode
=> get_gamemode_from_name(
'tdm'
),
minutes_left
=> 3,
pingtime
=> 1,
player_list
=> [],
desc_nocolor
=>
'Team Deathmatch #2 CSN #4 bs0.7.1'
,
is_full
=> 1,
},
},
{
name
=>
'not full server'
,
data
=>
'BQcCAAAAARcwAQCAaAQFDAthY19kZXBvdAAMMkZsYWdzIAwxQ1NOICMyNQwzIGJzMC43LjEAHAAA'
,
attrs
=> {
'map'
=>
'ac_depot'
,
players
=> 12,
protocol
=> 1128,
max_players
=> 28,
gamemode
=> get_gamemode_from_name(
'ctf'
),
minutes_left
=> 11,
pingtime
=> 1,
player_list
=> [],
desc_nocolor
=>
'Flags CSN #25 bs0.7.1'
,
is_full
=> 0,
},
},
{
name
=>
'retrieving playerlist'
,
data
=>
'BQcCAAAAARdAAQGAaAQAAQ9hY19hcmN0aWMADDJNYXRjaCAjMSAMMUNTTiAjMzAMMyBiczAuNy4xAAoAAVB1bmhldGVpcm8AAA=='
,
attrs
=> {
'map'
=>
'ac_arctic'
,
players
=> 1,
protocol
=> 1128,
max_players
=> 10,
gamemode
=> get_gamemode_from_name(
'tdm'
),
minutes_left
=> 15,
pingtime
=> 1,
player_list
=> [
'Punheteiro'
,
],
desc_nocolor
=>
'Match #1 CSN #30 bs0.7.1'
,
is_full
=> 0,
},
},
{
name
=>
'bigger playerlist'
,
data
=>
'BQcCAAAAARdfAQGAaAQKAwRhY19hcmN0aWMADDJUT1NPSyAmIE9TT0sgIzIgDDFDU04gIzI2DDMgYnMwLjcuMQAMAAFLaXN0aXppW0hVTl0AUmFpbihCRSlbSkJmcl0AcGFjbyEhAAA='
,
attrs
=> {
'map'
=>
'ac_arctic'
,
players
=> 3,
protocol
=> 1128,
max_players
=> 12,
gamemode
=> get_gamemode_from_name(
'osok'
),
minutes_left
=> 4,
pingtime
=> 1,
player_list
=> [
'Kistizi[HUN]'
,
'Rain(BE)[JBfr]'
,
'paco!!'
,
],
desc_nocolor
=>
'TOSOK & OSOK #2 CSN #26 bs0.7.1'
,
is_full
=> 0,
},
},
{
name
=>
'biggest playerlist'
,
data
=>
'BQcCAAAAARfdAQGAaAQFFAlhcG9sbG9fZGVzZXJ0Y2l0eQAMMkN1c3RvbU1hcHMgQ1RGIAwxQ1NOICMxNgwzIGJzMC43LjEAFAABTFAAZHVkdTE1NwBEZW5pelR1a2V5AFpFVVMAYWxleGFuZHJlAGFwZmVsbXVzAFRpVGkwNjEzMABPbW1hAFIAfGFDS2F8R2hvc3QqAEtVWlVCT1laAE1vcmV6AGRqZWplAEktTUFHSUMtSQBMdWZmeVtGUl0AU3RlaW5lcgBqdW5pb3IAZDBuZQBNT0haRU0AY3JvcXVldHRlAAA='
,
attrs
=> {
'map'
=>
'apollo_desertcity'
,
players
=> 20,
protocol
=> 1128,
max_players
=> 20,
gamemode
=> get_gamemode_from_name(
'ctf'
),
minutes_left
=> 9,
pingtime
=> 1,
player_list
=> [
'LP'
,
'dudu157'
,
'DenizTukey'
,
'ZEUS'
,
'alexandre'
,
'apfelmus'
,
'TiTi06130'
,
'Omma'
,
'R'
,
'|aCKa|Ghost*'
,
'KUZUBOYZ'
,
'Morez'
,
'djeje'
,
'I-MAGIC-I'
,
'Luffy[FR]'
,
'Steiner'
,
'junior'
,
'd0ne'
,
'MOHZEM'
,
'croquette'
,
],
desc_nocolor
=>
'CustomMaps CTF CSN #16 bs0.7.1'
,
is_full
=> 1,
},
},
);
$numtests
+=
scalar
@replies
* 14;
}
my
$query
= Games::AssaultCube::ServerQuery->new(
'localhost'
);
SKIP: {
eval
"use Storable 2.18"
;
skip
"Storable v2.18+ not installed"
,
scalar
@replies
* 14
if
$@;
foreach
my
$test
(
@replies
) {
my
$datagram
= Storable::thaw( decode_base64(
$test
->{
'data'
} ) );
$datagram
=
$datagram
->[0];
my
$response
;
eval
{
$response
= Games::AssaultCube::ServerQuery::Response->new(
$query
,
$datagram
);
};
is( ! $@, 1,
"Parsed '"
.
$test
->{'name
'} . "'
with
no
errors" );
diag( $@ )
if
$@;
$test
->{
'attrs'
}->{
'server'
} =
'localhost'
;
$test
->{
'attrs'
}->{
'port'
} = 28763;
$test
->{
'attrs'
}->{
'datagram'
} =
$datagram
;
foreach
my
$attr
(
sort
keys
%{
$test
->{
'attrs'
} } ) {
if
(
defined
$test
->{
'attrs'
}->{
$attr
} ) {
if
( !
ref
(
$test
->{
'attrs'
}->{
$attr
} ) ) {
cmp_ok(
$response
->
$attr
(),
'eq'
,
$test
->{
'attrs'
}->{
$attr
},
"Testing attribute($attr)"
);
}
else
{
is_deeply(
$response
->
$attr
(),
$test
->{
'attrs'
}->{
$attr
},
"Testing datastruct attribute($attr)"
);
}
}
else
{
is( !
defined
$response
->
$attr
(), 1,
"Testing undef attribute($attr)"
);
}
}
}
}