- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
72 lines
3.2 KiB
Perl
72 lines
3.2 KiB
Perl
use Test::More;
|
|
|
|
use 5.14.2;
|
|
use strict;
|
|
use warnings;
|
|
use List::Util qw[max];
|
|
|
|
use Zonemaster::Engine::Nameserver;
|
|
use Zonemaster::Engine::Util;
|
|
BEGIN { use_ok( 'Zonemaster::Engine::Recursor' ) }
|
|
|
|
my $datafile = 't/recursor.data';
|
|
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
|
die "Stored data file missing" if not -r $datafile;
|
|
Zonemaster::Engine::Nameserver->restore( $datafile );
|
|
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
|
}
|
|
|
|
my $p = Zonemaster::Engine::Recursor->recurse( 'www.iis.se' );
|
|
isa_ok( $p, 'Zonemaster::Engine::Packet' );
|
|
ok( $p->answer > 0, 'answer records' );
|
|
is( name( ($p->answer)[0]->name ), 'www.iis.se', 'RR name ok' );
|
|
|
|
my $p2 = Zonemaster::Engine::Recursor->recurse( 'www.wiccainfo.se' );
|
|
isa_ok( $p2, 'Zonemaster::Engine::Packet' );
|
|
is( scalar( $p2->answer ), 2, 'answer records' );
|
|
isa_ok( ($p2->answer)[0], 'Zonemaster::LDNS::RR::CNAME' );
|
|
is( name( ($p2->answer)[0]->owner ), 'www.wiccainfo.se', 'RR name ok' );
|
|
is( name( ($p2->answer)[0]->cname ), 'spencer.faerywicca.se', 'RR cname ok' );
|
|
isa_ok( ($p2->answer)[1], 'Zonemaster::LDNS::RR::A' );
|
|
is( name( ($p2->answer)[1]->owner ), 'spencer.faerywicca.se', 'RR name ok' );
|
|
is( ($p2->answer)[1]->address, '109.74.12.164', 'RR address ok' );
|
|
|
|
is_parent( 'iis.se', 'se' );
|
|
is_parent( 'www.iis.se', 'iis.se' );
|
|
is_parent( 'pp.se', 'se' );
|
|
is_parent( 'sno.pp.se', 'se' );
|
|
is_parent( '2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.9.5.0.7.2.0.0.0.7.4.0.1.0.0.2.ip6.arpa', '0.7.4.0.1.0.0.2.ip6.arpa' );
|
|
is_parent( '.', '.' );
|
|
is_parent( 'foo.bar.baz.example.org', 'example.org' );
|
|
is_parent( 'xx--doesnotexist.se', 'se' );
|
|
is_parent( 'xx--doesnotexist.com', 'com' );
|
|
is_parent( 'pewc.eu', 'eu' );
|
|
is_parent( 'melbourneit.com.au', 'com.au' );
|
|
|
|
sub is_parent {
|
|
my ( $name, $pname ) = @_;
|
|
|
|
my $pn = Zonemaster::Engine::Recursor->parent( $name );
|
|
is( $pn, $pname, "parent for $name is $pn" );
|
|
}
|
|
|
|
my ( $name, $packet ) = Zonemaster::Engine::Recursor->parent( 'www.iis.se' );
|
|
isa_ok( $packet, 'Zonemaster::Engine::Packet' );
|
|
is( $name, 'iis.se', 'name ok' );
|
|
ok( $packet->no_such_record, 'expected packet content' );
|
|
|
|
my @addr = Zonemaster::Engine::Recursor->get_addresses_for( 'ns.nic.se' );
|
|
isa_ok( $_, 'Net::IP::XS' ) for @addr;
|
|
is( $addr[0]->short, '212.247.7.228', 'expected address' );
|
|
is( $addr[1]->short, '2a00:801:f0:53::53', 'expected address' );
|
|
|
|
my $ns_count = Zonemaster::Engine::Nameserver->all_known_nameservers;
|
|
my $cache_count = keys %Zonemaster::Engine::Nameserver::Cache::object_cache;
|
|
ok( $cache_count < $ns_count, 'Fewer cache than ns' );
|
|
|
|
if ( $ENV{ZONEMASTER_RECORD} ) {
|
|
Zonemaster::Engine::Nameserver->save( $datafile );
|
|
}
|
|
|
|
done_testing;
|