#!/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);
