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;
use Test::Fatal;

{
    local $@ = undef;
    eval 'use Net::SNMP';
    $@ and plan skip_all => 'Net::SNMP is required for this test';
}

{
    local $@ = undef;
    eval 'use AnyEvent::SNMP';
    $@ and plan skip_all => 'AnyEvent::SNMP is required for this test';
}

{
    local $@ = undef;
    eval 'use Juno::Check::SNMP';
    $@ and plan skip_all => 'Juno::Check::SNMP is required for this test';
}

plan tests => 7;

like(
    exception {
        Juno::Check::SNMP->new(
            community   => 'b',
            version     => 2,
            oid         => 'stuff2'
        );
    },
    qr/^\QMissing required arguments: hostname\E/,
    'Attribute hostname required',
);

like(
    exception {
        Juno::Check::SNMP->new(
            hostname => 'a',
            version  => 2,
            oid      => 'stuff2',
        );
    },
    qr/^\QMissing required arguments: community\E/,
    'Attribute community required',
);

like(
    exception {
        Juno::Check::SNMP->new(
            hostname  => 'a',
            community => 'b',
            oid       => 'stuff2',
        );
    },
    qr/^\QMissing required arguments: version\E/,
    'Attribute version required',
);

like(
    exception {
        Juno::Check::SNMP->new(
            hostname  => 'a',
            community => 'b',
            version   => 2,
        );
    },
    qr/^\QMissing required arguments: oid\E/,
    'Attribute oid required',
);

my $juno = Juno::Check::SNMP->new(
    hostname  => 'localhost',
    community => 'stuff',
    version   => 2,
    oid       => 'stuff2',
);

isa_ok( $juno, 'Juno::Check::SNMP' );
isa_ok( $juno->session, 'Net::SNMP' );
is( $juno->session->hostname, 'localhost', 'hostname passed to SNMP session' );