Config-Model-OpenSsh

 view release on metacpan or  search on metacpan

xt/parser.t  view on Meta::CPAN

use strict;
use warnings;
use lib qw(contrib/lib);
use 5.22.0;

use ParseMan;

use Test::More;
use Test::Differences;
use Path::Tiny;
use experimental qw/postderef signatures/ ;

use XXX;

my $html = path('xt/ssh_config.html')->slurp;

my $data = parse_html_man_page($html);

subtest "man page transformation" => sub {
    # test some data items
    is($data->{element_list}[0],'Host', "first element name");
    is($data->{element_list}[5],'BindAddress', "5th element name");

    my $param_data=$data->{element_data}{'VerifyHostKeyDNS'};
    is($param_data->[0],'B<VerifyHostKeyDNS>','check B<> transformation in parameter name');
    like($param_data->[1],qr/B<yes>/,'check B<> transformation in parameter description');
    is($param_data->[2],"See also\nI<VERIFYING HOST KEYS> in L<ssh(1)>.", "check I<> and L<> transformation");
};

subtest "test generation of model string" => sub {
    my @unilines = qw/ControlPersist GSSAPIClientIdentity IdentityAgent/;
    my $boolean = sub {
        return "type=leaf value_type=boolean write_as=no,yes upstream_default=$_[0]";
    };
    my $enum = sub ($set,$def = undef) {
        my $str = "type=leaf value_type=enum choice=$set";
        $str .= " upstream_default=$def" if defined $def;
        return $str;
    };

    my %expected_load = (
        AddKeysToAgent => $enum->('yes,confirm,ask,no', 'no'),
        AddressFamily => $enum->('any,inet,inet6', 'any'),
        BatchMode => $boolean->('no'),
        CanonicalizeFallbackLocal => $boolean->('yes'),
        CanonicalizeHostname => $enum->('no,yes,always', 'no'),
        CanonicalizeMaxDots => 'type=leaf value_type=integer upstream_default=1',
        CheckHostIP => $boolean->('yes'),
        ConnectionAttempts => 'type=leaf value_type=integer upstream_default=1',
        ConnectTimeout => 'type=leaf value_type=integer',
        ControlMaster => $enum->('auto,autoask,yes,no,ask', 'no'),
        DynamicForward => 'type=list cargo type=leaf value_type=uniline',
        ExitOnForwardFailure => $boolean->('no'),
        ForwardX11Timeout => 'type=leaf value_type=integer',
        GlobalKnownHostsFile => 'type=leaf value_type=uniline upstream_default=/etc/ssh/ssh_known_hosts',
        GSSAPIAuthentication => $boolean->('no'),
        GSSAPITrustDns => $boolean->('no'),
        Host => 'type=hash index_type=string cargo type=node config_class_name=Ssh::HostElement',
        IdentitiesOnly => $boolean->('no'),
        IdentityFile => 'type=list cargo type=leaf value_type=uniline',
        IPQoS => 'type=leaf value_type=uniline upstream_default="af21 cs1"',
        Match => 'type=hash index_type=string cargo type=node config_class_name=Ssh::HostElement',
        NumberOfPasswordPrompts => 'type=leaf value_type=integer upstream_default=3',
        RequestTTY => $enum->('no,yes,force,auto'),
        SendEnv =>  'type=list cargo type=leaf value_type=uniline',
        ServerAliveCountMax => 'type=leaf value_type=integer upstream_default=3',
        ServerAliveInterval => 'type=leaf value_type=integer upstream_default=0',
        LocalForward => 'type=list cargo type=node config_class_name="Ssh::PortForward"',
        RemoteForward => 'type=list cargo type=node config_class_name="Ssh::PortForward"',



( run in 1.435 second using v1.01-cache-2.11-cpan-39bf76dae61 )