File: 01-basics.t

package info (click to toggle)
libparse-netstat-perl 0.150-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 316 kB
  • sloc: perl: 636; makefile: 2
file content (102 lines) | stat: -rw-r--r-- 4,477 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!perl

use 5.010;
use strict;
use warnings;
use FindBin '$Bin';

use File::Slurper qw(read_text);
use Parse::Netstat qw(parse_netstat);
use Test::More 0.98;

sub test_parse {
    my (%args) = @_;
    my $name = $args{name};
    my $data = $args{data};

    subtest $name => sub {
        my $res;
        my $eval_err;
        eval {
            my %fargs = (output => $data, %{$args{args} // {}});
            $res = parse_netstat(%fargs);
        };
        $eval_err = $@;

        if ($args{dies}) {
            ok($eval_err, "dies");
        } else {
            ok(!$eval_err, "doesn't die") or diag $eval_err;
        }

        if (exists $args{status}) {
            is($res->[0], $args{status}, "result") or diag explain $res;
        }

        if ($res->[0] == 200) {
            my $parsed = $res->[2];
            my $conns  = $parsed->{active_conns};
            my $num_tcp  = grep {($_->{proto} // '') =~ /tcp[46]?/}  @$conns;
            my $num_udp  = grep {($_->{proto} // '') =~ /udp[46]?/}  @$conns;
            my $num_unix = grep {($_->{proto} // '') =~ /unix/} @$conns;
            if (defined $args{num_tcp}) {
                is($num_tcp, $args{num_tcp}, "num_tcp=$args{num_tcp}");
            }
            if (defined $args{num_udp}) {
                is($num_udp, $args{num_udp}, "num_udp=$args{num_udp}");
            }
            if (defined $args{num_unix}) {
                is($num_unix, $args{num_unix}, "num_unix=$args{num_unix}");
            }
        } else {
            ok(0, "result is not 200 ($res->[0])");
            diag explain $res;
        }

        if ($args{post_parse}) {
            $args{post_parse}->($res);
        }
    };
}

subtest "linux" => sub {
    my $data = read_text("$Bin/../share/netstat-samples/netstat-anp-linux");
    test_parse(name=>'all'    , data=>$data, args=>{flavor=>"linux"},          num_tcp=>10, num_udp=>4, num_unix=>3);
    test_parse(name=>'no tcp' , data=>$data, args=>{flavor=>"linux", tcp=>0},  num_tcp=>0 , num_udp=>4, num_unix=>3);
    test_parse(name=>'no udp' , data=>$data, args=>{flavor=>"linux", udp=>0},  num_tcp=>10, num_udp=>0, num_unix=>3);
    test_parse(name=>'no unix', data=>$data, args=>{flavor=>"linux", unix=>0}, num_tcp=>10, num_udp=>4, num_unix=>0);
};

subtest "freebsd" => sub {
    my $data = read_text("$Bin/../share/netstat-samples/netstat-an-freebsd-10.1");
    test_parse(name=>'all'    , args=>{flavor=>"freebsd"},          data=>$data, num_tcp=>23, num_udp=>13, num_unix=>27);
    test_parse(name=>'no tcp' , args=>{flavor=>"freebsd", tcp=>0},  data=>$data, num_tcp=> 0, num_udp=>13, num_unix=>27);
    test_parse(name=>'no udp' , args=>{flavor=>"freebsd", udp=>0},  data=>$data, num_tcp=>23, num_udp=> 0, num_unix=>27);
    test_parse(name=>'no unix', args=>{flavor=>"freebsd", unix=>0}, data=>$data, num_tcp=>23, num_udp=>13, num_unix=> 0);
};

subtest "darwin" => sub {
    my $data = read_text("$Bin/../share/netstat-samples/netstat-an-darwin");
    test_parse(name=>'all'    , args=>{flavor=>"darwin"},          data=>$data, num_tcp=>3, num_udp=>3, num_unix=>4);
    test_parse(name=>'no tcp' , args=>{flavor=>"darwin", tcp=>0},  data=>$data, num_tcp=>0, num_udp=>3, num_unix=>4);
    test_parse(name=>'no udp' , args=>{flavor=>"darwin", udp=>0},  data=>$data, num_tcp=>3, num_udp=>0, num_unix=>4);
    test_parse(name=>'no unix', args=>{flavor=>"darwin", unix=>0}, data=>$data, num_tcp=>3, num_udp=>3, num_unix=>0);
};

subtest "solaris" => sub {
    my $data = read_text("$Bin/../share/netstat-samples/netstat-n-solaris");
    test_parse(name=>'all'    , args=>{flavor=>"solaris"},          data=>$data, num_tcp=>6, num_udp=>3, num_unix=>11);
    test_parse(name=>'no tcp' , args=>{flavor=>"solaris", tcp=>0},  data=>$data, num_tcp=>0, num_udp=>3, num_unix=>11);
    test_parse(name=>'no udp' , args=>{flavor=>"solaris", udp=>0},  data=>$data, num_tcp=>6, num_udp=>0, num_unix=>11);
    test_parse(name=>'no unix', args=>{flavor=>"solaris", unix=>0}, data=>$data, num_tcp=>6, num_udp=>3, num_unix=> 0);
};

subtest "win32" => sub {
    my $data = read_text("$Bin/../share/netstat-samples/netstat-anp-win32");
    test_parse(name=>'all'   , args=>{flavor=>"win32"},         data=>$data, num_tcp=>4, num_udp=>2);
    test_parse(name=>'no tcp', args=>{flavor=>"win32", tcp=>0}, data=>$data, num_tcp=>0, num_udp=>2);
    test_parse(name=>'no udp', args=>{flavor=>"win32", udp=>0}, data=>$data, num_tcp=>4, num_udp=>0);
};

DONE_TESTING:
done_testing();