Fugu
view release on metacpan or search on metacpan
t/fugu/mqtt.t view on Meta::CPAN
#!/usr/bin/env perl
use v5.34;
use warnings;
use experimental 'signatures';
no feature qw(indirect multidimensional bareword_filehandles);
use Test::More;
use FindBin qw($RealBin);
use lib "$RealBin/../../lib";
use Fugu::TestLog;
use_ok('Fugu::MQTT');
# Test MQTT client creation
{
my $mqtt = Fugu::MQTT->new(
host => '192.168.1.100',
port => 1883,
);
ok(defined $mqtt, 'MQTT client created');
isa_ok($mqtt, 'Fugu::MQTT');
is($mqtt->{host}, '192.168.1.100', 'Host set correctly');
is($mqtt->{port}, 1883, 'Port set correctly');
}
# Test default values
{
my $mqtt = Fugu::MQTT->new();
is($mqtt->{host}, '127.0.0.1', 'Default host is localhost');
is($mqtt->{port}, 1883, 'Default port is 1883');
ok(!$mqtt->{connected}, 'Not connected by default');
}
# Test with credentials
{
my $mqtt = Fugu::MQTT->new(
host => 'broker.example.com',
port => 8883,
username => 'testuser',
password => 'testpass',
);
is($mqtt->{username}, 'testuser', 'Username stored');
is($mqtt->{password}, 'testpass', 'Password stored');
}
# Test subscription storage
{
my $mqtt = Fugu::MQTT->new();
my $callback_called = 0;
my $callback = sub { $callback_called = 1 };
$mqtt->subscribe('test/topic', $callback);
ok(exists $mqtt->{subscriptions}{'test/topic'}, 'Subscription stored');
is(ref $mqtt->{subscriptions}{'test/topic'}, 'CODE', 'Callback is code ref');
}
# Test multiple subscriptions
{
my $mqtt = Fugu::MQTT->new();
$mqtt->subscribe('topic1', sub { });
$mqtt->subscribe('topic2', sub { });
$mqtt->subscribe('topic3', sub { });
is(scalar keys %{$mqtt->{subscriptions}}, 3, 'Three subscriptions stored');
}
# Test is_connected
{
my $mqtt = Fugu::MQTT->new();
ok(!$mqtt->is_connected(), 'Not connected initially');
$mqtt->{connected} = 1;
ok($mqtt->is_connected(), 'Connected after flag set');
}
# Test disconnect
{
my $mqtt = Fugu::MQTT->new();
$mqtt->{connected} = 1;
$mqtt->{client} = 'dummy';
$mqtt->disconnect();
ok(!$mqtt->is_connected(), 'Not connected after disconnect');
ok(!defined $mqtt->{client}, 'Client cleared');
}
# Test connect without Net::MQTT::Simple
( run in 0.688 second using v1.01-cache-2.11-cpan-007c89162af )