1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
package Test::Debconf::DbDriver::CommonTest;
use strict;
use FreezeThaw qw(cmpStr freeze);
use base qw(Test::Unit::TestCase);
sub new {
my $self = shift()->SUPER::new(@_);
return $self;
}
=head1 METHODS
This is the list of common tests used to validate drivers.
'test_item_*' methods create an item , put it on db, reload it from db and
test if the result is the same of the original.
=head2 test_item_1
Name : debconf-test/test_1
Owners : debconf-test, toto
=cut
sub test_item_1 {
my $self = shift;
$self->{testname} = 'test_item_1';
# item for testing
$self->{item} = {
name => 'debconf-test/test_1',
entry => {
owners => { 'debconf-test' => 1, toto => 1 },
fields => {},
variables => {},
flags => {},
}
};
$self->go_test_item();
}
=head2 test_item_2
Name : debconf-test/test_2
Owners : debconf_test
Value : <EMPTY>
=cut
sub test_item_2 {
my $self = shift;
$self->{testname} = 'test_item_2';
# item for testing
$self->{item} = {
name => 'debconf-test/test_2',
entry => {
owners => { 'debconf_test' => 1 },
fields => { value => '' },
variables => {},
flags => {},
}
};
$self->go_test_item();
}
=head2 test_item_3
Name : debconf-test/test_3
Owners : debconf
Variables : countries = <EMPTY>
=cut
sub test_item_3 {
my $self = shift;
$self->{testname} = 'test_item_3';
# item for testing
$self->{item} = {
name => 'debconf-test/test_3',
entry => {
owners => { 'debconf' => 1 },
fields => {},
variables => { countries => ''},
flags => {},
}
};
$self->go_test_item();
}
=head2 test_item_4
Name : debconf-test/test_4
Owners : debconf
Flags : seen
=cut
sub test_item_4 {
my $self = shift;
$self->{testname} = 'test_item_4';
# item for testing
$self->{item} = {
name => 'debconf-test/test_4',
entry => {
owners => { 'debconf' => 1 },
fields => {},
variables => {},
flags => { seen => 'true'},
}
};
$self->go_test_item();
}
sub test_shutdown {
my $self = shift;
$self->{testname} = 'test_shutdown';
# item for testing
my $item = {
name => 'debconf-test/test_shutdown',
entry => {
owners => { 'debconf' => 1 },
fields => {},
variables => {},
flags => { seen => 'true'},
}
};
$self->add_item($item, 'debconf',$self->{driver});
$self->{driver}->shutdown();
# verify if item is in cache and not in a dirty state
$self->assert(defined $self->{driver}->cachedata($item->{name}),
'item not defined in cache');
# verify that item is not in a dirty state
$self->assert($self->{driver}->{dirty}->{$item->{name}} == 0,
'item still in a dirty state in cache');
}
sub go_test_item {
my $self = shift;
my $itemname = $self->{item}->{name};
my $entry = $self->{item}->{entry};
# add item in the cache
$self->{driver}->cacheadd($itemname, $entry);
# set item in dirty state => it will be saved in database
$self->{driver}->{dirty}->{$itemname}=1;
# save item to database and reload it from database
$self->reconnectdb();
my $entry_from_db = $self->{driver}->cached($itemname);
my $result = cmpStr($entry, $entry_from_db);
$self->assert($result == 0,
'item saved in database differs from the original item');
}
sub reconnectdb {
my $self = shift;
# save items to database server
$self->shutdown_driver();
# reload same items from database server
$self->new_driver();
}
sub shutdown_driver {
my $self = shift;
$self->{driver}->shutdown();
}
sub add_item {
my $self = shift;
my $item = shift;
my $owner = shift;
my $dbdriver = shift;
$dbdriver->addowner($item->{name}, $owner);
foreach my $field (keys %{$item->{entry}->{fields}}) {
$dbdriver->setfield($item->{name}, $field, $item->{entry}->{fields}->{$field});
}
foreach my $flag (keys %{$item->{entry}->{flags}}) {
$dbdriver->setflag($item->{name}, $flag, $item->{entry}->{flags}->{$flag});
}
foreach my $variable (keys %{$item->{entry}->{variables}}) {
$dbdriver->setvariable($item->{name}, $variable, $item->{entry}->{variables}->{$variable});
}
}
1;
|