public static function sw_operating_system() { if (!PTS_IS_CLIENT) { // TODO: Figure out why this function is sometimes called from OpenBenchmarking.org.... return false; } // Determine the operating system release if (phodevi::is_linux()) { $vendor = phodevi_linux_parser::read_lsb_distributor_id(); if ($vendor == null) { if (is_readable('/etc/os-release')) { $os_release = parse_ini_file('/etc/os-release'); } else { if (is_readable('/usr/lib/os-release')) { $os_release = parse_ini_file('/usr/lib/os-release'); } else { $os_release = null; } } if (isset($os_release['PRETTY_NAME']) && !empty($os_release['PRETTY_NAME'])) { $vendor = $os_release['PRETTY_NAME']; } else { if (isset($os_release['NAME']) && !empty($os_release['NAME'])) { $vendor = $os_release['NAME']; } } } } else { if (phodevi::is_hurd()) { $vendor = php_uname('v'); } else { $vendor = null; } } $version = phodevi::read_property('system', 'os-version'); if (!$vendor) { $os = null; // Try to detect distro for those not supplying lsb_release $files = pts_file_io::glob('/etc/*-version'); for ($i = 0; $i < count($files) && $os == null; $i++) { $file = file_get_contents($files[$i]); if (trim($file) != null) { $os = substr($file, 0, strpos($file, "\n")); } } if ($os == null) { $files = pts_file_io::glob('/etc/*-release'); for ($i = 0; $i < count($files) && $os == null; $i++) { $file = file_get_contents($files[$i]); if (trim($file) != null) { $proposed_os = substr($file, 0, strpos($file, PHP_EOL)); if (strpos($proposed_os, '=') == false) { $os = $proposed_os; } } else { if ($i == count($files) - 1) { $os = ucwords(substr($n = basename($files[$i]), 0, strpos($n, '-'))); } } } } if ($os == null && is_file('/etc/release')) { $file = file_get_contents('/etc/release'); $os = substr($file, 0, strpos($file, "\n")); } if ($os == null && is_file('/etc/palm-build-info')) { // Palm / webOS Support $os = phodevi_parser::parse_equal_delimited_file('/etc/palm-build-info', 'PRODUCT_VERSION_STRING'); } if ($os == null) { if (phodevi::is_windows()) { $os = trim(exec('ver')); } if (is_file('/etc/debian_version')) { $os = 'Debian ' . php_uname('s') . ' ' . ucwords(pts_file_io::file_get_contents('/etc/debian_version')); } else { $os = php_uname('s'); } } else { if (strpos($os, ' ') === false) { // The OS string is only one word, likely a problem... if (is_file('/etc/arch-release') && stripos($os, 'Arch') === false) { // On at least some Arch installs (ARM) the file is empty so would have missed above check $os = trim('Arch Linux ' . $os); } } } } else { if (stripos($vendor, $version) === false) { $os = $vendor . ' ' . $version; } else { $os = $vendor; } } if (($break_point = strpos($os, ':')) > 0) { $os = substr($os, $break_point + 1); } if (phodevi::is_macosx()) { $os = phodevi_osx_parser::read_osx_system_profiler('SPSoftwareDataType', 'SystemVersion'); } if (($break_point = strpos($os, '(')) > 0) { $os = substr($os, 0, $break_point); } $os = trim($os); return $os; }
public function is_test_platform_supported() { // Check if the system's OS is supported by a test $supported = true; $platforms = $this->get_supported_platforms(); if (!empty($platforms) && !in_array(phodevi::operating_system(), $platforms)) { if (phodevi::is_bsd() && in_array('Linux', $platforms) && (pts_client::executable_in_path('kldstat') && strpos(shell_exec('kldstat -n linux 2>&1'), 'linux.ko') != false)) { // The OS is BSD but there is Linux API/ABI compatibility support loaded $supported = true; } else { if (phodevi::is_hurd() && in_array('Linux', $platforms) && in_array('BSD', $platforms)) { // For now until test profiles explicity express Hurd support, just list as supported the tests that work on both BSD and Linux // TODO: fill in Hurd support for test profiles / see what works $supported = true; } else { $supported = false; } } } return $supported; }
public static function chipset_string() { $info = false; if (phodevi::is_macosx()) { $sb_vendor = phodevi_osx_parser::read_osx_system_profiler('SPSerialATADataType', 'Vendor'); $sb_product = phodevi_osx_parser::read_osx_system_profiler('SPSerialATADataType', 'Product'); if ($sb_product == 'SSD') { $sb_product = null; } if (($cut_point = strpos($sb_product, ' ')) > 0) { $sb_product = substr($sb_product, 0, $cut_point); } // TODO: Can't find Northbridge $info = $sb_vendor . ' ' . $sb_product; } else { if (phodevi::is_windows()) { $info = phodevi_windows_parser::read_cpuz('Northbridge', null); if ($info != null) { if (($e = strpos($info, 'rev')) !== false) { $info = substr($info, 0, $e); } $info = trim($info); } } else { if (phodevi::is_solaris()) { // Vendor Detection $vendor_possible_udis = array('/org/freedesktop/Hal/devices/pci_0_0/pci_ide_3_2_0', '/org/freedesktop/Hal/devices/pci_0_0/pci_ide_1f_1_1'); $info = phodevi_solaris_parser::read_hal_property($vendor_possible_udis, 'info.vendor'); // TODO: Northbridge and Southbridge Detection For Solaris } else { if (phodevi::is_linux() || phodevi::is_hurd()) { $info = phodevi_linux_parser::read_pci(array('RAM memory', 'Host bridge')); if (count(explode(' ', $info)) == 1) { $bridge = phodevi_linux_parser::read_pci(array('Bridge', 'PCI bridge')); if (!empty($bridge)) { $match = false; $break_words = array('Ethernet', 'PCI', 'High', 'USB'); for ($i = 0; $i < count($break_words) && !$match; $i++) { if (($pos = strpos($bridge, $break_words[$i])) > 0) { $bridge = trim(substr($bridge, 0, $pos)); $info = $bridge; $match = true; } } } } if (!isset($bridge) || !empty($bridge)) { // Attempt to detect Southbridge (if applicable) $southbridge = phodevi_linux_parser::read_pci(array('ISA bridge', 'SATA controller'), false); $southbridge_clean = null; if (($start_cut = strpos($southbridge, '(')) > 0 && ($end_cut = strpos($southbridge, ')', $start_cut + 1)) > 0) { $southbridge_extract = substr($southbridge, $start_cut + 1, $end_cut - $start_cut - 1); if (strpos($southbridge_extract, 'rev') === false) { $southbridge_extract = explode(' ', $southbridge_extract); $southbridge_clean = $southbridge_extract[0]; } else { if (($s = strpos($southbridge, 'ICH')) > 0) { $southbridge_extract = substr($southbridge, $s); $southbridge_clean = substr($southbridge_extract, 0, strpos($southbridge_extract, ' ')); } } } else { if (($start_cut = strpos($southbridge, 'SB')) !== false) { $southbridge_extract = substr($southbridge, $start_cut); $southbridge_clean = substr($southbridge_extract, 0, strpos($southbridge_extract, ' ')); } } if (!empty($southbridge_clean) && $southbridge_clean != 'SB') { $info .= ' + ' . $southbridge_clean; } } } } } } return $info; }