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 @@
+