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

use strict;
use warnings FATAL => 'all';
use Test::More tests => 15;

BEGIN {
  use_ok('NetAddr::MAC')
      or die "# NetAddr::MAC not available\n";
}

# just create an object
{

ok( ! $NetAddr::MAC::errstr, 'initial errstr empty before fcf8aeb721a9');
my $ret = NetAddr::MAC->new('fcf8aeb721a9');
ok( $ret, 'return value is true for fcf8aeb721a9' );
ok( ref $ret eq 'NetAddr::MAC', 'return value is a NetAddr::MAC object for fcf8aeb721a9' );
ok( ! $NetAddr::MAC::errstr, 'again errstr empty after fcf8aeb721a9');

}

# check we return errors properly
{

ok( ! $NetAddr::MAC::errstr, 'initial errstr empty before 11223344zz55');
my $ret = NetAddr::MAC->new('11223344zz55');
ok( ! $ret, 'return value is false for 11223344zz55' );
ok( $NetAddr::MAC::errstr, 'errstr populated after 11223344zz55');
like ($NetAddr::MAC::errstr,
  qr/Invalid MAC format/, 'Bad MAC character for 11223344zz55');

}

# now create again, make sure things work right
{

my $ret = NetAddr::MAC->new('742b62803518');
ok( $ret, 'return value is true for 742b62803518' );
ok( $ret->oui eq '74-2B-62', 'oui is 74-2B-62');
ok( ! $NetAddr::MAC::errstr, 'errstr emptied after 742b62803518');

}

# play with priority
{

my $ret = NetAddr::MAC->new('60#742b62803518');
ok( $ret, 'return value is true for 60#742b62803518' );
ok( $ret->{priority} == 60, 'internal priority is 60' );
ok( $ret->as_bridge_id eq '60#742b.6280.3518', 'as_bridge_id is correct' );

}

__END__

eval{NetAddr::MAC->new()};
like ($@,

eval{NetAddr::MAC->new('11:22:33:44:xx:55')};
like ($@,
  qr/Invalid MAC format/, 'Bad MAC character');

eval{NetAddr::MAC->new('1:1')};
like ($@,
  qr/Invalid MAC format/, 'Bad MAC octet');

eval{NetAddr::MAC->new('11:22:33')};
like ($@,
  qr/Invalid MAC format/, 'Short MAC');