File Coverage

blib/lib/Slackware/Slackget/Config.pm
Criterion Covered Total %
statement 12 125 9.6
branch 1 52 1.9
condition 1 69 1.4
subroutine 4 5 80.0
pod 2 2 100.0
total 20 253 7.9


line stmt bran cond sub pod time code
1             package Slackware::Slackget::Config;
2              
3 4     4   48326 use warnings;
  4         6  
  4         108  
4 4     4   13 use strict;
  4         4  
  4         123  
5              
6             $XML::Simple::PREFERRED_PARSER='XML::Parser';
7 4     4   651 use XML::Simple;
  4         6047  
  4         26  
8              
9             =head1 NAME
10              
11             Slackware::Slackget::Config - An interface to the configuration file
12              
13             =head1 VERSION
14              
15             Version 1.0.0
16              
17             =cut
18              
19             our $VERSION = '1.0.0';
20              
21             =head1 SYNOPSIS
22              
23             This class is use to load a configuration file (config.xml) and the servers list file (servers.xml). It only encapsulate the XMLin() method of XML::Simple, there is no accessors or treatment method for this class.
24             There is only a constructor which take only one argument : the name of the configuration file.
25              
26             After loading you can acces to all values of the config file in the same way that with XML::Simple.
27              
28             The only purpose of this class, is to allow other class to check that the config file have been properly loaded.
29              
30             use Slackware::Slackget::Config;
31              
32             my $config = Slackware::Slackget::Config->new('/etc/slack-get/config.xml') or die "cannot load config.xml\n";
33             print "I will use the encoding: $config->{common}->{'file-encoding'}\n";
34             print "slack-getd is configured as: $config->{daemon}->{mode}\n" ;
35              
36             This module need XML::Simple to work.
37              
38             =cut
39              
40             =head1 CONSTRUCTOR
41              
42             =head2 new
43              
44             The constructor take the config file name as argument.
45              
46             my $config = Slackware::Slackget::Config->new('/etc/slack-get/config.xml') or die "cannot load config.xml\n";
47              
48             =cut
49              
50             sub new
51             {
52 2     2 1 186 my ($class,$file) = @_ ;
53 2 50 33     52 return undef unless(-e $file && -r $file);
54 2 0       12 my $self= XMLin($file , ForceArray => ['li']) or return undef;
55             # use Data::Dumper;
56             # print Dumper($self);
57 0 0         return undef unless(defined($self->{common}));
58 0 0 0       if(exists($self->{'plugins'}->{'list'}->{'plug-in'}->{'id'}) && defined($self->{'plugins'}->{'list'}->{'plug-in'}->{'id'}))
59             {
60 0           my $tmp = $self->{'plugins'}->{'list'}->{'plug-in'};
61 0           delete($self->{'plugins'}->{'list'}->{'plug-in'});
62 0           $self->{'plugins'}->{'list'}->{'plug-in'}->{$tmp->{'id'}} = $tmp;
63 0           delete($self->{'plugins'}->{'list'}->{'plug-in'}->{$tmp->{'id'}}->{'id'});
64             }
65 0 0         if($ENV{SG_DAEMON_DEBUG}){
66 0           require Data::Dumper;
67 0           print Data::Dumper::Dumper( $self ),"\n";
68             }
69 0           bless($self,$class);
70 0           return $self;
71             }
72              
73             =head2 check_config
74              
75             Check for some fatal omission or error in the configuration file. Return the number of fatal errors found. Print message on the standard error output.
76              
77             my $error_count = $config->check_config ;
78              
79             =cut
80              
81             sub check_config
82             {
83 0     0 1   my $self = shift;
84 0           my $fatal = 0;
85 0           print STDERR "===> Checking for fatal error in the configuration file <===\n";
86 0           print STDERR "checking for options '<common>'...";
87 0 0 0       if(exists($self->{'common'}) && defined($self->{'common'}))
88             {
89 0           print STDERR "ok\n";
90             }
91             else
92             {
93 0           print STDERR "no\n";
94 0           $fatal++;
95             }
96 0           print STDERR "\tchecking for options '<update-directory>'...";
97 0 0 0       if(exists($self->{'common'}->{'update-directory'}) && defined($self->{'common'}->{'update-directory'}))
98             {
99 0           print STDERR "ok\n";
100             }
101             else
102             {
103 0           print STDERR "no\n";
104             }
105 0           print STDERR "\tchecking for options '<server-list-file>'...";
106 0 0 0       if(exists($self->{'common'}->{'server-list-file'}) && defined($self->{'common'}->{'server-list-file'}))
107             {
108 0           print STDERR "ok\n";
109             }
110             else
111             {
112 0           print STDERR "no\n";
113 0           $fatal++;
114             }
115 0           print STDERR "\tchecking for options '<packages-history-dir>'...";
116 0 0 0       if(exists($self->{'common'}->{'packages-history-dir'}) && defined($self->{'common'}->{'packages-history-dir'}))
117             {
118 0           print STDERR "ok\n";
119             }
120             else
121             {
122 0           print STDERR "no\n";
123 0           $fatal++;
124             }
125 0           print STDERR "\tchecking for options '<conf-version>'...";
126 0 0 0       if(exists($self->{'common'}->{'conf-version'}) && defined($self->{'common'}->{'conf-version'}))
127             {
128 0           print STDERR "ok\n";
129             }
130             else
131             {
132 0           print STDERR "no\n";
133 0           $fatal++;
134             }
135            
136 0           print STDERR "checking for options '<daemon>'...";
137 0 0 0       if(exists($self->{'daemon'}) && defined($self->{'daemon'}))
138             {
139 0           print STDERR "ok\n";
140             }
141             else
142             {
143 0           print STDERR "no\n";
144 0           $fatal++;
145             }
146 0           print STDERR "\tchecking for options '<pid-file>'...";
147 0 0 0       if(exists($self->{'daemon'}->{'pid-file'}) && defined($self->{'daemon'}->{'pid-file'}))
148             {
149 0           print STDERR "ok\n";
150             }
151             else
152             {
153 0           print STDERR "no\n";
154 0           $fatal++;
155             }
156 0           print STDERR "\tchecking for options '<installed-packages-list>'...";
157 0 0 0       if(exists($self->{'daemon'}->{'installed-packages-list'}) && defined($self->{'daemon'}->{'installed-packages-list'}))
158             {
159 0           print STDERR "ok\n";
160             }
161             else
162             {
163 0           print STDERR "no\n";
164 0           $fatal++;
165             }
166 0           print STDERR "\t\tchecking for options '<build-on-update>'...";
167 0 0 0       if(exists($self->{'daemon'}->{'installed-packages-list'}->{'build-on-update'}) && defined($self->{'daemon'}->{'installed-packages-list'}->{'build-on-update'}))
168             {
169 0           print STDERR "ok\n";
170             }
171             else
172             {
173 0           print STDERR "no\n";
174 0           $fatal++;
175             }
176 0           print STDERR "\t\tchecking for options '<build-each>'...";
177 0 0 0       if(exists($self->{'daemon'}->{'installed-packages-list'}->{'build-each'}) && defined($self->{'daemon'}->{'installed-packages-list'}->{'build-each'}))
178             {
179 0           print STDERR "ok\n";
180             }
181             else
182             {
183 0           print STDERR "no\n";
184 0           $fatal++;
185             }
186 0           print STDERR "\tchecking for options '<update-list>'...";
187 0 0 0       if(exists($self->{'daemon'}->{'update-list'}) && defined($self->{'daemon'}->{'update-list'}))
188             {
189 0           print STDERR "ok\n";
190             }
191             else
192             {
193 0           print STDERR "no\n";
194 0           $fatal++;
195             }
196 0           print STDERR "\t\tchecking for options '<build-on-start>'...";
197 0 0 0       if(exists($self->{'daemon'}->{'update-list'}->{'build-on-start'}) && defined($self->{'daemon'}->{'update-list'}->{'build-on-start'}))
198             {
199 0           print STDERR "ok\n";
200             }
201             else
202             {
203 0           print STDERR "no\n";
204 0           $fatal++;
205             }
206 0           print STDERR "\t\tchecking for options '<build-each>'...";
207 0 0 0       if(exists($self->{'daemon'}->{'update-list'}->{'build-each'}) && defined($self->{'daemon'}->{'update-list'}->{'build-each'}))
208             {
209 0           print STDERR "ok\n";
210             }
211             else
212             {
213 0           print STDERR "no\n";
214 0           $fatal++;
215             }
216 0           print STDERR "\tchecking for options '<mode>'...";
217 0 0 0       if(exists($self->{'daemon'}->{'mode'}) && defined($self->{'daemon'}->{'mode'}))
218             {
219 0           print STDERR "ok\n";
220             }
221             else
222             {
223 0           print STDERR "no\n";
224 0           $fatal++;
225             }
226 0           print STDERR "\tchecking for options '<listenning-port>'...";
227 0 0 0       if(exists($self->{'daemon'}->{'listenning-port'}) && defined($self->{'daemon'}->{'listenning-port'}))
228             {
229 0           print STDERR "ok\n";
230             }
231             else
232             {
233 0           print STDERR "no\n";
234 0           $fatal++;
235             }
236 0           print STDERR "\tchecking for options '<listenning-adress>'...";
237 0 0 0       if(exists($self->{'daemon'}->{'listenning-adress'}) && defined($self->{'daemon'}->{'listenning-adress'}))
238             {
239 0           print STDERR "ok\n";
240             }
241             else
242             {
243 0           print STDERR "no\n";
244 0           $fatal++;
245             }
246 0           print STDERR "\tchecking for options '<connection-policy>'...";
247 0 0 0       if(exists($self->{'daemon'}->{'connection-policy'}) && defined($self->{'daemon'}->{'connection-policy'}))
248             {
249 0           print STDERR "ok\n";
250             }
251             else
252             {
253 0           print STDERR "no\n";
254 0           $fatal++;
255             }
256 0           print STDERR "\t\tchecking for options '<all>'...";
257 0 0 0       if(exists($self->{'daemon'}->{'connection-policy'}->{'all'}) && defined($self->{'daemon'}->{'connection-policy'}->{'all'}))
258             {
259 0           print STDERR "ok\n";
260             }
261             else
262             {
263 0           print STDERR "no\n";
264 0           $fatal++;
265             }
266 0           print STDERR "\t\tchecking for options '<host>'...";
267 0 0 0       if(exists($self->{'daemon'}->{'connection-policy'}->{'host'}) && defined($self->{'daemon'}->{'connection-policy'}->{'host'}))
268             {
269 0           print STDERR "ok\n";
270             }
271             else
272             {
273 0           print STDERR "no\n";
274 0 0 0       if(defined($self->{'daemon'}->{'connection-policy'}->{'all'}) && defined($self->{'daemon'}->{'connection-policy'}->{'all'}->{'allow-connection'}) && $self->{'daemon'}->{'connection-policy'}->{'all'}->{'allow-connection'}=~ /no/i)
      0        
275             {
276 0           print STDERR "** WARNING ** You don't have <host> section in your configuration file and the <all> section forbid connection ! Nobody can connect to your daemon !!!\n";
277             }
278             }
279            
280             # print STDERR "checking for options ''...";
281             # if(exists($self->{''}) && defined($self->{''}))
282             # {
283             # print STDERR "ok\n";
284             # }
285             # else
286             # {
287             # print STDERR "no\n";
288             # $fatal++;
289             # }
290             # print STDERR "checking for options ''...";
291             # if(exists($self->{''}) && defined($self->{''}))
292             # {
293             # print STDERR "ok\n";
294             # }
295             # else
296             # {
297             # print STDERR "no\n";
298             # $fatal++;
299             # }
300             # print STDERR "\tchecking for options '<>'...";
301             # if(exists($self->{'common'}->{''}) && defined($self->{'common'}->{''}))
302             # {
303             # print STDERR "ok\n";
304             # }
305             # else
306             # {
307             # print STDERR "no\n";
308             # $fatal++;
309             # }
310             # print STDERR "\tchecking for options '<>'...";
311             # if(exists($self->{'common'}->{''}) && defined($self->{'common'}->{''}))
312             # {
313             # print STDERR "ok\n";
314             # }
315             # else
316             # {
317             # print STDERR "no\n";
318             # $fatal++;
319             # }
320            
321 0 0         if($fatal)
322             {
323 0           print STDERR "\n\nSTATUS : the configuration file have $fatal fatal problems\n";
324             }
325             else
326             {
327 0           print STDERR "\n\nSTATUS : the configuration file seems to be good (at least there is no fatal errors...)\n";
328             }
329 0           return $fatal;
330             }
331              
332             =head1 AUTHOR
333              
334             DUPUIS Arnaud, C<< <a.dupuis@infinityperl.org> >>
335              
336             =head1 BUGS
337              
338             Please report any bugs or feature requests to
339             C<bug-Slackware-Slackget@rt.cpan.org>, or through the web interface at
340             L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Slackware-Slackget>.
341             I will be notified, and then you'll automatically be notified of progress on
342             your bug as I make changes.
343              
344             =head1 SUPPORT
345              
346             You can find documentation for this module with the perldoc command.
347              
348             perldoc Slackware::Slackget
349              
350              
351             You can also look for information at:
352              
353             =over 4
354              
355             =item * Infinity Perl website
356              
357             L<http://www.infinityperl.org/category/slack-get>
358              
359             =item * slack-get specific website
360              
361             L<http://slackget.infinityperl.org>
362              
363             =item * RT: CPAN's request tracker
364              
365             L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Slackware-Slackget>
366              
367             =item * AnnoCPAN: Annotated CPAN documentation
368              
369             L<http://annocpan.org/dist/Slackware-Slackget>
370              
371             =item * CPAN Ratings
372              
373             L<http://cpanratings.perl.org/d/Slackware-Slackget>
374              
375             =item * Search CPAN
376              
377             L<http://search.cpan.org/dist/Slackware-Slackget>
378              
379             =back
380              
381             =head1 ACKNOWLEDGEMENTS
382              
383             Thanks to Bertrand Dupuis (yes my brother) for his contribution to the documentation.
384              
385             =head1 SEE ALSO
386              
387             =head1 COPYRIGHT & LICENSE
388              
389             Copyright 2005 DUPUIS Arnaud, All Rights Reserved.
390              
391             This program is free software; you can redistribute it and/or modify it
392             under the same terms as Perl itself.
393              
394             =cut
395              
396             1; # End of Slackware::Slackget::Config