Best Phoronix-test-suite code snippet using pts_test_run_manager.cleanup_test_profile_valid
pts_test_run_manager.php
Source:pts_test_run_manager.php  
...218			{219				// Test is not installed, see if should upgrade to new minor release220				$tp = pts_openbenchmarking_client::test_profile_newer_minor_version_available($test_result->test_profile);221				$tests_missing = array();222				if($tp && $this->cleanup_test_profile_valid($tp, $tests_missing, false))223				{224					pts_client::$display->display_interrupt_message('Using ' . $tp->get_identifier() . ' in place of ' . $test_result->test_profile->get_identifier());225					$current_overrides = $test_result->test_profile->get_override_values();226					$test_result->test_profile = $tp;227					$test_result->test_profile->set_override_values($current_overrides);228				}229			}230			if($this->validate_test_to_run($test_result->test_profile))231			{232				$this->hashes_of_tests_to_run[$hash] = $hash;233				$this->tests_to_run[] = $test_result;234			}235		}236	}237	public function get_tests_to_run()238	{239		return $this->tests_to_run;240	}241	public function get_tests_to_run_identifiers()242	{243		$identifiers = array();244		foreach($this->tests_to_run as &$test_run_request)245		{246			$identifiers[] = $test_run_request->test_profile->get_identifier();247		}248		array_unique($identifiers);249		return $identifiers;250	}251	public function get_estimated_run_time($index = -1)252	{253		if($index == -1)254		{255			$index = $this->last_test_run_index;256		}257		$already_added = array();258		$estimated_time = 0;259		foreach(array_slice($this->tests_to_run, $index) as $test_run_request)260		{261			if($test_run_request->test_profile->has_test_options() == false && in_array($test_run_request->test_profile->get_identifier(), $already_added))262			{263				continue;264			}265			$estimated_time += $test_run_request->get_estimated_run_time();266			$already_added[] = $test_run_request->test_profile->get_identifier();267		}268		return $estimated_time;269	}270	public function get_percent_complete()271	{272		return round($this->last_test_run_index / count($this->tests_to_run) * 100);273	}274	public function get_test_to_run($index)275	{276		$this->last_test_run_index = $index;277		return is_numeric($index) && isset($this->tests_to_run[$index]) ? $this->tests_to_run[$index] : false;278	}279	public function get_test_count()280	{281		return count($this->tests_to_run);282	}283	public function force_results_save()284	{285		$this->force_save_results = true;286	}287	public function do_save_results()288	{289		return $this->file_name != null;290	}291	public function get_file_name()292	{293		return $this->file_name;294	}295	public function get_title()296	{297		return $this->file_name_title;298	}299	public function get_results_identifier()300	{301		return $this->results_identifier;302	}303	public function get_results_identifier_simplified()304	{305		return pts_strings::simplify_string_for_file_handling($this->get_results_identifier());306	}307	public function get_description()308	{309		return $this->run_description;310	}311	public function get_notes()312	{313		return null; // TODO: Not Yet Implemented314	}315	public function get_internal_tags()316	{317		return null;318	}319	public function get_reference_id()320	{321		return null;322	}323	public function get_preset_environment_variables()324	{325		return pts_module_manager::var_store_string();326	}327	public function result_already_contains_identifier()328	{329		$contains = false;330		foreach($this->result_file->get_systems() as $s)331		{332			if($s->get_identifier() == $this->results_identifier)333			{334				$contains = true;335				break;336			}337		}338		return $contains;339	}340	public function set_save_name($save_name, $is_new_save = true)341	{342		if(empty($save_name))343		{344			$save_name = date('Y-m-d-Hi', pts_client::current_time());345		}346		$this->file_name = self::clean_save_name($save_name, $is_new_save);347		$this->file_name_title = $save_name;348		$this->force_save_results = true;349		$this->result_file = new pts_result_file($this->file_name);350		$this->benchmark_log->log('SAVE IDENTIFIER: ' . $this->file_name);351		$this->is_new_result_file = $this->result_file->get_system_count() == 0;352		return $this->file_name;353	}354	public function set_results_identifier($identifier)355	{356		$this->results_identifier = self::clean_results_identifier($identifier);357	}358	public function prompt_save_name()359	{360		if($this->file_name != null)361		{362			return $this->file_name;363		}364		// Prompt to save a file when running a test365		$save_name = null;366		if(($env = pts_env::read('TEST_RESULTS_NAME')))367		{368			$save_name = $env;369			//echo 'Saving Results To: ' . $proposed_name . PHP_EOL;370		}371		if(!$this->batch_mode || $this->batch_mode['PromptSaveName'])372		{373			$is_reserved_word = false;374			// Be of help to the user by showing recently saved test results375			if($save_name == null)376			{377				pts_tests::recently_saved_results('    ');378			}379			$save_name_length = $save_name != null ? strlen($save_name) : 0;380			while(empty($save_name) || ($is_reserved_word = pts_types::is_test_or_suite($save_name)) || $save_name_length > 126)381			{382				if($is_reserved_word)383				{384					echo PHP_EOL . 'The name of the saved file cannot be the same as a test/suite: ' . $save_name . PHP_EOL;385					$is_reserved_word = false;386				}387				if($save_name_length > 126)388				{389					echo PHP_EOL . 'The name of the saved file must have between 2 and 126 characters in length.' . PHP_EOL;390				}391				$prompt = '    Enter a name for the result file: ';392				if(function_exists('readline') && function_exists('readline_completion_function'))393				{394					pts_user_io::$readline_completion_possibilities = pts_tests::test_results_by_date();395					readline_completion_function(array('pts_user_io', 'readline_completion_handler'));396					$save_name = readline($prompt);397				}398				else399				{400					$save_name = pts_user_io::read_user_input($prompt);401				}402			}403		}404		return $this->set_save_name($save_name);405	}406	public function prompt_results_identifier()407	{408		if(!empty($this->results_identifier))409		{410			return $this->results_identifier;411		}412		// Prompt for a results identifier413		$results_identifier = null;414		$show_identifiers = array();415		$no_repeated_tests = true;416		if(!$this->is_new_result_file)417		{418			// Running on an already-saved result419			$current_identifiers = array();420			$current_hardware = array();421			$current_software = array();422			foreach($this->result_file->get_systems() as $s)423			{424				$current_hardware[] = $s->get_hardware();425				$current_software[] = $s->get_software();426				$current_identifiers[] = $s->get_identifier();427			}428			$hashes = array();429			foreach($this->result_file->get_result_objects() as $result)430			{431				$hashes[] = $result->get_comparison_hash(true, false);432			}433			foreach($this->tests_to_run as &$run_request)434			{435				if($run_request instanceof pts_test_result && in_array($run_request->get_comparison_hash(true, false), $hashes))436				{437					$no_repeated_tests = false;438					break;439				}440			}441		}442		else443		{444			// Fresh run445			$current_identifiers = array();446			$current_hardware = array();447			$current_software = array();448		}449		if((!$this->batch_mode || $this->batch_mode['PromptForTestIdentifier']) && !$this->auto_mode)450		{451			if(count($current_identifiers) > 0)452			{453				echo PHP_EOL . pts_client::cli_just_bold('Current Test Identifiers:') . PHP_EOL;454				echo pts_user_io::display_text_list($current_identifiers);455				echo PHP_EOL;456			}457			$times_tried = 0;458			do459			{460				if($times_tried == 0 && ($env_identifier = pts_env::read('TEST_RESULTS_IDENTIFIER')))461				{462					$results_identifier = isset($env_identifier) ? self::clean_results_identifier($env_identifier) : null;463					echo 'Test Identifier: ' . $results_identifier . PHP_EOL;464				}465				else466				{467					$prompt = '    Enter a unique name to describe this test run / configuration: ';468					if(function_exists('readline') && function_exists('readline_completion_function'))469					{470						pts_user_io::$readline_completion_possibilities = array_map(array('pts_strings', 'trim_search_query'), array_merge(phodevi::system_hardware(false), phodevi::system_software(false)));471						readline_completion_function(array('pts_user_io', 'readline_completion_handler'));472						$results_identifier = readline($prompt);473					}474					else475					{476						$results_identifier = pts_user_io::read_user_input($prompt);477					}478					$results_identifier = self::clean_results_identifier($results_identifier);479				}480				$times_tried++;481				$identifier_pos = (($p = array_search($results_identifier, $current_identifiers)) !== false ? $p : -1);482			}483			while((!$no_repeated_tests && $identifier_pos != -1) || (isset($current_hardware[$identifier_pos]) && $current_hardware[$identifier_pos] != phodevi::system_hardware(true)) || (isset($current_software[$identifier_pos]) && $current_software[$identifier_pos] != phodevi::system_software(true)));484		}485		else if(($env_identifier = pts_env::read('TEST_RESULTS_IDENTIFIER')))486		{487			$results_identifier = self::clean_results_identifier($env_identifier);488		}489		if(empty($results_identifier))490		{491			$results_identifier = $this->auto_generate_results_identifier();492		}493		$this->results_identifier = $results_identifier;494		return $this->results_identifier;495	}496	public function auto_generate_results_identifier()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);...cleanup_test_profile_valid
Using AI Code Generation
1require_once('pts-test-run-manager.php');2$test_run_manager = new pts_test_run_manager();3$test_run_manager->cleanup_test_profile_valid('test_profile.xml');4require_once('pts-test-run-manager.php');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile_valid('test_profile.xml');7require_once('pts-test-run-manager.php');8$test_run_manager = new pts_test_run_manager();9$test_run_manager->cleanup_test_profile_valid('test_profile.xml');10require_once('pts-test-run-manager.php');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->cleanup_test_profile_valid('test_profile.xml');13require_once('pts-test-run-manager.php');14$test_run_manager = new pts_test_run_manager();15$test_run_manager->cleanup_test_profile_valid('test_profile.xml');16require_once('pts-test-run-manager.php');17$test_run_manager = new pts_test_run_manager();18$test_run_manager->cleanup_test_profile_valid('test_profile.xml');19require_once('pts-test-run-manager.php');20$test_run_manager = new pts_test_run_manager();21$test_run_manager->cleanup_test_profile_valid('test_profile.xml');22require_once('pts-test-run-manager.php');23$test_run_manager = new pts_test_run_manager();24$test_run_manager->cleanup_test_profile_valid('test_profile.xml');25require_once('pts-test-run-manager.php');26$test_run_manager = new pts_test_run_manager();27$test_run_manager->cleanup_test_profile_valid('test_profile.xml');cleanup_test_profile_valid
Using AI Code Generation
1require_once('pts_test_run_manager.php');2$test_run_manager = new pts_test_run_manager();3$test_run_manager->cleanup_test_profile_valid('test_profile_name', 'test_profile_version');4require_once('pts_test_run_manager.php');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile('test_profile_name', 'test_profile_version');7require_once('pts_test_run_manager.php');8$test_run_manager = new pts_test_run_manager();9$test_run_manager->cleanup_test_profile_valid('test_profile_name', 'test_profile_version');10require_once('pts_test_run_manager.php');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->cleanup_test_profile('test_profile_name', 'test_profile_version');13require_once('pts_test_run_manager.php');14$test_run_manager = new pts_test_run_manager();15$test_run_manager->cleanup_test_profile_valid('test_profile_name', 'test_profile_version');16require_once('pts_test_run_manager.php');17$test_run_manager = new pts_test_run_manager();18$test_run_manager->cleanup_test_profile('test_profile_name', 'test_profile_version');19require_once('pts_test_run_manager.php');20$test_run_manager = new pts_test_run_manager();21$test_run_manager->cleanup_test_profile_valid('test_profile_name', 'test_profile_version');22require_once('pts_test_run_manager.php');23$test_run_manager = new pts_test_run_manager();24$test_run_manager->cleanup_test_profile('test_profile_name', 'test_profile_version');25require_once('pts_test_run_manager.php');cleanup_test_profile_valid
Using AI Code Generation
1$test_run_manager = new pts_test_run_manager();2$test_run_manager->cleanup_test_profile_valid($test_profile, $test_run_manager->get_test_run_request($test_profile, $test_run_manager->get_test_run_arguments($test_profile)));3$test_run_manager = new pts_test_run_manager();4$test_run_manager->cleanup_test_profile_valid($test_profile, $test_run_manager->get_test_run_request($test_profile, $test_run_manager->get_test_run_arguments($test_profile)));5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile_valid($test_profile, $test_run_manager->get_test_run_request($test_profile, $test_run_manager->get_test_run_arguments($test_profile)));7$test_run_manager = new pts_test_run_manager();8$test_run_manager->cleanup_test_profile_valid($test_profile, $test_run_manager->get_test_run_request($test_profile, $test_run_manager->get_test_run_arguments($test_profile)));9$test_run_manager = new pts_test_run_manager();10$test_run_manager->cleanup_test_profile_valid($test_profile, $test_run_manager->get_test_run_request($test_profile, $test_run_manager->get_test_run_arguments($test_profile)));cleanup_test_profile_valid
Using AI Code Generation
1$test_run_manager = new pts_test_run_manager();2$test_run_manager->cleanup_test_profile_valid();3$test_run_manager = new pts_test_run_manager();4$test_run_manager->cleanup_test_profile_valid();5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile_valid();7$test_run_manager = new pts_test_run_manager();8$test_run_manager->cleanup_test_profile_valid();9$test_run_manager = new pts_test_run_manager();10$test_run_manager->cleanup_test_profile_valid();11$test_run_manager = new pts_test_run_manager();12$test_run_manager->cleanup_test_profile_valid();13$test_run_manager = new pts_test_run_manager();14$test_run_manager->cleanup_test_profile_valid();15$test_run_manager = new pts_test_run_manager();16$test_run_manager->cleanup_test_profile_valid();17$test_run_manager = new pts_test_run_manager();18$test_run_manager->cleanup_test_profile_valid();19$test_run_manager = new pts_test_run_manager();cleanup_test_profile_valid
Using AI Code Generation
1$test_run_manager = new pts_test_run_manager();2$test_run_manager->cleanup_test_profile_valid('2.php');3$test_run_manager = new pts_test_run_manager();4$test_run_manager->cleanup_test_profile_valid('3.php');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile_valid('4.php');7$test_run_manager = new pts_test_run_manager();8$test_run_manager->cleanup_test_profile_valid('5.php');9$test_run_manager = new pts_test_run_manager();10$test_run_manager->cleanup_test_profile_valid('6.php');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->cleanup_test_profile_valid('7.php');13$test_run_manager = new pts_test_run_manager();14$test_run_manager->cleanup_test_profile_valid('8.php');15$test_run_manager = new pts_test_run_manager();16$test_run_manager->cleanup_test_profile_valid('9.php');17$test_run_manager = new pts_test_run_manager();18$test_run_manager->cleanup_test_profile_valid('10.php');cleanup_test_profile_valid
Using AI Code Generation
1$test_run_manager = new pts_test_run_manager;2$test_run_manager->cleanup_test_profile_valid($test_profile);3$test_run_manager = new pts_test_run_manager;4$test_run_manager->cleanup_test_profile_valid($test_profile);5$test_run_manager = new pts_test_run_manager;6$test_run_manager->cleanup_test_profile_valid($test_profile);7$test_run_manager = new pts_test_run_manager;8$test_run_manager->cleanup_test_profile_valid($test_profile);9$test_run_manager = new pts_test_run_manager;10$test_run_manager->cleanup_test_profile_valid($test_profile);11$test_run_manager = new pts_test_run_manager;12$test_run_manager->cleanup_test_profile_valid($test_profile);13$test_run_manager = new pts_test_run_manager;14$test_run_manager->cleanup_test_profile_valid($test_profile);15$test_run_manager = new pts_test_run_manager;16$test_run_manager->cleanup_test_profile_valid($test_profile);17$test_run_manager = new pts_test_run_manager;18$test_run_manager->cleanup_test_profile_valid($test_profile);cleanup_test_profile_valid
Using AI Code Generation
1require_once('pts_test_run_manager.php');2$pts_test_run_manager = new pts_test_run_manager();3$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');4$pts_test_run_manager->cleanup_test_profile_valid('test_profile_invalid');5require_once('pts_test_run_manager.php');6$pts_test_run_manager = new pts_test_run_manager();7$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');8$pts_test_run_manager->cleanup_test_profile_valid('test_profile_invalid');9require_once('pts_test_run_manager.php');10$pts_test_run_manager = new pts_test_run_manager();11$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');12$pts_test_run_manager->cleanup_test_profile_valid('test_profile_invalid');13require_once('pts_test_run_manager.php');14$pts_test_run_manager = new pts_test_run_manager();15$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');16$pts_test_run_manager->cleanup_test_profile_valid('test_profile_invalid');17require_once('pts_test_run_manager.php');18$pts_test_run_manager = new pts_test_run_manager();19$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');20$pts_test_run_manager->cleanup_test_profile_valid('test_profile_invalid');21require_once('pts_test_run_manager.php');22$pts_test_run_manager = new pts_test_run_manager();23$pts_test_run_manager->cleanup_test_profile_valid('test_profile_valid');24$pts_test_run_manager->cleanup_test_profile_valid('testcleanup_test_profile_valid
Using AI Code Generation
1$test_profile = new pts_test_profile('test-profile.xml');2$test_run_manager = new pts_test_run_manager();3$test_run_manager->cleanup_test_profile_valid($test_profile);4$test_profile = new pts_test_profile('test-profile.xml');5$test_run_manager = new pts_test_run_manager();6$test_run_manager->cleanup_test_profile_valid($test_profile);7$test_profile = new pts_test_profile('test-profile.xml');8$test_run_manager = new pts_test_run_manager();9$test_run_manager->cleanup_test_profile_valid($test_profile);10$test_profile = new pts_test_profile('test-profile.xml');11$test_run_manager = new pts_test_run_manager();12$test_run_manager->cleanup_test_profile_valid($test_profile);13$test_profile = new pts_test_profile('test-profile.xml');14$test_run_manager = new pts_test_run_manager();15$test_run_manager->cleanup_test_profile_valid($test_profile);16$test_profile = new pts_test_profile('test-profile.xml');cleanup_test_profile_valid
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->cleanup_test_profile_valid($test_profile);5require_once('pts-test-run-manager.php');6$test_profile = new pts_test_profile('test-profile.xml');7$test_run_manager = new pts_test_run_manager();8$test_run_manager->cleanup_test_profile_valid($test_profile, true);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 cleanup_test_profile_valid 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!!
