The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use Test::More tests => 6;
use Test::Fatal;

use Sub::Override;
use Data::Collector;
use Data::Collector::Engine::OpenSSH;

my $sub = Sub::Override->new;

{
    package Data::Collector::Engine::MyTest;
    use Moose;
    extends 'Data::Collector::Engine';
    sub run {1}
}

{
    package Data::Collector::Info::EG;
    use Moose;
    extends 'Data::Collector::Info';
    sub info_keys { [] }
    sub all       { {} }
}

my $engine = Data::Collector::Engine::MyTest->new();
isa_ok( $engine, 'Data::Collector::Engine::MyTest' );

my $collector = Data::Collector->new(
    infos         => ['EG'],
    engine_object => $engine,
);

isa_ok( $collector, 'Data::Collector' );

is(
    exception { $collector->collect },
    undef,
    'Collecting once',
);

$engine->connected(1);

is(
    exception { $collector->collect },
    undef,
    'Collecting again',
);

# fake some engine to allow testing of loading
is(
    exception {
        $collector = Data::Collector->new(
            engine      => 'OpenSSH',
            engine_args => { host => 'heraldo' },
        );
    },
    undef,
    'New collector without problems',
);

is(
    exception { $collector->engine_object },
    undef,
    'Build engine successfully',
);