Best Phoronix-test-suite code snippet using pts_test_run_manager.subsystems_under_test
pts_test_run_manager.php
Source:pts_test_run_manager.php  
...497	{498		// If the save result identifier is empty, try to come up with something based upon the tests being run.499		$results_identifier = null;500		$subsystem_r = array();501		$subsystems_to_test = $this->subsystems_under_test();502		if(!$this->is_new_result_file)503		{504			$result_file_intent = pts_result_file_analyzer::analyze_result_file_intent($this->result_file);505			if(is_array($result_file_intent) && $result_file_intent[0] != 'Unknown')506			{507				array_unshift($subsystems_to_test, $result_file_intent[0]);508			}509		}510		foreach($subsystems_to_test as $subsystem)511		{512			$components = pts_result_file_analyzer::system_component_string_to_array(phodevi::system_hardware(true) . ', ' . phodevi::system_software(true));513			if($subsystem != null && isset($components[$subsystem]))514			{515				$subsystem_name = trim(pts_strings::trim_search_query($components[$subsystem]));516				if(!empty($subsystem_name) && phodevi::is_vendor_string($subsystem_name) && !in_array($subsystem_name, $subsystem_r))517				{518					$subsystem_r[] = $subsystem_name;519				}520				if(isset($subsystem_r[2]) || isset($subsystem_name[19]))521				{522					break;523				}524			}525		}526		if(isset($subsystem_r[0]))527		{528			$results_identifier = implode(' - ', $subsystem_r);529		}530		if(empty($results_identifier) && !$this->batch_mode)531		{532			$results_identifier = phodevi::read_property('cpu', 'model') . ' - ' . phodevi::read_property('gpu', 'model') . ' - ' . phodevi::read_property('motherboard', 'identifier');533		}534		if(strlen($results_identifier) > 55)535		{536			$results_identifier = substr($results_identifier, 0, 54);537			$results_identifier = substr($results_identifier, 0, strrpos($results_identifier, ' '));538		}539		if(empty($results_identifier))540		{541			$results_identifier = date('Y-m-d H:i', pts_client::current_time());542		}543		$this->results_identifier = $results_identifier;544		$this->benchmark_log->log('RESULTS IDENTIFIER: ' . $results_identifier);545		return $results_identifier;546	}547	public static function clean_results_identifier($results_identifier)548	{549		$results_identifier = trim(pts_client::swap_variables($results_identifier, array('pts_test_run_manager', 'user_run_save_variables')));550		$results_identifier = pts_strings::remove_redundant(pts_strings::keep_in_string($results_identifier, pts_strings::CHAR_LETTER | pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DASH | pts_strings::CHAR_UNDERSCORE | pts_strings::CHAR_COLON | pts_strings::CHAR_COMMA | pts_strings::CHAR_SLASH | pts_strings::CHAR_SPACE | pts_strings::CHAR_DECIMAL | pts_strings::CHAR_AT | pts_strings::CHAR_PLUS | pts_strings::CHAR_SEMICOLON | pts_strings::CHAR_EQUAL), ' ');551		return $results_identifier;552	}553	public function get_test_run_position()554	{555		return ($this->get_test_count() * ($this->loop_run_pos - 1)) + $this->test_run_pos + 1;556	}557	public function get_test_run_count_reported()558	{559		return $this->test_run_count;560	}561	public function call_test_runs()562	{563		// Create a lock564		$lock_path = pts_client::temporary_directory() . '/phoronix-test-suite.active';565		pts_client::create_lock($lock_path);566		if($this->pre_run_message != null)567		{568			pts_client::$display->display_interrupt_message($this->pre_run_message);569		}570		// Hook into the module framework571		self::$test_run_process_active = true;572		pts_module_manager::module_process('__pre_run_process', $this);573		pts_file_io::unlink(PTS_USER_PATH . 'halt-testing');574		pts_file_io::unlink(PTS_USER_PATH . 'skip-test');575		$continue_test_flag = true;576		$tests_to_run_count = $this->get_test_count();577		pts_client::$display->test_run_process_start($this);578		$total_loop_count = (($t = pts_env::read('TOTAL_LOOP_COUNT')) && is_numeric($t) && $t > 0) ? $t : 1;579		$total_loop_time = (($t = pts_env::read('TOTAL_LOOP_TIME')) && is_numeric($t) && $t > 9) ? ($t * 60) : -1;580		$loop_end_time = $total_loop_time != -1 ? (time() + $total_loop_time) : false;581		$this->test_run_count = ($tests_to_run_count * $total_loop_count);582		for($loop = 1; $loop <= $total_loop_count && $continue_test_flag; $loop++)583		{584			$this->loop_run_pos = $loop;585			for($i = 0; $i < $tests_to_run_count && $continue_test_flag; $i++)586			{587				$this->test_run_pos = $i;588				$continue_test_flag = $this->process_test_run_request($i);589				if($continue_test_flag === 'SKIP')590				{591					$continue_test_flag = true;592					continue;593				}594				if($this->remove_tests_on_completion)595				{596					// Remove the installed test if it's no longer needed in this run queue597					$this_test_profile_identifier = $this->get_test_to_run($this->test_run_pos)->test_profile->get_identifier();598					$still_in_queue = false;599					for($j = ($this->test_run_pos + 1); $j < $tests_to_run_count && $still_in_queue == false; $j++)600					{601						if($this->get_test_to_run($j)->test_profile->get_identifier() == $this_test_profile_identifier)602						{603							$still_in_queue = true;604						}605					}606					if($still_in_queue == false)607					{608						pts_tests::remove_installed_test($this->get_test_to_run($this->test_run_pos)->test_profile);609					}610				}611				if($loop_end_time)612				{613					if(time() > $loop_end_time)614					{615						$continue_test_flag = false;616					}617					else if($this->test_run_count == ($i + 1))618					{619						// There's still time remaining so increase the run count....620						$this->test_run_count += $tests_to_run_count;621					}622				}623			}624		}625		pts_file_io::unlink(PTS_SAVE_RESULTS_PATH . $this->get_file_name() . '/active.xml');626		foreach($this->tests_to_run as &$run_request)627		{628			// Remove cache shares629			foreach(pts_file_io::glob($run_request->test_profile->get_install_dir() . 'cache-share-*.pt2so') as $cache_share_file)630			{631				unlink($cache_share_file);632			}633		}634		pts_triggered_system_events::test_requested_queued_reboot_check();635		if($this->post_run_message != null)636		{637			pts_client::$display->display_interrupt_message($this->post_run_message);638		}639		self::$test_run_process_active = -1;640		pts_module_manager::module_process('__post_run_process', $this);641		pts_client::release_lock($lock_path);642		// Report any tests that failed to properly run643		if(pts_client::is_debug_mode() || $this->get_test_count() > 3)644		{645			if(count($this->failed_tests_to_run) > 0)646			{647				echo PHP_EOL . PHP_EOL . 'The following tests failed to properly run:' . PHP_EOL . PHP_EOL;648				foreach($this->failed_tests_to_run as &$run_request)649				{650					echo '    - ' . $run_request->test_profile->get_identifier() . ($run_request->get_arguments_description() != null ? ': ' . $run_request->get_arguments_description() : null) . PHP_EOL;651				}652				echo PHP_EOL;653			}654		}655	}656	public static function test_run_process_active()657	{658		return self::$test_run_process_active = true;659	}660	public function process_test_run_request($run_index)661	{662		$result = false;663		if($this->do_save_results())664		{665			$this->result_file->get_xml(PTS_SAVE_RESULTS_PATH . $this->get_file_name() . '/composite.xml');666		}667		if(is_object($run_index))668		{669			$test_run_request = $run_index;670			$run_index = 0;671		}672		else673		{674			$test_run_request = $this->get_test_to_run($run_index);675		}676		if($test_run_request == false)677		{678			return;679		}680		if($this->result_file->has_matching_test_and_run_identifier($test_run_request, $this->get_results_identifier()) && pts_env::read('TOTAL_LOOP_COUNT') == false && pts_env::read('TOTAL_LOOP_TIME') == false)681		{682			// There already is a match for this test in this particular result buffer683			// except if using one of the loop controls where it may be repeated...684			return true;685		}686		$skip_tests_with_args = ($e = pts_env::read('SKIP_TESTS_HAVING_ARGS')) ? pts_strings::comma_explode($e) : false;687		if($skip_tests_with_args)688		{689			foreach($skip_tests_with_args as $skip_test_if_arg_matches)690			{691				if(stripos($test_run_request->get_arguments_description(), $skip_test_if_arg_matches) !== false)692				{693					return true;694				}695			}696		}697		if(($run_index != 0 && count(pts_file_io::glob($test_run_request->test_profile->get_install_dir() . 'cache-share-*.pt2so')) == 0))698		{699			// Sleep for six seconds between tests by default700			sleep(6);701		}702		$this->benchmark_log->log('Executing Test: ' . $test_run_request->test_profile->get_identifier());703		$test_successful = pts_test_execution::run_test($this, $test_run_request);704		if(pts_file_io::unlink(PTS_USER_PATH . 'halt-testing'))705		{706			// Stop the testing process entirely707			return false;708		}709		else if(pts_file_io::unlink(PTS_USER_PATH . 'skip-test'))710		{711			// Just skip the current test and do not save the results, but continue testing712			return 'SKIP';713		}714		else if(pts_env::read('LIMIT_ELAPSED_TEST_TIME') > 0 && (PTS_INIT_TIME + (pts_env::read('LIMIT_ELAPSED_TEST_TIME') * 60)) > time())715		{716			// Allocated amount of time has expired717			return false;718		}719		if($test_successful == false && $test_run_request->test_profile->get_identifier() != null)720		{721			$this->failed_tests_to_run[] = $test_run_request;722		}723		pts_module_manager::module_process('__post_test_run_process', $this->result_file);724		return true;725	}726	public static function process_json_report_attributes(&$test_run_request, $report_error = null)727	{728		// XXX : add to attributes JSON here729		$json_report_attributes = null;730		if(is_object($test_run_request->test_profile->test_installation))731		{732			if(($t = $test_run_request->test_profile->test_installation->get_compiler_data()))733			{734				$json_report_attributes['compiler-options'] = $t;735			}736			if(($t = $test_run_request->test_profile->test_installation->get_install_footnote()))737			{738				$json_report_attributes['install-footnote'] = $t;739			}740		}741		if(($t = $test_run_request->active->get_min_result()) != 0)742		{743			$json_report_attributes['min-result'] = $t;744		}745		if(($t = $test_run_request->active->get_max_result()) != 0)746		{747			$json_report_attributes['max-result'] = $t;748		}749		if(!empty($test_run_request->test_run_times))750		{751			$json_report_attributes['test-run-times'] = implode(':', $test_run_request->test_run_times);752		}753		if(!empty($report_error))754		{755			$json_report_attributes['error'] = $report_error;756		}757		return $json_report_attributes;758	}759	public static function clean_save_name($input, $is_new_save = true)760	{761		$input = pts_client::swap_variables($input, array('pts_test_run_manager', 'user_run_save_variables'));762		$input = pts_strings::remove_redundant(pts_strings::keep_in_string(str_replace(' ', '-', trim($input)), pts_strings::CHAR_LETTER | pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DASH), '-');763		if($is_new_save)764		{765			$input = strtolower($input);766		}767		if(strlen($input) > 126)768		{769			$input = substr($input, 0, 126);770		}771		return $input;772	}773	public function initial_checks(&$to_run, $override_display_mode = false)774	{775		// Refresh the pts_client::$display in case we need to run in debug mode776		if(pts_client::$display == false || !(pts_client::$display instanceof pts_websocket_display_mode))777		{778			pts_client::init_display_mode($override_display_mode);779		}780		$to_run = pts_types::identifiers_to_objects($to_run);781		if($this->batch_mode && $this->batch_mode['Configured'] == false && !$this->auto_mode)782		{783			trigger_error('The batch mode must first be configured.' . PHP_EOL . 'To configure, run phoronix-test-suite batch-setup', E_USER_ERROR);784			return false;785		}786		if(!is_writable(pts_client::test_install_root_path()))787		{788			trigger_error('The test installation directory is not writable.' . PHP_EOL . 'Location: ' . pts_client::test_install_root_path(), E_USER_ERROR);789			return false;790		}791		$mount_options = phodevi::read_property('disk', 'mount-options');792		if(isset($mount_options['mount-options']) && strpos($mount_options['mount-options'], 'noexec') !== false)793		{794			trigger_error('The test installation directory is on a file-system mounted with the \'noexec\' mount option. Re-mount the file-system appropriately or change the Phoronix Test Suite user configuration file to point to an alternative mount point.' . PHP_EOL . 'Location: ' . pts_client::test_install_root_path(), E_USER_ERROR);795			return false;796		}797		// Cleanup tests to run798		if($this->cleanup_tests_to_run($to_run) == false)799		{800			return false;801		}802		else if(count($to_run) == 0)803		{804			//trigger_error('You must enter at least one test, suite, or result identifier to run.', E_USER_ERROR);805			return false;806		}807		return true;808	}809	public function pre_execution_process()810	{811		if($this->is_new_result_file || $this->result_already_contains_identifier() == false)812		{813			$this->result_file->set_title($this->file_name_title);814			$this->result_file->set_description($this->run_description);815			$this->result_file->set_notes($this->get_notes());816			$this->result_file->set_internal_tags($this->get_internal_tags());817			$this->result_file->set_reference_id($this->get_reference_id());818			$this->result_file->set_preset_environment_variables($this->get_preset_environment_variables());819			// TODO XXX JSON In null and notes820			$json_attr = $this->generate_json_system_attributes();821			$sys = new pts_result_file_system($this->results_identifier, phodevi::system_hardware(true), phodevi::system_software(true), $json_attr, pts_client::current_user(), null, date('Y-m-d H:i:s', pts_client::current_time()), PTS_VERSION, $this->result_file);822			$this->result_file->add_system($sys);823		}824		if($this->do_save_results())825		{826			pts_client::setup_test_result_directory($this->get_file_name());827		}828	}829	protected function generate_json_system_attributes()830	{831		$test_external_dependencies = array();832		$test_hardware_types = array();833		$test_internal_tags = array();834		foreach($this->tests_to_run as &$test_to_run)835		{836			$test_external_dependencies = array_merge($test_external_dependencies, $test_to_run->test_profile->get_external_dependencies());837			$test_internal_tags = array_merge($test_internal_tags, $test_to_run->test_profile->get_internal_tags());838			pts_arrays::unique_push($test_hardware_types, $test_to_run->test_profile->get_test_hardware_type());839		}840		return self::pull_test_notes(false, $test_external_dependencies, $test_internal_tags, $test_hardware_types);841	}842	public static function pull_test_notes($show_all = false, $test_external_dependencies = array(), $test_internal_tags = array(), $test_hardware_types = array())843	{844		$notes = null;845		if($show_all || in_array('build-utilities', $test_external_dependencies))846		{847			// So compiler tests were run....848			$test = false;849			$compiler_mask_dir = pts_test_installer::create_compiler_mask($test);850			if($compiler_mask_dir && is_executable($compiler_mask_dir . 'cc'))851			{852				$compiler_configuration = phodevi_system::sw_compiler_build_configuration($compiler_mask_dir . 'cc');853				pts_file_io::delete($compiler_mask_dir, null, true);854				if(!empty($compiler_configuration))855				{856					$notes['compiler-configuration'] = $compiler_configuration;857				}858			}859		}860		if($show_all || in_array('OpenCL', $test_internal_tags) || in_array('opencl', $test_external_dependencies))861		{862			// So OpenCL tests were run....863			$gpu_compute_cores = phodevi::read_property('gpu', 'compute-cores');864			if($gpu_compute_cores > 0)865			{866				$notes['graphics-compute-cores'] = $gpu_compute_cores;867			}868		}869		if($show_all || in_array('Disk', $test_hardware_types))870		{871			// A disk test was run so report some disk information...872			$disk_scheduler = phodevi::read_property('disk', 'scheduler');873			if($disk_scheduler)874			{875				$notes['disk-scheduler'] = $disk_scheduler;876			}877			$mount_options = phodevi::read_property('disk', 'mount-options');878			if(isset($mount_options['mount-options']) && $mount_options['mount-options'] != null)879			{880				$notes['disk-mount-options'] = $mount_options['mount-options'];881			}882			$extra = phodevi::read_property('disk', 'extra-disk-details');883			if($extra != null)884			{885				$notes['disk-details'] = $extra;886			}887		}888		if(true || $show_all || in_array('Processor', $test_hardware_types) || in_array('System', $test_hardware_types))889		{890			// makes sense always reporting the CPU scaling governor891			$scaling_governor = phodevi::read_property('cpu', 'scaling-governor');892			if($scaling_governor)893			{894				$notes['cpu-scaling-governor'] = $scaling_governor;895			}896			$cpu_microcode = phodevi::read_property('cpu', 'microcode-version');897			if($cpu_microcode)898			{899				$notes['cpu-microcode'] = $cpu_microcode;900			}901			if(phodevi::is_linux() && pts_client::executable_in_path('thermald') && (pts_client::is_process_running('thermald') || phodevi_linux_parser::systemctl_active('thermald')))902			{903				$thermald_version = trim(shell_exec('thermald --version 2>/dev/null'));904				if(!empty($thermald_version) && pts_strings::is_version($thermald_version))905				{906					$notes['cpu-thermald'] = $thermald_version;907				}908			}909			// POWER processors have configurable SMT, 1-8 per core.910			$smt = phodevi::read_property('cpu', 'smt');911			if($smt)912			{913				$notes['cpu-smt'] = $smt;914			}915			$cpu_pm = phodevi::read_property('cpu', 'power-management');916			if($cpu_pm)917			{918				$notes['cpu-pm'] = $cpu_pm;919			}920			$platform_profile = phodevi::read_property('system', 'platform-profile');921			if($platform_profile)922			{923				$notes['platform-profile'] = $platform_profile;924			}925		}926		if($show_all || in_array('Graphics', $test_hardware_types))927		{928			$accel_2d = phodevi::read_property('gpu', '2d-acceleration');929			if($accel_2d)930			{931				$notes['graphics-2d-acceleration'] = $accel_2d;932			}933			$aa = phodevi::read_property('gpu', 'aa-level');934			if($aa)935			{936				$notes['graphics-aa'] = $aa;937			}938			$af = phodevi::read_property('gpu', 'af-level');939			if($af)940			{941				$notes['graphics-af'] = $af;942			}943			$oc_offset = phodevi::read_property('gpu', 'oc-offset-string');944			if(!empty($oc_offset))945			{946				$notes['graphics-oc'] = $oc_offset;947			}948			$bar1_visible_vram_rebar = phodevi::read_property('gpu', 'bar1-visible-vram');949			if(!empty($bar1_visible_vram_rebar))950			{951				$notes['bar1-visible-vram'] = $bar1_visible_vram_rebar;952			}953		}954		if($show_all || phodevi::read_property('system', 'kernel-parameters'))955		{956			$notes['kernel-parameters'] = phodevi::read_property('system', 'kernel-parameters');957		}958		if($show_all || phodevi::read_property('system', 'kernel-extra-details'))959		{960			$notes['kernel-extra-details'] = phodevi::read_property('system', 'kernel-extra-details');961		}962		if($show_all || phodevi::read_property('system', 'environment-variables', false))963		{964			$notes['environment-variables'] = phodevi::read_property('system', 'environment-variables', false);965		}966		if($show_all || in_array('Java', $test_internal_tags) || in_array('java', $test_external_dependencies))967		{968			$notes['java'] = phodevi::read_property('system', 'java-version');969		}970		if($show_all || in_array('Python', $test_internal_tags) || in_array('python', $test_external_dependencies))971		{972			$notes['python'] = phodevi::read_property('system', 'python-version');973		}974		if(in_array('wine', $test_external_dependencies))975		{976			phodevi_system::$report_wine_override = true;977		}978		$notes['security'] = phodevi::read_property('system', 'security-features');979		foreach($notes as $key => $value)980		{981			if(empty($value))982			{983				unset($notes[$key]);984			}985		}986		return $notes;987	}988	public function post_execution_process()989	{990		$this->benchmark_log->log('Test Run Process Ended');991		if($this->do_save_results() && !$this->skip_post_execution_options)992		{993			// Save the results994			echo PHP_EOL;995			pts_module_manager::module_process('__event_results_process', $this);996			pts_client::save_test_result($this->get_file_name() . '/composite.xml', $this->result_file->get_xml(), true, $this->results_identifier);997			pts_module_manager::module_process('__event_results_saved', $this);998			if($this->test_run_success_counter == 0 && $this->is_new_result_file)999			{1000				return false;1001			}1002		}1003		if($this->test_run_success_counter > 3 && pts_config::read_bool_config('PhoronixTestSuite/Options/Testing/ShowPostRunStatistics', 'TRUE'))1004		{1005			// Show any post run statistics1006			pts_module_manager::module_process('__event_post_run_stats', $this);1007			if($this->result_file->get_system_count() == 2)1008			{1009				$highlights = pts_result_file_analyzer::display_results_baseline_two_way_compare($this->result_file, true, false, true, '    ');1010				if($highlights)1011				{1012					echo '    ' . pts_client::cli_just_bold('Result Highlights') . PHP_EOL;1013					echo $highlights . PHP_EOL;1014				}1015			}1016			if($this->result_file->get_system_count() > 2)1017			{1018				// Display winners and losers1019				echo pts_result_file_analyzer::display_results_wins_losses($this->result_file, $this->get_results_identifier(), '    ') . PHP_EOL;1020			}1021			if($this->result_file->get_system_count() > 1)1022			{1023				echo pts_result_file_analyzer::display_result_file_stats_pythagorean_means($this->result_file, $this->get_results_identifier());1024			}1025		}1026		if($this->do_save_results() && !$this->skip_post_execution_options)1027		{1028			// See if the results should be displayed1029			//echo PHP_EOL . 'Results Saved To: ; . PTS_SAVE_RESULTS_PATH . $this->get_file_name() . ;/composite.xml' . PHP_EOL;1030			if(!$this->auto_mode)1031			{1032				if($this->batch_mode)1033				{1034					if($this->batch_mode['OpenBrowser'])1035					{1036						pts_client::display_result_view($this->result_file, true, null);1037					}1038				}1039				else1040				{1041					if(!phodevi::is_display_server_active() && !defined('PHOROMATIC_PROCESS'))1042					{1043						pts_client::display_result_view($this->result_file, false, 'Do you want to view the text results of the testing');1044					}1045					else1046					{1047						pts_client::display_result_view($this->result_file, false, '');1048					}1049				}1050			}1051			if($this->allow_sharing_of_results && pts_network::internet_support_available() && pts_openbenchmarking::ob_upload_support_available())1052			{1053				if($this->auto_upload_to_openbenchmarking || pts_openbenchmarking_client::auto_upload_results() || pts_config::read_bool_config('PhoronixTestSuite/Options/Testing/AlwaysUploadResultsToOpenBenchmarking', 'FALSE'))1054				{1055					$upload_results = true;1056				}1057				else if($this->batch_mode)1058				{1059					$upload_results = $this->batch_mode['UploadResults'];1060				}1061				else if(!$this->auto_mode)1062				{1063					$upload_results = pts_user_io::prompt_bool_input('Would you like to upload the results to OpenBenchmarking.org', -1);1064				}1065				else1066				{1067					$upload_results = false;1068				}1069				if($upload_results)1070				{1071					$this->openbenchmarking_results_data = pts_openbenchmarking::upload_test_result($this, true, (!$this->auto_mode && !$this->batch_mode));1072					if($this->get_results_url())1073					{1074						if(!$this->auto_mode && !$this->batch_mode && pts_openbenchmarking_client::auto_upload_results() == false)1075						{1076							pts_client::display_web_page($this->get_results_url(), 'Do you want to launch OpenBenchmarking.org', true);1077						}1078					}1079					else1080					{1081						echo PHP_EOL . 'Results Failed To Upload.' . PHP_EOL;1082					}1083				}1084			}1085		}1086	}1087	public function get_results_url()1088	{1089		return isset($this->openbenchmarking_results_data['url']) ? $this->openbenchmarking_results_data['url'] : false;1090	}1091	public function set_batch_mode($custom_preset = false)1092	{1093		$this->batch_mode = array(1094			'UploadResults' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/UploadResults', 'TRUE'),1095			'SaveResults' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/SaveResults', 'TRUE'),1096			'PromptForTestDescription' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/PromptForTestDescription', 'FALSE'),1097			'RunAllTestCombinations' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/RunAllTestCombinations', 'TRUE'),1098			'PromptSaveName' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/PromptSaveName', 'FALSE'),1099			'PromptForTestIdentifier' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/PromptForTestIdentifier', 'TRUE'),1100			'Configured' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/Configured', 'FALSE'),1101			'OpenBrowser' => pts_config::read_bool_config('PhoronixTestSuite/Options/BatchMode/OpenBrowser', 'FALSE'),1102			);1103		if($custom_preset && is_array($custom_preset))1104		{1105			foreach($custom_preset as $key => $value)1106			{1107				$this->batch_mode[$key] = $value;1108			}1109			$this->batch_mode['Configured'] = true;1110		}1111	}1112	public function cleanup_test_profile_valid(&$test_profile, &$tests_missing, $check_for_new_on_fail = true)1113	{1114		if($test_profile->get_title() == null)1115		{1116			pts_client::$display->generic_sub_heading('Not A Test: ' . $test_profile);1117			return false;1118		}1119		else1120		{1121			if($test_profile->is_supported(false) == false)1122			{1123				return false;1124			}1125			if(!$test_profile->test_installation || $test_profile->test_installation->is_installed() == false)1126			{1127				// If the desired test version is not installed, see if a newer version in that release stream (minor version difference) is installed1128				if($check_for_new_on_fail)1129				{1130					$tp = pts_openbenchmarking_client::test_profile_newer_minor_version_available($test_profile);1131					if($tp && $this->cleanup_test_profile_valid($tp, $tests_missing, false))1132					{1133						return $tp;1134					}1135				}1136				if($test_profile->get_identifier(false) != null)1137				{1138					$tests_missing[] = $test_profile;1139				}1140				return false;1141			}1142		}1143		return $test_profile;1144	}1145	public function cleanup_tests_to_run(&$to_run_objects)1146	{1147		$skip_tests = ($e = pts_env::read('SKIP_TESTS')) ? pts_strings::comma_explode($e) : false;1148		$tests_verified = array();1149		$tests_missing = array();1150		foreach($to_run_objects as &$run_object)1151		{1152			if($skip_tests && (in_array($run_object->get_identifier(false), $skip_tests) || ($run_object instanceof pts_test_profile && in_array($run_object->get_identifier_base_name(), $skip_tests))))1153			{1154				pts_client::$display->generic_sub_heading('Skipping: ' . $run_object->get_identifier());1155				continue;1156			}1157			else if($run_object instanceof pts_test_profile)1158			{1159				$valid = $this->cleanup_test_profile_valid($run_object, $tests_missing);1160				if($valid == false)1161				{1162					continue;1163				}1164				// Set $valid to $run_object in case it's a newer version of the test profile that was upgraded1165				$run_object = $valid;1166			}1167			else if($run_object instanceof pts_result_file)1168			{1169				$num_installed = 0;1170				foreach($run_object->get_contained_test_profiles() as $test_profile)1171				{1172					$valid = $this->cleanup_test_profile_valid($test_profile, $tests_missing);1173					if($valid == false)1174					{1175						continue;1176					}1177					$num_installed++;1178				}1179				if($num_installed == 0)1180				{1181					continue;1182				}1183			}1184			else if($run_object instanceof pts_test_suite)1185			{1186				if($run_object->is_core_version_supported() == false)1187				{1188					pts_client::$display->generic_sub_heading($run_object->get_title() . ' is a suite not supported by this version of the Phoronix Test Suite.');1189					continue;1190				}1191				$num_installed = 0;1192				foreach($run_object->get_contained_test_profiles() as $test_profile)1193				{1194					$valid = $this->cleanup_test_profile_valid($test_profile, $tests_missing);1195					if($valid == false)1196					{1197						continue;1198					}1199					$num_installed++;1200				}1201				if($num_installed == 0)1202				{1203					continue;1204				}1205			}1206			else1207			{1208				pts_client::$display->generic_sub_heading('Not Recognized: ' . $run_object);1209				continue;1210			}1211			$tests_verified[] = $run_object;1212		}1213		$to_run_objects = $tests_verified;1214		if(count($tests_missing) > 0 && !defined('PHOROMATIC_PROCESS'))1215		{1216			$tests_missing = array_unique($tests_missing);1217			if(count($tests_missing) == 1)1218			{1219				trigger_error($tests_missing[0] . ' is not installed.', E_USER_ERROR);1220				// PHP_EOL . 'To install, run: phoronix-test-suite install ' . $tests_missing[0]1221			}1222			else1223			{1224				$message = PHP_EOL . PHP_EOL . 'Multiple tests are not installed:' . PHP_EOL . PHP_EOL;1225				$message .= pts_user_io::display_text_list($tests_missing);1226				//$message .= PHP_EOL . 'To install, run: phoronix-test-suite install ' . implode(' ', $tests_missing) . PHP_EOL . PHP_EOL;1227				echo $message;1228			}1229			if(!$this->batch_mode && !$this->auto_mode && pts_client::current_command() != 'benchmark')1230			{1231				$stop_and_install = pts_user_io::prompt_bool_input('Would you like to stop and install these tests now', true);1232				if($stop_and_install)1233				{1234					pts_test_installer::standard_install($tests_missing);1235					$to_run_objects = array_merge($to_run_objects, $tests_missing);1236					$this->cleanup_tests_to_run($to_run_objects);1237				}1238			}1239		}1240		return true;1241	}1242	public function auto_save_results($save_name, $result_identifier, $description = null, $is_new_save = false)1243	{1244		$this->set_save_name($save_name, $is_new_save);1245		$this->set_results_identifier($result_identifier);1246		$this->set_description($description);1247	}1248	public function set_description($description)1249	{1250		$this->run_description = $description == null ? self::auto_generate_description() : $description;1251	}1252	public function subsystems_under_test()1253	{1254		$subsystems_to_test = array();1255		foreach($this->tests_to_run as &$test_run_request)1256		{1257			pts_arrays::unique_push($subsystems_to_test, $test_run_request->test_profile->get_test_hardware_type());1258		}1259		return $subsystems_to_test;1260	}1261	protected function auto_generate_description()1262	{1263		$hw_components = array(pts_result_file_analyzer::system_component_string_to_array(phodevi::system_hardware(true)));1264		$sw_components = array(pts_result_file_analyzer::system_component_string_to_array(phodevi::system_software(true)));1265		if($this->is_new_result_file)1266		{1267			$existing_identifiers = array();1268			$hw_components = array();1269			$sw_components = array();1270			foreach($this->result_file->get_systems() as $s)1271			{1272				$hw_components[] = pts_result_file_analyzer::system_component_string_to_array($s->get_hardware());1273				$sw_components[] = pts_result_file_analyzer::system_component_string_to_array($s->get_software());1274				$existing_identifiers[] = $s->get_identifier();1275			}1276			$existing_identifier_count = count($existing_identifiers);1277		}1278		else1279		{1280			$existing_identifier_count = 0;1281		}1282		$auto_description = 'Running ' . implode(', ', array_unique($this->get_tests_to_run_identifiers()));1283		$subsystems_to_test = $this->subsystems_under_test();1284		// TODO: hook into $hw_components and $sw_components for leveraging existing result file data for comparisons already in existent1285		// dropped: count($subsystems_to_test) == 1 && $1286		if($existing_identifier_count == 0)1287		{1288			switch($subsystems_to_test)1289			{1290				case 'Graphics':1291					$auto_description = phodevi::read_property('gpu', 'model') . ' graphics testing with ' . phodevi::read_property('system', 'display-driver-string') . ' / ' . phodevi::read_property('system', 'opengl-driver');1292					break;1293				case 'Disk':1294					$auto_description = phodevi::read_name('disk') . ' testing on ' . phodevi::read_property('system', 'operating-system') . ' with a ' . phodevi::read_property('system', 'filesystem') . ' file-system';1295					break;1296				case 'Memory':1297				case 'Processor':...subsystems_under_test
Using AI Code Generation
1require_once('pts_test_run_manager.php');2$test_run_manager = new pts_test_run_manager();3$test_run_manager->subsystems_under_test();4require_once('pts_test_run_manager.php');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->test_profile();7require_once('pts_test_run_manager.php');8$test_run_manager = new pts_test_run_manager();9$test_run_manager->test_profile_name();10require_once('pts_test_run_manager.php');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->test_profile_identifier();13require_once('pts_test_run_manager.php');14$test_run_manager = new pts_test_run_manager();15$test_run_manager->test_profile_version();16require_once('pts_test_run_manager.php');17$test_run_manager = new pts_test_run_manager();18$test_run_manager->test_profile_description();19require_once('pts_test_run_manager.php');20$test_run_manager = new pts_test_run_manager();21$test_run_manager->test_profile_help();22require_once('pts_test_run_manager.php');23$test_run_manager = new pts_test_run_manager();24$test_run_manager->test_profile_license();25require_once('pts_test_run_manager.php');26$test_run_manager = new pts_test_run_manager();27$test_run_manager->test_profile_attributes();28require_once('pts_test_run_manager.php');29$test_run_manager = new pts_test_run_manager();30$test_run_manager->test_profile_supported_platforms();subsystems_under_test
Using AI Code Generation
1require_once('../pts-core.php');2$test_run_manager = new pts_test_run_manager();3$test_run_manager->subsystems_under_test('test_run_manager');4require_once('../pts-core.php');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->subsystems_under_test('test_run_manager');7require_once('../pts-core.php');8$test_run_manager = new pts_test_run_manager();9$test_run_manager->subsystems_under_test('test_run_manager');10require_once('../pts-core.php');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->subsystems_under_test('test_run_manager');13require_once('../pts-core.php');14$test_run_manager = new pts_test_run_manager();15$test_run_manager->subsystems_under_test('test_run_manager');16require_once('../pts-core.php');17$test_run_manager = new pts_test_run_manager();18$test_run_manager->subsystems_under_test('test_run_manager');19require_once('../pts-core.php');20$test_run_manager = new pts_test_run_manager();21$test_run_manager->subsystems_under_test('test_run_manager');22require_once('../pts-core.php');23$test_run_manager = new pts_test_run_manager();24$test_run_manager->subsystems_under_test('test_run_manager');25require_once('../pts-core.php');26$test_run_manager = new pts_test_run_manager();subsystems_under_test
Using AI Code Generation
1require_once('pts_test_run_manager.php');2$test_profile = new pts_test_profile('test_profile.xml');3$test_run_manager = new pts_test_run_manager();4$test_run_manager->set_test_profile($test_profile);5$subsystems_under_test = $test_run_manager->subsystems_under_test();6print_r($subsystems_under_test);Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Execute automation tests with subsystems_under_test on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.
Test now for FreeGet 100 minutes of automation test minutes FREE!!
