summaryrefslogtreecommitdiffstats
path: root/config-db/t/13-client.t
diff options
context:
space:
mode:
Diffstat (limited to 'config-db/t/13-client.t')
-rw-r--r--config-db/t/13-client.t179
1 files changed, 173 insertions, 6 deletions
diff --git a/config-db/t/13-client.t b/config-db/t/13-client.t
index 70ed569c..5848ba53 100644
--- a/config-db/t/13-client.t
+++ b/config-db/t/13-client.t
@@ -1,5 +1,8 @@
use Test::More qw(no_plan);
+use strict;
+use warnings;
+
use lib '/opt/openslx/lib';
# basic init
@@ -35,6 +38,11 @@ my $inClient1 = {
'name' => 'cli-1',
'mac' => '01:02:03:04:05:01',
'comment' => '',
+ 'attrs' => {
+ 'slxgrp' => 'slxgrp',
+ 'start_snmp' => 'no',
+ 'start_sshd' => 'yes',
+ },
};
is(
my $client1ID = $configDB->addClient($inClient1), 1,
@@ -55,6 +63,39 @@ my $fullClient = {
'kernel_params' => 'debug=3 console=ttyS1',
'unbootable' => '0',
'boot_type' => 'pxe',
+ 'attrs' => {
+ 'automnt_dir' => 'a',
+ 'automnt_src' => 'b',
+ 'country' => 'c',
+ 'dm_allow_shutdown' => 'd',
+ 'hw_graphic' => 'e',
+ 'hw_monitor' => 'f',
+ 'hw_mouse' => 'g',
+ 'late_dm' => 'h',
+ 'netbios_workgroup' => 'i',
+ 'nis_domain' => 'j',
+ 'nis_servers' => 'k',
+ 'sane_scanner' => 'p',
+ 'scratch' => 'q',
+ 'slxgrp' => 'r',
+ 'start_alsasound' => 's',
+ 'start_atd' => 't',
+ 'start_cron' => 'u',
+ 'start_dreshal' => 'v',
+ 'start_ntp' => 'w',
+ 'start_nfsv4' => 'x',
+ 'start_printer' => 'y',
+ 'start_samba' => 'z',
+ 'start_snmp' => 'A',
+ 'start_sshd' => 'B',
+ 'start_syslog' => 'C',
+ 'start_x' => 'D',
+ 'start_xdmcp' => 'E',
+ 'tex_enable' => 'F',
+ 'timezone' => 'G',
+ 'tvout' => 'H',
+ 'vmware' => 'I',
+ },
};
ok(
my ($client2ID, $client3ID) = $configDB->addClient([
@@ -74,18 +115,51 @@ is($client3->{comment}, 'nuff said', 'client 3 - comment');
is($client3->{boot_type}, 'pxe', 'client 3 - boot_type');
is($client3->{kernel_params}, 'debug=3 console=ttyS1', 'client 3 - kernel_params');
is($client3->{unbootable}, '0', 'client 3 - unbootable');
+is($client3->{attrs}->{automnt_dir}, 'a', 'client 3 - attr automnt_dir');
+is($client3->{attrs}->{automnt_src}, 'b', 'client 3 - attr automnt_src');
+is($client3->{attrs}->{country}, 'c', 'client 3 - attr country');
+is($client3->{attrs}->{dm_allow_shutdown}, 'd', 'client 3 - attr dm_allow_shutdown');
+is($client3->{attrs}->{hw_graphic}, 'e', 'client 3 - attr hw_graphic');
+is($client3->{attrs}->{hw_monitor}, 'f', 'client 3 - attr hw_monitor');
+is($client3->{attrs}->{hw_mouse}, 'g', 'client 3 - attr hw_mouse');
+is($client3->{attrs}->{late_dm}, 'h', 'client 3 - attr late_dm');
+is($client3->{attrs}->{netbios_workgroup}, 'i', 'client 3 - attr netbios_workgroup');
+is($client3->{attrs}->{nis_domain}, 'j', 'client 3 - attr nis_domain');
+is($client3->{attrs}->{nis_servers}, 'k', 'client 3 - attr nis_servers');
+is($client3->{attrs}->{sane_scanner}, 'p', 'client 3 - attr sane_scanner');
+is($client3->{attrs}->{scratch}, 'q', 'client 3 - attr scratch');
+is($client3->{attrs}->{slxgrp}, 'r', 'client 3 - attr slxgrp');
+is($client3->{attrs}->{start_alsasound}, 's', 'client 3 - attr start_alsasound');
+is($client3->{attrs}->{start_atd}, 't', 'client 3 - attr start_atd');
+is($client3->{attrs}->{start_cron}, 'u', 'client 3 - attr start_cron');
+is($client3->{attrs}->{start_dreshal}, 'v', 'client 3 - attr start_dreshal');
+is($client3->{attrs}->{start_ntp}, 'w', 'client 3 - attr start_ftp');
+is($client3->{attrs}->{start_nfsv4}, 'x', 'client 3 - attr start_nfsv4');
+is($client3->{attrs}->{start_printer}, 'y', 'client 3 - attr start_printer');
+is($client3->{attrs}->{start_samba}, 'z', 'client 3 - attr start_samba');
+is($client3->{attrs}->{start_snmp}, 'A', 'client 3 - attr start_snmp');
+is($client3->{attrs}->{start_sshd}, 'B', 'client 3 - attr start_sshd');
+is($client3->{attrs}->{start_syslog}, 'C', 'client 3 - attr start_syslog');
+is($client3->{attrs}->{start_x}, 'D', 'client 3 - attr start_x');
+is($client3->{attrs}->{start_xdmcp}, 'E', 'client 3 - attr start_xdmcp');
+is($client3->{attrs}->{tex_enable}, 'F', 'client 3 - attr tex_enable');
+is($client3->{attrs}->{timezone}, 'G', 'client 3 - attr timezone');
+is($client3->{attrs}->{tvout}, 'H', 'client 3 - attr tvout');
+is($client3->{attrs}->{vmware}, 'I', 'client 3 - attr vmware');
+is(keys %{$client3->{attrs}}, 31, 'client 3 - attribute count');
# fetch client 2 by a filter on id and check all values
ok(
my $client2 = $configDB->fetchClientByFilter({ id => 2 }),
'fetch client 2 by filter on id'
);
-is($client2->{id}, 2, 'client 2 - id');
-is($client2->{name}, 'cli-2.0', 'client 2 - name');
-is($client2->{unbootable}, '1', 'client 2 - unbootable');
-is($client2->{mac}, '01:02:03:04:05:02', 'client 2 - mac');
-is($client2->{comment}, undef, 'client 2 - comment');
-is($client2->{boot_type}, 'etherboot', 'client 2 - boot_type');
+is($client2->{id}, 2, 'client 2 - id');
+is($client2->{name}, 'cli-2.0', 'client 2 - name');
+is($client2->{unbootable}, '1', 'client 2 - unbootable');
+is($client2->{mac}, '01:02:03:04:05:02', 'client 2 - mac');
+is($client2->{comment}, undef, 'client 2 - comment');
+is($client2->{boot_type}, 'etherboot', 'client 2 - boot_type');
+is(keys %{$client2->{attrs}}, 0, 'client 2 - attribute count');
# fetch client 1 by filter on name and check all values
ok(
@@ -99,6 +173,10 @@ is($client1->{unbootable}, undef, 'client 1 - unbootable');
is($client1->{comment}, '', 'client 1 - comment');
is($client1->{boot_type}, 'pxe', 'client 1 - boot_type');
is($client1->{kernel_params}, undef, 'client 1 - kernel_params');
+is(keys %{$client1->{attrs}}, 3, 'client 1 - attribute count');
+is($client1->{attrs}->{slxgrp}, 'slxgrp', 'client 1 - attr slxgrp');
+is($client1->{attrs}->{start_snmp}, 'no', 'client 1 - attr start_snmp');
+is($client1->{attrs}->{start_sshd}, 'yes', 'client 1 - attr start_sshd');
# fetch clients 3 & 1 by id
ok(
@@ -144,6 +222,14 @@ ok(
is($client1->{name}, 'cli-1', 'should have got cli-1');
is($client3, undef, 'should not get cli-nr-3');
+# fetch client 1 by filter on unbootable being undef'd
+ok(
+ my @client1Only = $configDB->fetchClientByFilter({ unbootable => undef }),
+ 'fetch client 1 by filter on unbootable being undefined'
+);
+is(@client1Only, 1, 'should have got 1 client');
+is($client1Only[0]->{id}, 1, 'first id should be 1');
+
# try to fetch multiple occurrences of the same client, combined with
# some unknown IDs
ok(
@@ -156,6 +242,84 @@ is(@clients1And3, 2, 'should have got 2 clients');
is($clients1And3[0]->{id}, 1, 'first id should be 1');
is($clients1And3[1]->{id}, 3, 'second id should be 3');
+# filter clients by different attributes & values in combination
+ok(
+ @client1Only = $configDB->fetchClientByFilter( {}, undef, {
+ start_snmp => 'no',
+ } ),
+ 'fetch client 1 by filter on attribute start_snmp'
+);
+
+is(@client1Only, 1, 'should have got 1 client');
+is($client1Only[0]->{id}, 1, 'first id should be 1');
+
+ok(
+ @client1Only = $configDB->fetchClientByFilter( undef, 'id', {
+ start_snmp => 'no',
+ tex_enable => undef,
+ } ),
+ 'fetch client 1 by filter on attribute start_snmp + non-existing attr'
+);
+is(@client1Only, 1, 'should have got 1 client');
+is($client1Only[0]->{id}, 1, 'first id should be 1');
+
+ok(
+ @client1Only = $configDB->fetchClientByFilter( {
+ name => 'cli-1',
+ unbootable => undef,
+ }, 'id', {
+ start_snmp => 'no',
+ tex_enable => undef,
+ } ),
+ 'fetch client 1 by multiple filter on values and attributes'
+);
+is(@client1Only, 1, 'should have got 1 client');
+is($client1Only[0]->{id}, 1, 'first id should be 1');
+
+is(
+ $configDB->fetchClientByFilter( {
+ comment => 'xxx',
+ }, 'id', {
+ start_snmp => 'no',
+ tex_enable => undef,
+ } ),
+ undef,
+ 'mismatch client 1 by filter with incorrect value'
+);
+is(
+ $configDB->fetchClientByFilter( {
+ name => 'cli-1',
+ }, 'id', {
+ start_snmp => 'yes',
+ tex_enable => undef,
+ } ),
+ undef,
+ 'mismatch client 1 by filter with incorrect attribute value'
+);
+is(
+ $configDB->fetchClientByFilter( {
+ name => 'cli-1',
+ }, 'id', {
+ start_sshd => undef,
+ } ),
+ undef,
+ 'mismatch client 1 by filter with attribute not being empty'
+);
+
+# fetch clients 0, 1 & 2 by filter on attribute start_samba not existing
+ok(
+ my @clients01And2 = $configDB->fetchClientByFilter( {}, undef, {
+ start_samba => undef,
+ } ),
+ 'fetch clients 0,1 & 2 by filter on attribute start_samba not existing'
+);
+is(@clients01And2, 3, 'should have got 3 clients');
+# now sort by ID and check if we have really got 0, 1 and 2
+@clients01And2 = sort { $a->{id} cmp $b->{id} } @clients01And2;
+is($clients01And2[0]->{id}, 0, 'first id should be 0');
+is($clients01And2[1]->{id}, 1, 'second id should be 1');
+is($clients01And2[2]->{id}, 2, 'third id should be 2');
+
# try to fetch a couple of non-existing clients by id
is(
$configDB->fetchClientByID(-1), undef,
@@ -190,6 +354,9 @@ ok(
is($client1->{id}, 1, 'really got client number 1');
is($client1->{name}, q{CLI-'1'}, q{really got client named "CLI-'1'"});
+# changing nothing at all should succeed
+ok($configDB->changeClient(1), 'changing nothing at all in client 1');
+
# changing a non-existing column should fail
ok(
! eval { $configDB->changeClient(1, { xname => "xx" }) },