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 )