Merge branch 'master' of mathias-kettner.de:omd
[omd.git] / t / 20-package_nagvis.t
blob9eb3bec5caa9daeed1761c05394ce7b2a66b1000
1 #!/usr/bin/env perl
3 use warnings;
4 use strict;
5 use Test::More;
7 BEGIN {
8 use lib('t');
9 require TestUtils;
10 import TestUtils;
11 use FindBin;
12 use lib "$FindBin::Bin/lib/lib/perl5";
15 my $num_tests = 382;
16 if($ENV{NAGVIS_DEVEL}) {
17 $num_tests += 3;
20 plan(tests => $num_tests);
22 ##################################################
23 # create our test site
24 my $response;
25 my $userId;
26 my $omd_bin = TestUtils::get_omd_bin();
27 my $site = TestUtils::create_test_site() or TestUtils::bail_out_clean("no further testing without site");
28 my $auth = 'OMD Monitoring Site '.$site.':omdadmin:omd';
29 my $orig_auth = $auth;
31 # create test host/service
32 TestUtils::prepare_obj_config('t/data/omd/testconf1', '/omd/sites/'.$site.'/etc/nagios/conf.d', $site);
34 # Developer test: Install NagVis into local hierarchy
35 if($ENV{NAGVIS_DEVEL}) {
36 TestUtils::test_command({ cmd => "/bin/bash -c 'cd /d1/lm/nagvis ; SITE=testsite bash .f12'" });
39 my $version = site_nagvis_version($site);
41 ##################################################
42 # Check installation paths
43 site_thing_exists($site, 'etc/nagvis/maps');
44 site_thing_exists($site, 'etc/nagvis/geomap');
45 site_thing_exists($site, 'etc/nagvis/conf.d');
46 site_thing_exists($site, 'etc/nagvis/conf.d/omd.ini.php');
47 site_thing_exists($site, 'etc/nagvis/conf.d/urls.ini.php');
48 site_thing_exists($site, 'etc/nagvis/conf.d/demo.ini.php');
49 site_thing_exists($site, 'etc/nagvis/nagvis.ini.php');
50 site_thing_exists($site, 'share/nagvis/htdocs');
51 site_thing_exists($site, 'share/nagvis/htdocs');
52 site_thing_exists($site, 'local/share/nagvis/htdocs');
54 ##################################################
55 # Check NAGVIS_URLS switcher
57 # Ensure the site is stopped, but don't care about the exit code here!
58 TestUtils::test_command({ cmd => $omd_bin." stop $site", exit => -1 });
60 TestUtils::test_command({ cmd => $omd_bin." config $site set NAGVIS_URLS auto" });
61 TestUtils::test_command({ cmd => $omd_bin." config $site set DEFAULT_GUI welcome" });
62 # Now grep conf.d/urls.ini.php for lines matching
63 # a) hosturl="[htmlcgi]/status.cgi?host=[host_name]"
64 # b) htmlcgi="/nv/nagios/cgi-bin"
65 TestUtils::test_command({ cmd => "/bin/su - $site -c 'cat etc/nagvis/conf.d/urls.ini.php'",
66 like => [ '/hosturl="\[htmlcgi\]\/status.cgi\?host=\[host_name\]"/',
67 '/htmlcgi="\/'.$site.'\/nagios\/cgi-bin"/' ] }),
69 TestUtils::test_command({ cmd => $omd_bin." config $site set DEFAULT_GUI nagios" });
70 TestUtils::test_command({ cmd => "/bin/su - $site -c 'cat etc/nagvis/conf.d/urls.ini.php'",
71 like => [ '/hosturl="\[htmlcgi\]\/status.cgi\?host=\[host_name\]"/',
72 '/htmlcgi="\/'.$site.'\/nagios\/cgi-bin"/' ] }),
74 TestUtils::test_command({ cmd => $omd_bin." config $site set DEFAULT_GUI thruk" });
75 TestUtils::test_command({ cmd => "/bin/su - $site -c 'cat etc/nagvis/conf.d/urls.ini.php'",
76 like => [ '/hosturl="\[htmlcgi\]\/status.cgi\?host=\[host_name\]"/',
77 '/htmlcgi="\/'.$site.'\/thruk\/cgi-bin"/' ] }),
79 TestUtils::test_command({ cmd => $omd_bin." config $site set DEFAULT_GUI check_mk" });
80 TestUtils::test_command({ cmd => "/bin/su - $site -c 'cat etc/nagvis/conf.d/urls.ini.php'",
81 like => [ '/hosturl="\[htmlcgi\]\/view\.py\?view_name=host&site=&host=\[host_name\]"/',
82 '/htmlcgi="\/'.$site.'\/check_mk"/' ] }),
85 ##################################################
86 # Prepare the site for testing...
88 TestUtils::test_command({ cmd => $omd_bin." config $site set DEFAULT_GUI nagvis" });
89 TestUtils::test_command({ cmd => $omd_bin." start $site" });
91 ##################################################
92 # Some checks to ensure the basic functionality
94 my $tests = [
95 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -u /$site/nagvis -e 401'",
96 like => '/HTTP OK:/' },
97 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis -e 301'",
98 like => '/HTTP OK:/' },
99 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/ -e 301'",
100 like => '/HTTP OK:/' },
101 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend/nagvis-js/index.php -e 200'",
102 like => '/HTTP OK:/' },
103 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend -e 301'",
104 like => '/HTTP OK:/' },
105 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend/ -e 301'",
106 like => '/HTTP OK:/' },
107 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend/wui -e 301'",
108 like => '/HTTP OK:/' },
109 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend/wui/ -e 301'",
110 like => '/HTTP OK:/' },
111 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/frontend/wui/index.php -e 301'",
112 like => '/HTTP OK:/' },
113 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/index.php -e 301'",
114 like => '/HTTP OK:/' },
115 { cmd => "/bin/su - $site -c 'lib/nagios/plugins/check_http -t 30 -H localhost -a omdadmin:omd -u /$site/nagvis/config.php -e 301'",
116 like => '/HTTP OK:/' },
119 for my $test (@{$tests}) {
120 TestUtils::test_command($test);
123 ##################################################
124 # User interface URL tests
126 my $urls = [
127 # OMD welcome page in NagVis mode
128 url({ url => "", like => '/<title>NagVis '.$version.'<\/title>/' }),
130 # default pages
131 url({ url => "/nagvis/frontend/nagvis-js/index.php",
132 like => '/<title>NagVis '.$version.'<\/title>/' }),
133 url({ url => "/nagvis/frontend/nagvis-js/index.php?mod=Info&lang=en_US",
134 like => '/NagVis Support Information<\/title>/' }),
135 url({ url => "/nagvis/frontend/nagvis-js/index.php?mod=Map&act=view&show=demo-germany",
136 like => '/, \'demo-germany\'/', 'skip_html_lint' => 1 }),
138 # Old redirects to maps
139 url({ url => "/nagvis/index.php?map=demo-germany",
140 like => '/, \'demo-germany\'/', 'skip_html_lint' => 1 }),
141 url({ url => "/nagvis/config.php?map=demo-germany",
142 like => '/, \'demo-germany\'/', 'skip_html_lint' => 1 }),
143 url({ url => "/nagvis/index.php?rotation=demo",
144 like => '/, \'demo-germany\'/', 'skip_html_lint' => 1 }),
146 # Ajax fetched dialogs
147 # FIXME: only valid when not using trusted auth:
148 #api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=ChangePassword&act=view',
149 # like => [ '/{"code":"/', '/changePasswordForm/' ]}),
150 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=view&lang=en_US',
151 like => [ '/Create User/', '/"code":"/' ]}),
152 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=RoleMgmt&act=view&lang=en_US',
153 like => [ '/Create Role/', '/"code":"/' ]}),
155 # Language switch
156 url({ url => "/nagvis/frontend/nagvis-js/index.php?lang=de_DE",
157 like => '/Sprache w&auml;hlen/'}),
159 # Language switch back
160 url({ url => "/nagvis/frontend/nagvis-js/index.php?lang=en_US",
161 like => '/Choose Language/'}),
163 # Documentations
164 url({ url => "/nagvis/docs/de_DE/index.html",
165 like => '/NagVis (.*) Dokumentation/'}),
166 url({ url => "/nagvis/docs/en_US/index.html",
167 like => '/NagVis (.*) Documentation/'}),
170 # perform tests
171 for my $url ( @{$urls} ) {
172 TestUtils::test_url($url);
175 ##################################################
176 # Environment auth tests
178 # Create user "omduser" in omd site
179 # SLES11 does not have a "htpasswd" binary. Use the available htpasswd2 binary in that case.
180 my $htpasswd = "htpasswd";
181 if(system("which $htpasswd >/dev/null 2>&1") != 0) {
182 $htpasswd = "htpasswd2";
184 TestUtils::test_command({ cmd => "/bin/su - $site -c '$htpasswd -b /omd/sites/$site/etc/htpasswd omduser test 2>/dev/null'"});
186 # Now try to auth with that user (environment auth)
187 $auth = 'OMD Monitoring Site '.$site.':omduser:test';
188 TestUtils::test_url(
189 url({ url => '/nagvis/frontend/nagvis-js/index.php',
190 like => '/Logged in: omduser/'})
192 $auth = $orig_auth;
194 # Fetch user management dialog
195 $response = TestUtils::test_url(
196 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=view',
197 like => '/Create User/' })
200 # Get the id of the user
201 $userId = "";
202 if($response->{'content'} =~ m/<option value=\\\"([0-9]*)\\\">omduser<\\\/option>/g) {
203 $userId = $1;
205 ok($userId ne "", 'User-ID of omduser: '.$userId) or diag('Unable to gather the userid!');
207 # Check roles of the user
208 TestUtils::test_url(
209 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=getUserRoles&userId='.$userId,
210 like => '/^\[{"roleId":"3","name":"Guests"}\]$/'})
213 ##################################################
214 # User management tests
216 # 1. Create a user
217 # http://127.0.0.1/testsite/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=doAdd&_t=1322353697000
218 # password1 123
219 # password2 123
220 # username testuser
221 # submit Create User
222 TestUtils::test_url(
223 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=doAdd',
224 post => { password1 => '123', password2 => '123', username => 'testuser', 'submit' => 'Create User' },
225 like => '/^{"message":"The user has been created/' })
228 # 2. Fetch user management dialog
229 # http://127.0.0.1/testsite/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=view&_t=1322354360000
230 $response = TestUtils::test_url(
231 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=view',
232 like => '/Create User/' })
235 # 3. Get the id of the new user
236 $userId = "";
237 if($response->{'content'} =~ m/<option value=\\\"([0-9]*)\\\">testuser<\\\/option>/g) {
238 $userId = $1;
240 ok($userId ne "", 'User-ID of testuser: '.$userId) or diag('Unable to gather the userid!');
242 # 4. get all roles of the user
243 TestUtils::test_url(
244 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=getUserRoles&userId='.$userId,
245 like => '/^\[\]$/'})
248 # 5. add a role to the user
249 TestUtils::test_url(
250 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=doEdit',
251 post => { submit => "Modify User", userId => $userId, 'rolesSelected[]' => 1},
252 like => '/The roles for this user have been updated/'})
255 # 6. verify user roles
256 TestUtils::test_url(
257 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=getUserRoles&userId='.$userId,
258 like => '/^\[{"roleId":"1","name":"Administrators"}\]$/'})
263 # 8. Now try to delete this user again
264 TestUtils::test_url(
265 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=doDelete',
266 post => { userId => $userId, submit => 'Delete User' },
267 like => [ '/^{"message":"The user has been deleted/' ]})
270 TestUtils::test_url(
271 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=UserMgmt&act=view',
272 like => '/Create User/',
273 unlike => '/<option value=\\\"'.$userId.'\\\">testuser<\\\/option>/'})
276 ##################################################
277 # Logon dialog tests
279 # - Change the LogonModule to LogonDialog in nagvis
280 # - Disable the basic auth for /<site>/nagvis
281 site_write_file($site, 'etc/nagvis/conf.d/auth.ini.php', "[global]\nlogonmodule=\"LogonDialog\"");
282 site_write_file($site, 'etc/apache/conf.d/nagvis-auth.conf', "<Location \"/".$site."/nagvis\">\n"
283 ."Order allow,deny\n"
284 ."Allow from all\n"
285 ."Satisfy any\n"
286 ."</Location>\n");
287 TestUtils::test_command({ cmd => $omd_bin." restart $site apache" });
288 $auth = '';
290 TestUtils::test_url(
291 url({ url => '/nagvis/frontend/nagvis-js/index.php',
292 like => [ '/form name="loginform"/', '/name="_username"/', '/name="_password"/' ]})
295 # perform a random request which sould not be allowed to be requested by non logged in users
296 TestUtils::test_url(
297 url({ url => '/nagvis/server/core/ajax_handler.php?mod=General&act=getHoverTemplate&name[]=default',
298 like => [ '/{"message":"You are not authenticated"/' ]})
301 #diag('Test an invalid login');
302 TestUtils::test_url(
303 url({ url => '/nagvis/frontend/nagvis-js/index.php',
304 post => { _username => 'omdadmin', _password => 'XXX', submit => 'Login' },
305 like => [ '/form name="loginform"/', '/name="_username"/',
306 '/name="_password"/', '/Authentication failed/' ]})
309 #diag('Test logging in using the login dialog');
310 TestUtils::test_url(
311 url({ url => '/nagvis/frontend/nagvis-js/index.php',
312 post => { _username => 'omdadmin', _password => 'omd', submit => 'Login' },
313 like => [ '/<!-- Start header menu -->/', '/Logged in: omdadmin/' ]})
316 #diag('Test logging in using _GET vars');
317 TestUtils::test_url(
318 url({ url => '/nagvis/frontend/nagvis-js/index.php?_username=omdadmin&_password=omd',
319 like => [ '/<!-- Start header menu -->/', '/Logged in: omdadmin/' ]})
322 #diag('Test logging in at ajax API using _GET vars');
323 # Use random page to login by GET vars
324 TestUtils::test_url(
325 url({ url => '/nagvis/server/core/ajax_handler.php?mod=General&act=getHoverTemplate&name[]=default'
326 .'&_username=omdadmin&_password=omd',
327 like => [ '/"name":"default","css_file":/' ]})
330 # Disable dialog auth to use the environment auth for further testing
331 $auth = $orig_auth;
332 site_remove_file($site, 'etc/apache/conf.d/nagvis-auth.conf');
333 site_remove_file($site, 'etc/nagvis/conf.d/auth.ini.php');
334 TestUtils::test_command({ cmd => $omd_bin." restart $site apache" });
336 ##################################################
337 # AJAX API tests
339 # /nagvis/server/core/ajax_handler.php?mod=General&act=getHoverTemplate&name[]=default
340 # [{"name":"default","code":"<...>"}]
341 TestUtils::test_url(
342 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=General&act=getHoverTemplate&name[]=default',
343 like => [ '/"name":"default","css_file":/' ]})
346 # /nagvis/server/core/ajax_handler.php?mod=General&act=getContextTemplate&name[]=default
347 # [{"name":"default","code":"<...>"}]
348 TestUtils::test_url(
349 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=General&act=getContextTemplate&name[]=default',
350 like => [ '/"name":"default","css_file":/' ]})
353 # /nagvis/server/core/ajax_handler.php?mod=Map&act=getMapProperties&show=demo
354 # {"map_name":"demo","alias":"demo","background_image":"\/nagvis\/userfiles\/images\/maps\/nagvis-demo.png","background_color":"transparent","favicon_image":"\/nagvis\/frontend\/nagvis-js\/images\/internal\/favicon.png","page_title":"demo ([SUMMARY_STATE]) :: NagVis 1.5.7","event_background":"0","event_highlight":"1","event_highlight_interval":"500","event_highlight_duration":"10000","event_log":"0","event_log_level":"info","event_log_height":"100","event_log_hidden":1,"event_scroll":"1","event_sound":"1","in_maintenance":"0"}
355 TestUtils::test_url(
356 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=Map&act=getMapProperties&show=demo-germany',
357 like => [ '/"map_name":"demo-germany",/' ]})
360 # /nagvis/server/core/ajax_handler.php?mod=Map&act=getMapObjects&show=demo
361 # FIXME: Add sepecial tests for object states here using the test backend
362 TestUtils::test_url(
363 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Map&act=getMapObjects&show=demo-germany',
364 like => [ '/"alias":"Demo: 0 Overview Germany"/' ]})
367 # /nagvis/server/core/ajax_handler.php?mod=Map&act=getObjectStates&show=demo&ty=state&i[]=2&t[]=host&n1[]=host-down-hard&n2[]=
368 # FIXME: Add sepecial tests for object states here using the test backend
369 # 1. Match the object state
370 # 2. Match the member list
371 TestUtils::test_url(
372 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Map&act=getObjectStates&show=demo-germany&ty=state&i[]=d99295',
373 like => [ '/{"state":/', '/"members":\[{"/' ]})
376 ###############################################################################
377 # OVERVIEW
378 ###############################################################################
379 # /nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewProperties
380 # {"cellsperrow":4,"showautomaps":1,"showmaps":1,"showgeomap":0,"showmapthumbs":0,"showrotations":1,"page_title":"NagVis 1.5.7","favicon_image":"\/nagvis\/frontend\/nagvis-js\/images\/internal\/favicon.png","background_color":"#ffffff","lang_mapIndex":"Map Index","lang_automapIndex":"Automap Index","lang_rotationPools":"Rotation Pools","event_log":0,"event_log_level":"info","event_log_height":100,"event_log_hidden":1}
381 TestUtils::test_url(
382 api_url({ url => '/nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewProperties',
383 like => [ '/"showmaps":1,"showgeomap":0,"showmapthumbs":0,"showrotations":1/', ]})
386 # /nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewMaps
387 TestUtils::test_url(
388 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewMaps',
389 like => [ '/"alias":/', ]})
392 # /nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewRotations
393 TestUtils::test_url(
394 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Overview&act=getOverviewRotations',
395 like => [ '/"name":"demo-germany",/', ]})
398 # /nagvis/server/core/ajax_handler.php?mod=General&act=getObjectStates&ty=state&i[]=automap-0&t[]=automap&n1[]=__automap&n2[]=
399 # http://127.0.0.1/nagvis/server/core/ajax_handler.php?mod=Overview&act=getObjectStates&ty=state&i[]=automap-__automap&_t=1298764833000
400 TestUtils::test_url(
401 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Overview&act=getObjectStates&ty=state&i[]=automap-__automap',
402 like => [ '/"state":"/', ]})
405 TestUtils::test_url(
406 api_url_list({ url => '/nagvis/server/core/ajax_handler.php?mod=Overview&act=getObjectStates&ty=state&i[]=automap-notexisting',
407 like => [ '/"state":"ERROR/', '/Map Error: The path /' ]})
410 ###############################################################################
411 # Test user config
412 ###############################################################################
413 # Language switch
414 TestUtils::test_url(url({ url => "/nagvis/frontend/nagvis-js/index.php?lang=de_DE",
415 like => '/Sprache w&auml;hlen/'}));
417 # Check profile file
418 site_match_file($site, 'var/nagvis/profiles/omdadmin.profile', '/"language":"de_DE"/');
420 ##################################################
421 # cleanup test site
422 TestUtils::remove_test_site($site);
425 ##################################################
426 # HELPER FUNCTIONS
427 # maybe move some of them to the general code one day
429 sub url {
430 my $url = shift;
431 $url->{'url'} = "http://localhost/".$site.$url->{'url'};
432 $url->{'auth'} = $auth;
433 $url->{'unlike'} = [ '/internal server error/' ];
434 $url->{'skip_link_check'} = [ 'lang=' ];
435 return $url;
438 sub api_url {
439 my $url = url(shift);
440 my $obj_match = shift;
441 if(!defined $obj_match) {
442 $obj_match = '/^{.*}$/';
445 $url->{'no_html_lint'} = 1;
447 # Add default AJAX API tests
448 my $def_like = [ $obj_match ];
449 if(defined $url->{'like'}) {
450 if(ref $url->{'like'} ne 'ARRAY') {
451 $url->{'like'} = [ $url->{'like'} ];
453 push(@{$url->{'like'}}, @{$def_like});
454 } else {
455 $url->{'like'} = $def_like;
457 return $url;
460 sub api_url_list {
461 return api_url(shift, '/^\[.*\]$/')
464 sub get_maincfg_files {
465 my $site = shift;
466 my @files = ();
468 # Get all nagvis config files
469 opendir(my($dh), '/omd/sites/'.$site.'/etc/nagvis/conf.d') or die("Couldn't open dir conf.d dir: $!");
470 while(my $file = readdir($dh)) {
471 if($file =~ m/.*\.ini\.php/g) {
472 push(@files, 'conf.d/' . $file);
475 closedir($dh);
476 push(@files, 'nagvis.ini.php');
477 return @files;
480 sub site_nagvis_maincfg_mtime {
481 my $site = shift;
482 my $newest = 0;
483 my $age;
485 for my $file (get_maincfg_files($site)) {
486 $age = site_mtime($site, 'etc/nagvis/' . $file);
487 $newest = ($age > $newest ? $age : $newest);
489 return $newest;
492 sub site_remove_file {
493 unlink '/omd/sites/'.shift(@_).'/'.shift(@_);
496 sub site_write_file {
497 my $path = '/omd/sites/'.shift(@_).'/'.shift(@_);
498 open(FILE, '>'.$path) or fail("Could not open file ".$path.".");
499 print FILE shift(@_);
500 close(FILE);
503 =head2 site_touch
505 Touches a given site file to modify the last access and modification
506 time of a given file. The path is given relative to the sites base dir.
507 The functions returns the touch time as unix timestamp.
509 =cut
510 sub site_touch {
511 my $site = shift;
512 my $path = shift;
513 my $now = time;
514 utime $now, $now, '/omd/sites/'.$site.'/'.$path;
515 return $now;
518 =head2 site_mtime
520 Returns the mtime for a file in the given site.
521 The path is given as relative path to the sites base directory.
522 The time is returned as unix timestamp.
524 =cut
525 sub site_mtime {
526 my $site = shift;
527 my $path = shift;
528 return (stat '/omd/sites/'.$site.'/'.$path)[9];
531 =head2 site_match_file
533 Checks if the specified pattern can be found in the given file.
534 The path is given as relative path to the sites base directory.
535 This function returns 1 if the pattern could be found or 0 if
536 there was no match in the file.
538 =cut
539 sub site_match_file {
540 my $site = shift;
541 my $fpath = shift;
542 my $pattern = shift;
543 my $path = '/omd/sites/' . $site . '/' . $fpath;
545 #diag('Checking file contents of '.$path);
547 open FILE, '<'.$path or fail("Could not open file.");
548 my $content = do { local $/; <FILE> };
549 close(FILE);
551 like($content, $pattern, "content like ".$pattern) or diag('Contents: '.$content);
554 =head2 site_thing_exists
556 Checks if the specified directory/link/file exists. Fails if
557 the thing does not exist.
559 =cut
560 sub site_thing_exists {
561 my $site = shift;
562 my $fpath = shift;
563 my $path = '/omd/sites/' . $site . '/' . $fpath;
565 #diag('Checking file exists '.$path);
566 #TestUtils::test_command({ cmd => "[ -f '.$path.' ]" });
567 ok(-e $path, 'Checking file exists '.$path) or diag('File does not exist!');
570 =head2 site_nagvis_version
572 Returns version string for the sites NagVis version. It takes the
573 local/ path installations into account.
575 =cut
576 sub site_nagvis_version {
577 my $site = shift;
578 my $version = '';
579 my $path;
580 if(-e '/omd/sites/' . $site . '/local/share/nagvis/htdocs/server/core/defines/global.php') {
581 $path = '/omd/sites/' . $site . '/local/share/nagvis/htdocs/server/core/defines/global.php';
582 } else {
583 $path = '/omd/sites/' . $site . '/share/nagvis/htdocs/server/core/defines/global.php';
585 open FILE, $path or die("Could not open file.");
586 foreach my $line (<FILE>) {
587 if($line =~ m/^define\('CONST_VERSION', '([^']*)'/) {
588 $version = $1;
591 close(FILE);
592 return $version;