. * * @package LibreNMS * @link http://librenms.org * @copyright 2017 Tony Murray * @author Tony Murray */ namespace LibreNMS\Tests; use LibreNMS\Exceptions\FileNotFoundException; use LibreNMS\Exceptions\InvalidModuleException; use LibreNMS\Util\ModuleTestHelper; class OSModulesTest extends DBTestCase { /** * Test all modules for a particular OS * * @group os * @dataProvider dumpedDataProvider * @param string $os base os * @param string $variant optional variant * @param array $modules modules to test for this os */ public function testOS($os, $variant, $modules) { $this->requreSnmpsim(); // require snmpsim for tests global $snmpsim; try { $helper = new ModuleTestHelper($modules, $os, $variant); $helper->setQuiet(); $filename = $helper->getJsonFilepath(true); $expected_data = $helper->getTestData(); $results = $helper->generateTestData($snmpsim, true); } catch (FileNotFoundException $e) { $this->fail($e->getMessage()); return; } catch (InvalidModuleException $e) { $this->fail($e->getMessage()); return; } if (is_null($results)) { $this->fail("$os: Failed to collect data."); } // output all discovery and poller output if debug mode is enabled for phpunit $debug = in_array('--debug', $_SERVER['argv'], true); foreach ($modules as $module) { $expected = $expected_data[$module]['discovery']; $actual = $results[$module]['discovery']; $this->assertEquals( $expected, $actual, "OS $os: Discovered $module data does not match that found in $filename\n" . print_r(array_diff($expected, $actual), true) . $helper->getDiscoveryOutput($debug ? null : $module) . "\nOS $os: Discovered $module data does not match that found in $filename" ); if ($expected_data[$module]['poller'] == 'matches discovery') { $expected = $expected_data[$module]['discovery']; } else { $expected = $expected_data[$module]['poller']; } $actual = $results[$module]['poller']; $this->assertEquals( $expected, $actual, "OS $os: Polled $module data does not match that found in $filename\n" . print_r(array_diff($expected, $actual), true) . $helper->getPollerOutput($debug ? null : $module) . "\nOS $os: Polled $module data does not match that found in $filename" ); } } public function dumpedDataProvider() { $modules = array(); if (getenv('TEST_MODULES')) { $modules = explode(',', getenv('TEST_MODULES')); } return ModuleTestHelper::findOsWithData($modules); } }