#!/usr/bin/perl
use strict;
use blib;
use File::Spec;
use Cwd;
use Test::More tests => 12;
use Nmap::Parser;
use constant HOST1 => '127.0.0.1';
use constant HOST2 => '127.0.0.2';
use constant HOST3 => '127.0.0.3';
use constant HOST4 => '127.0.0.4';
use constant BASE_FILE =>'instance.xml';
use constant CURR_FILE =>'nmap_results.xml';
use vars qw($base $curr $BASE $CURR);
$BASE = File::Spec->catfile(cwd(),'t',BASE_FILE);
$BASE = File::Spec->catfile(cwd(), BASE_FILE) unless(-e $BASE);
$CURR = File::Spec->catfile(cwd(),'t',CURR_FILE);
$CURR = File::Spec->catfile(cwd(), CURR_FILE) unless(-e $CURR);
$curr = new Nmap::Parser;
$base = new Nmap::Parser;
isa_ok($curr, 'Nmap::Parser');
isa_ok($base, 'Nmap::Parser');
ok($base->parsefile($BASE),'Parsing from nmap data base image file');
ok($curr->parsefile($CURR),'Parsing from nmap data current image file');
my $host_curr = $curr->get_host(HOST3);
my $host_base = $base->get_host(HOST3);
isa_ok($host_curr,'Nmap::Parser::Host','host_curr');
isa_ok($host_base,'Nmap::Parser::Host','host_base');
cmp_ok($host_curr->tcp_port_count,'!=',$host_base->tcp_port_count, 'Object instance difference: TCP COUNT');
cmp_ok($host_curr->udp_port_count,'!=',$host_base->udp_port_count, 'Object instance difference: UDP COUNT');
my %port = ();
my @diff_open = grep { $port{$_} < 2} (map {$port{$_}++; $_} ($host_curr->tcp_open_ports, $host_base->tcp_open_ports));
is(scalar @diff_open, 2, "Open port difference: ".(join '',@diff_open));
my @diff_filtered = grep { $port{$_} < 2} (map {$port{$_}++; $_} ($host_curr->tcp_filtered_ports, $host_base->tcp_filtered_ports));
is(scalar @diff_filtered, 1, "Filtered port difference: ".(join '',@diff_filtered));
is($base->get_host(HOST2),undef, 'Base image should not have '.HOST2);
isnt($curr->get_host(HOST2),undef,'Current image should have '.HOST2);