]> git.proxmox.com Git - pve-installer.git/blob - test/parse-fqdn.pl
3009984821d71f30a5d9ddeb3ef1f8bf396e3e1e
[pve-installer.git] / test / parse-fqdn.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8 use Proxmox::Sys::Net qw(parse_fqdn);
9
10 # some constants just to avoid repeating ourselves
11 use constant ERR_INVALID => "Hostname does not look like a fully qualified domain name\n";
12 use constant ERR_ALPHANUM => "FQDN must only consist of alphanumeric characters and dashes\n";
13 use constant ERR_NUMERIC => "Purely numeric hostnames are not allowed\n";
14 use constant ERR_TOOLONG => "FQDN too long\n";
15 use constant ERR_EMPTY => "FQDN cannot be empty\n";
16
17 sub is_parsed {
18 my ($fqdn, $expected) = @_;
19
20 my @parsed = parse_fqdn($fqdn);
21 is_deeply(\@parsed, $expected, "FQDN is valid and compared successfully: $fqdn");
22 }
23
24 sub is_invalid {
25 my ($fqdn, $expected_err) = @_;
26
27 my $parsed = eval { parse_fqdn($fqdn) };
28 is($parsed, undef, "invalid FQDN did fail parsing: $fqdn");
29 is($@, $expected_err, "invalid FQDN threw correct error: $fqdn");
30 }
31
32 is_invalid(undef, ERR_EMPTY);
33 is_invalid('', ERR_EMPTY);
34
35 is_parsed('foo.example.com', ['foo', 'example.com']);
36 is_parsed('foo-bar.com', ['foo-bar', 'com']);
37 is_parsed('a-b.com', ['a-b', 'com']);
38
39 is_invalid('foo', ERR_INVALID);
40 is_invalid('-foo.com', ERR_ALPHANUM);
41 is_invalid('foo-.com', ERR_ALPHANUM);
42 is_invalid('foo.com-', ERR_ALPHANUM);
43 is_invalid('-o-.com', ERR_ALPHANUM);
44
45 # https://bugzilla.proxmox.com/show_bug.cgi?id=1054
46 is_invalid('123.com', ERR_NUMERIC);
47 is_parsed('foo123.com', ['foo123', 'com']);
48 is_parsed('123foo.com', ['123foo', 'com']);
49
50 is_parsed('a' x 63 . '.com', ['a' x 63, 'com']);
51 is_invalid('a' x 250 . '.com', ERR_TOOLONG);
52 is_invalid('a' x 64 . '.com', ERR_ALPHANUM);
53
54 done_testing();