Bladeren bron

Extract testing to individual functions

Marc Di Luzio 6 jaren geleden
bovenliggende
commit
784cb0053d
1 gewijzigde bestanden met toevoegingen van 152 en 108 verwijderingen
  1. 152 108
      daemon/gamemode-tests.c

+ 152 - 108
daemon/gamemode-tests.c

@@ -242,6 +242,142 @@ static int run_dual_client_tests(void)
 	return status;
 }
 
+static int run_cpu_governor_tests(struct GameModeConfig *config)
+{
+	/* get the two config parameters we care about */
+	char desiredgov[CONFIG_VALUE_MAX] = { 0 };
+	config_get_desired_governor(config, desiredgov);
+
+	if (desiredgov[0] == '\0')
+		strcpy(desiredgov, "performance");
+
+	char defaultgov[CONFIG_VALUE_MAX] = { 0 };
+	config_get_default_governor(config, defaultgov);
+
+	if (desiredgov[0] == '\0') {
+		const char *currentgov = get_gov_state();
+		if (currentgov) {
+			strncpy(desiredgov, currentgov, CONFIG_VALUE_MAX);
+		} else {
+			LOG_ERROR(
+			    "Could not get current CPU governor state, this indicates an error! See rest "
+			    "of log.\n");
+			return -1;
+		}
+	}
+
+	/* Start gamemode */
+	gamemode_request_start();
+
+	/* Verify the governor is the desired one */
+	const char *currentgov = get_gov_state();
+	if (strncmp(currentgov, desiredgov, CONFIG_VALUE_MAX) != 0) {
+		LOG_ERROR("Govenor was not set to %s (was actually %s)!", desiredgov, currentgov);
+		gamemode_request_end();
+		return -1;
+	}
+
+	/* End gamemode */
+	gamemode_request_end();
+
+	/* Verify the governor has been set back */
+	currentgov = get_gov_state();
+	if (strncmp(currentgov, defaultgov, CONFIG_VALUE_MAX) != 0) {
+		LOG_ERROR("Govenor was not set back to %s (was actually %s)!", defaultgov, currentgov);
+		return -1;
+	}
+
+	return 0;
+}
+
+static int run_custom_scripts_tests(struct GameModeConfig *config)
+{
+	int scriptstatus = 0;
+
+	/* Grab and test the start scripts */
+	char startscripts[CONFIG_LIST_MAX][CONFIG_VALUE_MAX];
+	memset(startscripts, 0, sizeof(startscripts));
+	config_get_gamemode_start_scripts(config, startscripts);
+
+	if (startscripts[0][0] != '\0') {
+		int i = 0;
+		while (*startscripts[i] != '\0' && i < CONFIG_LIST_MAX) {
+			LOG_MSG(":::: Running start script [%s]\n", startscripts[i]);
+
+			int ret = system(startscripts[i]);
+
+			if (ret == 0)
+				LOG_MSG(":::: Passed\n");
+			else {
+				LOG_MSG(":::: Failed!\n");
+				scriptstatus = -1;
+			}
+			i++;
+		}
+	}
+
+	/* Grab and test the end scripts */
+	char endscripts[CONFIG_LIST_MAX][CONFIG_VALUE_MAX];
+	memset(endscripts, 0, sizeof(endscripts));
+	config_get_gamemode_end_scripts(config, endscripts);
+
+	if (endscripts[0][0] != '\0') {
+		int i = 0;
+		while (*endscripts[i] != '\0' && i < CONFIG_LIST_MAX) {
+			LOG_MSG(":::: Running end script [%s]\n", endscripts[i]);
+
+			int ret = system(endscripts[i]);
+
+			if (ret == 0)
+				LOG_MSG(":::: Passed\n");
+			else {
+				LOG_MSG(":::: Failed!\n");
+				scriptstatus = -1;
+			}
+			i++;
+		}
+	}
+
+	/* Specal value for no scripts */
+	if (endscripts[0][0] == '\0' && startscripts[0][0] == '\0')
+		return 1;
+
+	return scriptstatus;
+}
+
+int run_gpu_optimisation_tests(struct GameModeConfig *config)
+{
+	/* First check if these are turned on */
+	char apply[CONFIG_VALUE_MAX];
+	config_get_apply_gpu_optimisations(config, apply);
+	if (strlen(apply) == 0) {
+		/* Special value for disabled */
+		return 1;
+	} else if (strncmp(apply, "accept-responsibility", CONFIG_VALUE_MAX) != 0) {
+		LOG_ERROR(
+		    "apply_gpu_optimisations set to value other than \"accept-responsibility\" (%s), will "
+		    "not apply GPU optimisations!\n",
+		    apply);
+		return -1;
+	}
+
+	/* Get current GPU values */
+	GameModeGPUInfo gpuinfo;
+	gpuinfo.device = config_get_gpu_device(config);
+	gpuinfo.vendor = config_get_gpu_vendor(config);
+
+	if (gpuinfo.vendor == Vendor_NVIDIA)
+		gpuinfo.nv_perf_level = config_get_nv_perf_level(config);
+
+	if (game_mode_get_gpu(&gpuinfo) != 0) {
+		LOG_ERROR("Could not get current GPU info, see above!\n");
+		return -1;
+	}
+
+	/* TODO continue to run gamemode and check GPU stats */
+	return 0;
+}
+
 /**
  * game_mode_run_feature_tests runs a set of tests for each current feature (based on the current
  * config) returns 0 for success, -1 for failure
@@ -261,145 +397,53 @@ static int game_mode_run_feature_tests(void)
 
 	/* Does the CPU governor get set properly? */
 	{
-		int cpustatus = 0;
 		LOG_MSG("::: Verifying CPU governor setting\n");
 
-		/* get the two config parameters we care about */
-		char desiredgov[CONFIG_VALUE_MAX] = { 0 };
-		config_get_desired_governor(config, desiredgov);
-
-		if (desiredgov[0] == '\0')
-			strcpy(desiredgov, "performance");
-
-		char defaultgov[CONFIG_VALUE_MAX] = { 0 };
-		config_get_default_governor(config, defaultgov);
-
-		if (desiredgov[0] == '\0') {
-			const char *currentgov = get_gov_state();
-			if (currentgov) {
-				strncpy(desiredgov, currentgov, CONFIG_VALUE_MAX);
-			} else {
-				LOG_ERROR(
-				    "Could not get current CPU governor state, this indicates an error! See rest "
-				    "of log.\n");
-				cpustatus = -1;
-			}
-		}
-
-		/* Only continue if we had no error before */
-		if (cpustatus == 0) {
-			/* Start gamemode */
-			gamemode_request_start();
-
-			/* Verify the governor is the desired one */
-			const char *currentgov = get_gov_state();
-			if (strncmp(currentgov, desiredgov, CONFIG_VALUE_MAX) != 0) {
-				LOG_ERROR("Govenor was not set to %s (was actually %s)!", desiredgov, currentgov);
-				cpustatus = -1;
-			}
-
-			/* End gamemode */
-			gamemode_request_end();
-
-			/* Verify the governor has been set back */
-			currentgov = get_gov_state();
-			if (strncmp(currentgov, defaultgov, CONFIG_VALUE_MAX) != 0) {
-				LOG_ERROR("Govenor was not set back to %s (was actually %s)!",
-				          defaultgov,
-				          currentgov);
-				cpustatus = -1;
-			}
-		}
+		int cpustatus = run_cpu_governor_tests(config);
 
 		if (cpustatus == 0)
 			LOG_MSG("::: Passed\n");
 		else {
 			LOG_MSG("::: Failed!\n");
+			// Consider the CPU governor feature required
 			status = 1;
 		}
 	}
 
 	/* Do custom scripts run? */
 	{
-		int scriptstatus = 0;
 		LOG_MSG("::: Verifying Scripts\n");
+		int scriptstatus = run_custom_scripts_tests(config);
 
-		/* Grab and test the start scripts */
-		char startscripts[CONFIG_LIST_MAX][CONFIG_VALUE_MAX];
-		memset(startscripts, 0, sizeof(startscripts));
-		config_get_gamemode_start_scripts(config, startscripts);
-
-		if (startscripts[0][0] != '\0') {
-			int i = 0;
-			while (*startscripts[i] != '\0' && i < CONFIG_LIST_MAX) {
-				LOG_MSG(":::: Running start script [%s]\n", startscripts[i]);
-
-				int ret = system(startscripts[i]);
-
-				if (ret == 0)
-					LOG_MSG(":::: Passed\n");
-				else {
-					LOG_MSG(":::: Failed!\n");
-					scriptstatus = -1;
-				}
-				i++;
-			}
-		}
-
-		/* Grab and test the end scripts */
-		char endscripts[CONFIG_LIST_MAX][CONFIG_VALUE_MAX];
-		memset(endscripts, 0, sizeof(endscripts));
-		config_get_gamemode_end_scripts(config, endscripts);
-
-		if (endscripts[0][0] != '\0') {
-			int i = 0;
-			while (*endscripts[i] != '\0' && i < CONFIG_LIST_MAX) {
-				LOG_MSG(":::: Running end script [%s]\n", endscripts[i]);
-
-				int ret = system(endscripts[i]);
-
-				if (ret == 0)
-					LOG_MSG(":::: Passed\n");
-				else {
-					LOG_MSG(":::: Failed!\n");
-					scriptstatus = -1;
-				}
-				i++;
-			}
-		}
-
-		if (endscripts[0][0] == '\0' && startscripts[0][0] == '\0')
+		if (scriptstatus == 1)
 			LOG_MSG("::: Passed (no scripts configured to run)\n");
 		else if (scriptstatus == 0)
 			LOG_MSG("::: Passed\n");
 		else {
 			LOG_MSG("::: Failed!\n");
+			// Any custom scripts should be expected to work
 			status = 1;
 		}
 	}
 
