2016-08-22 10:32:05 -05:00
< ? php
/**
* bootstrap . php
*
* Initialize the Autoloader and includes for phpunit to be able to run tests
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*
* @ package LibreNMS
* @ link http :// librenms . org
* @ copyright 2016 Tony Murray
* @ author Tony Murray < murraytony @ gmail . com >
*/
2017-04-07 09:07:44 -05:00
global $config ;
2016-08-22 10:32:05 -05:00
$install_dir = realpath ( __DIR__ . '/..' );
2017-02-07 15:08:52 +00:00
$init_modules = array ( 'web' );
2016-09-19 21:12:26 -05:00
2017-02-07 15:08:52 +00:00
if ( ! getenv ( 'SNMPSIM' )) {
$init_modules [] = 'mocksnmp' ;
}
2016-08-22 10:32:05 -05:00
2017-02-07 15:08:52 +00:00
if ( getenv ( 'DBTEST' )) {
if ( ! is_file ( $install_dir . '/config.php' )) {
exec ( " cp $install_dir /tests/config/config.test.php $install_dir /config.php " );
}
2017-04-13 05:05:14 -05:00
} else {
$init_modules [] = 'nodb' ;
2017-02-07 15:08:52 +00:00
}
2016-08-22 17:59:59 -05:00
2017-02-07 15:08:52 +00:00
require $install_dir . '/includes/init.php' ;
chdir ( $install_dir );
2016-11-21 14:12:59 -06:00
2016-09-23 15:44:17 -05:00
ini_set ( 'display_errors' , 1 );
error_reporting ( E_ALL & ~ E_WARNING );
2017-04-07 09:07:44 -05:00
2017-05-03 09:52:53 -05:00
load_all_os (); // pre-load OS so we don't keep loading them
2017-04-07 09:07:44 -05:00
if ( getenv ( 'DBTEST' )) {
2017-04-26 07:56:00 -05:00
global $schema , $sql_mode ;
2017-04-07 09:07:44 -05:00
2017-04-26 07:56:00 -05:00
$sql_mode = dbFetchCell ( " SELECT @@global.sql_mode " );
2017-04-07 09:07:44 -05:00
$empty_db = ( dbFetchCell ( " SELECT count(*) FROM `information_schema`.`tables` WHERE `table_type` = 'BASE TABLE' AND `table_schema` = ? " , array ( $config [ 'db_name' ])) == 0 );
2017-04-26 07:56:00 -05:00
dbQuery ( " SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' " );
2017-04-07 09:07:44 -05:00
if ( $empty_db ) {
$cmd = $config [ 'install_dir' ] . '/build-base.php' ;
} else {
$cmd = '/usr/bin/env php ' . $config [ 'install_dir' ] . '/includes/sql-schema/update.php' ;
}
exec ( $cmd , $schema );
2017-04-26 07:56:00 -05:00
register_shutdown_function ( function () use ( $empty_db , $sql_mode ) {
global $config ;
dbConnect ();
// restore sql_mode
dbQuery ( " SET GLOBAL sql_mode=' $sql_mode ' " );
if ( $empty_db ) {
dbQuery ( " DROP DATABASE " . $config [ 'db_name' ]);
} elseif ( isset ( $config [ 'test_db_name' ]) && $config [ 'db_name' ] == $config [ 'test_db_name' ]) {
// truncate tables
$tables = dbFetchColumn ( 'SHOW TABLES' );
$excluded = array (
'alert_templates' ,
'config' , // not sure about this one
'dbSchema' ,
'graph_types' ,
'port_association_mode' ,
'widgets' ,
);
$truncate = array_diff ( $tables , $excluded );
dbQuery ( " SET FOREIGN_KEY_CHECKS = 0 " );
foreach ( $truncate as $table ) {
dbQuery ( " TRUNCATE TABLE $table " );
}
dbQuery ( " SET FOREIGN_KEY_CHECKS = 1 " );
}
});
2017-04-07 09:07:44 -05:00
}