diff --git a/.travis.yml b/.travis.yml index fc93899123..0fcd969508 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,6 @@ after_failure: script: - php scripts/pre-commit.php -l - php scripts/pre-commit.php -s - - SNMPSIM=1 phpunit --stop-on-failure + - SNMPSIM=1 DBTEST=1 phpunit --stop-on-failure - bash -n daily.sh - pylint -E poller-wrapper.py discovery-wrapper.py poller-service.py diff --git a/build-base.php b/build-base.php index 02b6d85c99..191eda8df2 100755 --- a/build-base.php +++ b/build-base.php @@ -3,6 +3,7 @@ // MYSQL Check - FIXME // 1 UNKNOWN +$config['db_port'] = null; include 'config.php'; if (!isset($sql_file)) { diff --git a/includes/build-base.inc.php b/includes/build-base.inc.php new file mode 100644 index 0000000000..991a95920e --- /dev/null +++ b/includes/build-base.inc.php @@ -0,0 +1,51 @@ + 45) { + $_SESSION['offset'] = $limit; + $GLOBALS['refresh'] = 'Installing, please wait..'.date('r').''; + return; + } else { + echo 'Step #'.$limit.' ...'.PHP_EOL; + } + } + + if (!empty($line)) { + $creation = mysqli_query($database_link, $line); + if (!$creation) { + echo 'WARNING: Cannot execute query ('.$line.'): '.mysqli_error($database_link)."\n"; + } + } +} + +fclose($sql_fh); + +require 'includes/sql-schema/update.php'; diff --git a/includes/init.php b/includes/init.php index 036dcb1c07..b15ba0d5e4 100644 --- a/includes/init.php +++ b/includes/init.php @@ -31,9 +31,10 @@ $install_dir = realpath(__DIR__ . '/..'); $config['install_dir'] = $install_dir; chdir($install_dir); -// Libraries -require('Net/IPv4.php'); -require('Net/IPv6.php'); +if (!getenv('TRAVIS')) { + require('Net/IPv4.php'); + require('Net/IPv6.php'); +} # composer autoload require $install_dir . '/vendor/autoload.php'; @@ -49,7 +50,11 @@ require $install_dir . '/includes/influxdb.inc.php'; require $install_dir . '/includes/datastore.inc.php'; require $install_dir . '/includes/billing.php'; require $install_dir . '/includes/syslog.php'; -require $install_dir . '/includes/snmp.inc.php'; +if (module_selected('mocksnmp', $init_modules)) { + require $install_dir . '/tests/mocks/mock.snmp.inc.php'; +} else { + require $install_dir . '/includes/snmp.inc.php'; +} require $install_dir . '/includes/services.inc.php'; require $install_dir . '/includes/mergecnf.inc.php'; require $install_dir . '/includes/functions.php'; diff --git a/sql-schema/004.sql b/sql-schema/004.sql index f18dcb36e2..725b828af5 100644 --- a/sql-schema/004.sql +++ b/sql-schema/004.sql @@ -1,7 +1,6 @@ CREATE TABLE IF NOT EXISTS `device_graphs` ( `device_id` int(11) NOT NULL, `graph` varchar(32) COLLATE utf8_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; DROP TABLE IF EXISTS `graph_types`; CREATE TABLE IF NOT EXISTS `graph_types` ( `graph_type` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `graph_subtype` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `graph_section` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `graph_descr` varchar(64) COLLATE utf8_unicode_ci NOT NULL, `graph_order` int(11) NOT NULL, KEY `graph_type` (`graph_type`), KEY `graph_subtype` (`graph_subtype`), KEY `graph_section` (`graph_section`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -INSERT INTO `graph_types` (`graph_type`, `graph_subtype`, `graph_section`, `graph_descr`, `graph_order`) VALUES('device', 'bits', 'netstats', 'Total Traffic', 0),('device', 'hr_users', 'system', 'Users Logged In', 0),('device', 'ucd_load', 'system', 'Load Averages', 0),('device', 'ucd_cpu', 'system', 'Detailed Processor Usage', 0),('device', 'ucd_memory', 'system', 'Detailed Memory Usage', 0),('device', 'netstat_tcp', 'netstats', 'TCP Statistics', 0),('device', 'netstat_icmp_info', 'netstats', 'ICMP Informational Statistics', 0),('device', 'netstat_icmp_stat', 'netstats', 'ICMP Statistics', 0),('device', 'netstat_ip', 'netstats', 'IP Statistics', 0),('device', 'netstat_ip_frag', 'netstats', 'IP Fragmentation Statistics', 0),('device', 'netstat_udp', 'netstats', 'UDP Statistics', 0),('device', 'netstat_snmp', 'netstats', 'SNMP Statistics', 0),('device', 'temperatures', 'system', 'Temperatures', 0),('device', 'mempools', 'system', 'Memory Pool Usage', 0),('device', 'processors', 'system', 'Processor Usage', 0),('device', 'storage', 'system', 'Filesystem Usage', 0),('device', 'hr_processes', 'system', 'Running Processes', 0),('device', 'uptime', 'system', 'System Uptime', ''),('device', 'ipsystemstats_ipv4', 'netstats', 'IPv4 Packet Statistics', 0),('device', 'ipsystemstats_ipv6_frag', 'netstats', 'IPv6 Fragmentation Statistics', 0),('device', 'ipsystemstats_ipv6', 'netstats', 'IPv6 Packet Statistics', 0),('device', 'ipsystemstats_ipv4_frag', 'netstats', 'IPv4 Fragmentation Statistics', 0),('device', 'fortigate_sessions', 'firewall', 'Active Sessions', ''), ('device', 'screenos_sessions', 'firewall', 'Active Sessions', ''), ('device', 'fdb_count', 'system', 'MAC Addresses Learnt', '0'),('device', 'cras_sessions', 'firewall', 'Remote Access Sessions', 0); DROP TABLE `frequency`; ALTER TABLE `mempools` CHANGE `mempool_index` `mempool_index` VARCHAR( 16 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; ALTER TABLE `vrfs` CHANGE `mplsVpnVrfRouteDistinguisher` `mplsVpnVrfRouteDistinguisher` varchar(26) NOT NULL; diff --git a/tests/DBSetupTest.php b/tests/DBSetupTest.php new file mode 100644 index 0000000000..ea5c11e2e3 --- /dev/null +++ b/tests/DBSetupTest.php @@ -0,0 +1,74 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Neil Lathwood + * @author Neil Lathwood + */ + +namespace LibreNMS\Tests; + +use PHPUnit_Framework_ExpectationFailedException as PHPUnitException; + +class DBSetupTest extends \PHPUnit_Framework_TestCase +{ + + private static $schema; + private static $sql_mode; + private static $db_created; + protected $backupGlobals = false; + + public static function setUpBeforeClass() + { + if (getenv('DBTEST')) { + global $config; + + self::$sql_mode = dbFetchCell("SELECT @@global.sql_mode as sql_mode"); + self::$db_created = dbQuery("CREATE DATABASE " . $config['db_name']); + dbQuery("SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'"); + $build_base = $config['install_dir'] . '/build-base.php'; + exec($build_base, $schema); + self::$schema = $schema; + } + } + + public static function tearDownAfterClass() + { + if (getenv('DBTEST')) { + global $config; + + dbQuery("SET GLOBAL sql_mode='" . self::$sql_mode . "'"); + if (self::$db_created) { + dbQuery("DROP DATABASE " . $config['db_name']); + } + } + } + + public function testSetupDB() + { + if (getenv('DBTEST')) { + foreach (self::$schema as $output) { + if (preg_match('/([1-9]+) errors/', $output) || preg_match('/Cannot execute query/', $output)) { + throw new PHPUnitException("Errors loading DB Schema: " . $output); + } + } + } + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 8af9b2192c..03e99372df 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -23,35 +23,26 @@ * @author Tony Murray */ -// get the current LibreNMS install directory $install_dir = realpath(__DIR__ . '/..'); -require $install_dir . '/includes/defaults.inc.php'; +$init_modules = array('web'); + +if (!getenv('SNMPSIM')) { + $init_modules[] = 'mocksnmp'; +} + +if (getenv('DBTEST')) { + if (!is_file($install_dir . '/config.php')) { + exec("cp $install_dir/tests/config/config.test.php $install_dir/config.php"); + } +} + +require $install_dir . '/includes/init.php'; +chdir($install_dir); -// definitions, don't want to initialize mysql... $config['install_dir'] = $install_dir; $config['mib_dir'] = $install_dir . '/mibs'; $config['snmpget'] = 'snmpget'; -// initialize the class loader -require $install_dir . '/vendor/autoload.php'; - -require $install_dir . '/includes/common.php'; -require $install_dir . '/html/includes/functions.inc.php'; -require $install_dir . '/includes/definitions.inc.php'; -require $install_dir . '/includes/rrdtool.inc.php'; -require $install_dir . '/includes/syslog.php'; -require $install_dir . '/includes/dbFacile.php'; -require $install_dir . '/includes/functions.php'; - -if (getenv('SNMPSIM')) { - require $install_dir . '/includes/snmp.inc.php'; -} else { - require $install_dir . '/tests/mocks/mock.snmp.inc.php'; -} - ini_set('display_errors', 1); error_reporting(E_ALL & ~E_WARNING); -//error_reporting(E_ALL); -//$debug=true; -//$vdebug=true; diff --git a/tests/config/config.test.php b/tests/config/config.test.php new file mode 100755 index 0000000000..c0fa29ad55 --- /dev/null +++ b/tests/config/config.test.php @@ -0,0 +1,49 @@ +