-	/* Does the screensaver get inhibited? */
-	/* TODO: Unknown if this is testable, org.freedesktop.ScreenSaver has no query method */
-
 	/* Do GPU optimisations get applied? */
 	{
-		/* First get current GPU values */
-		GameModeGPUInfo gpuinfo;
-		gpuinfo.device = config_get_gpu_device(config);
-		gpuinfo.vendor = config_get_gpu_vendor(config);
-
-		if( gpuinfo.vendor == Vendor_NVIDIA )
-			gpuinfo.nv_perf_level = config_get_nv_perf_level(config);
+		int gpustatus = run_gpu_optimisation_tests(config);
 
-		if( game_mode_get_gpu(&gpuinfo) != 0 )
-		{
-			LOG_ERROR("Could not get current GPU info, see above!\n");
+		if (gpustatus == 1)
+			LOG_MSG("::: Passed (gpu optimisations not configured to run)\n");
+		else if (gpustatus == 0)
+			LOG_MSG("::: Passed\n");
+		else {
+			LOG_MSG("::: Failed!\n");
+			// Any custom scripts should be expected to work
 			status = 1;
 		}
-
-		/* TODO continue to run gamemode and check GPU stats */
 	}
 
+	/* Does the screensaver get inhibited? */
+	/* TODO: Unknown if this is testable, org.freedesktop.ScreenSaver has no query method */
+
 	/* Was the process reniced? */
 	/* Was the scheduling applied? */
 	/* Were io priorities changed? */