summaryrefslogblamecommitdiffstats
path: root/src/config-db/t/22-group_client_ref.t
blob: ff9d6ca78fce5da8d4425c3699425d7111001387 (plain) (tree)
1
2
3
4
5

                           


             




















                                                                              



                                                                       


                                                         



                                                                       


   

                                                

   

                                                              


                                                                 

                                                           

   

                                                             

   

                                                          

   

                                                          



                                                                

                                                        

   

                                                           


                                                                 

                                                           



                                                                  

                                                          

   

                                                          


                                                                

                                                          




                                                                 

                                                        

   

                                                          

   

                                                           

   

                                                           



                                                                 

                                                             

   

                                                          

   

                                                 

   

                                                          


                      


                                       

   

                                                   

   

                                                           

   

                                                           


                                                                 

                                                          

   

                                                          

   

                                                          

   

                                                          



                                                                

                                                              

   

                                                          

   

                                                           

   

                                                          


                        
use Test::More qw(no_plan);

use strict;
use warnings;

use lib '/opt/openslx/lib';

# basic init
use OpenSLX::ConfigDB;

my $configDB = OpenSLX::ConfigDB->new;
$configDB->connect();

# fetch groups & clients
my @groups = sort { $a->{id} <=> $b->{id} } $configDB->fetchGroupByFilter();
is(@groups, 2, 'should have got 2 groups (1 and 3)');
my $group1 = shift @groups;
my $group3 = shift @groups;

my @clients = sort { $a->{id} <=> $b->{id} } $configDB->fetchClientByFilter();
is(@clients, 3, 'should have got 3 clients (default, 1 and 3)');
my $defaultClient = shift @clients;
my $client1 = shift @clients;
my $client3 = shift @clients;

foreach my $group ($group1, $group3) {
    is(
        my @clientIDs = $configDB->fetchClientIDsOfGroup($group->{id}),
        0, "group $group->{id} has no client-IDs yet"
    );
}

foreach my $client ($defaultClient, $client1, $client3) {
    is(
        my @groupIDs = $configDB->fetchGroupIDsOfClient($client->{id}),
        0, "client $client->{id} has no group-IDs yet"
    );
}

ok(
    $configDB->addClientIDsToGroup(1, [3]),
    'client-ID 3 has been associated to group 1'
);
is(
    my @clientIDs = sort($configDB->fetchClientIDsOfGroup(1)),
    1, "group 1 should have one client-ID"
);
is($clientIDs[0], 3, "first client of group 1 should have ID 3");
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    0, "group 3 should have no client-ID"
);
is(
    my @groupIDs = sort($configDB->fetchGroupIDsOfClient(0)),
    0, "default client should have no group-IDs"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(1)),
    0, "client 1 should have no group-IDs"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(3)),
    1, "client 3 should have one group-ID"
);
is($groupIDs[0], 1, "first group of client 3 should have ID 1");

ok(
    $configDB->addClientIDsToGroup(3, [1,3,3,1,3]),
    'client-IDs 1 and 3 have been associated to group 3'
);
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(1)),
    1, "group 1 should have one client-ID"
);
is($clientIDs[0], 3, "first client of group 1 should have ID 3");
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    2, "group 3 should have two client-IDs"
);
is($clientIDs[0], 1, "first client of group 3 should have ID 1");
is($clientIDs[1], 3, "second client of group 3 should have ID 3");
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(0)),
    0, "default client should have no group-ID"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(1)),
    1, "client 1 should have one group-ID"
);
is($groupIDs[0], 3, "first group of client 1 should have ID 3");
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(3)),
    2, "client 3 should have two group-IDs"
);
is($groupIDs[0], 1, "first group of client 3 should have ID 1");
is($groupIDs[1], 3, "second group of client 3 should have ID 3");

ok(
    $configDB->setGroupIDsOfClient(3, []),
    'group-IDs of client 3 have been set to empty array'
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(3)),
    0, "client 3 should have no group-IDs"
);
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(1)),
    0, "group 1 should have no more client-IDs"
);
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    1, "group 3 should have one client-ID"
);
is($clientIDs[0], 1, "first client of group 3 should have ID 1");

ok(
    $configDB->removeGroupIDsFromClient(1, [1]),
    'removing an unassociated group-ID should have no effect'
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(1)),
    1, "client 1 should have one group-ID"
);
ok(
    $configDB->removeGroupIDsFromClient(1, [3]),
    'removing an associated group-ID should work'
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(1)),
    0, "client 1 should have no more group-ID"
);

$configDB->addClient({
    'name'      => 'cli-4',
    'mac'       => '01:01:01:02:02:02',
    'comment'   => 'shortlived',
});
ok(
    $configDB->addGroupIDsToClient(4, [3]),
    'default group has been associated to client 4'
);
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(1)),
    0, "group 1 should have no client-ID"
);
is(
    @clientIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    1, "group 3 should have one client-ID"
);
is($clientIDs[0], 4, "first client of group 3 should have ID 1");
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(0)),
    0, "default client should have no group-IDs"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(1)),
    0, "client 1 should have no group-ID"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(3)),
    0, "client 3 should have no group-IDs"
);
is(
    @groupIDs = sort($configDB->fetchGroupIDsOfClient(4)),
    1, "client 4 should have one group-ID"
);
is($groupIDs[0], 3, "first group of client 4 should have ID 3");

ok(
    $configDB->removeClientIDsFromGroup(3, [6]),
    'removing an unassociated client-ID should have no effect'
);
is(
    @groupIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    1, "group 3 should have one client-ID"
);
ok(
    $configDB->removeClient(4),
    'removing a client should drop group associations, too'
);
is(
    @groupIDs = sort($configDB->fetchClientIDsOfGroup(3)),
    0, "group 3 should have no more client-ID"
);

$configDB->disconnect();