ACK: [PATCH] acpi: brightness: break up brightness test (LP: #1250429)

Alex Hung alex.hung at canonical.com
Fri Nov 15 02:23:28 UTC 2013


On 11/13/2013 01:17 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> CERT were asking if the brightness test could be run automatically.
> Tests 1 and 2 of the brightness test don't need user interaction
> and hence should not be in an interactive test and these tests also
> meet CERTs requirement.
>
> This patch adds in brightness-helper for common brightness tests
> helper functions.  Tests 1 and 2 of the brightness test now go into
> a new autobrightness test and tests 3,4 and 5 are renamed and kept
> in the original brightness test.
>
> The patch set also tidies up the original scruffy code to remove
> a stupid amount of nesting.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/Makefile.am                         |   2 +
>   src/acpi/brightness/autobrightness.c    | 182 ++++++++++++++
>   src/acpi/brightness/brightness-helper.c | 144 +++++++++++
>   src/acpi/brightness/brightness-helper.h |  33 +++
>   src/acpi/brightness/brightness.c        | 433 ++++++++++++--------------------
>   5 files changed, 521 insertions(+), 273 deletions(-)
>   create mode 100644 src/acpi/brightness/autobrightness.c
>   create mode 100644 src/acpi/brightness/brightness-helper.c
>   create mode 100644 src/acpi/brightness/brightness-helper.h
>
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 8591606..c4a5f40 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -25,7 +25,9 @@ fwts_SOURCES = main.c 				\
>   	acpi/acpitables/acpitables.c 		\
>   	acpi/apicinstance/apicinstance.c 	\
>   	acpi/battery/battery.c 			\
> +	acpi/brightness/brightness-helper.c	\
>   	acpi/brightness/brightness.c 		\
> +	acpi/brightness/autobrightness.c 	\
>   	acpi/checksum/checksum.c 		\
>   	acpi/crsdump/crsdump.c			\
>   	acpi/cstates/cstates.c 			\
> diff --git a/src/acpi/brightness/autobrightness.c b/src/acpi/brightness/autobrightness.c
> new file mode 100644
> index 0000000..6ac8bcc
> --- /dev/null
> +++ b/src/acpi/brightness/autobrightness.c
> @@ -0,0 +1,182 @@
> +/*
> + * Copyright (C) 2010-2013 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + *
> + */
> +#include "fwts.h"
> +
> +#ifdef FWTS_ARCH_INTEL
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <stdbool.h>
> +#include <unistd.h>
> +#include <string.h>
> +#include <limits.h>
> +#include <dirent.h>
> +
> +#include "brightness-helper.h"
> +
> +static bool skip_tests;
> +
> +static int auto_brightness_test1(fwts_framework *fw)
> +{
> +	struct dirent *entry;
> +	int actual_brightness;
> +	int max_brightness;
> +	DIR *brightness_dir = brightness_get_dir();
> +
> +	skip_tests = true;
> +
> +	rewinddir(brightness_dir);
> +	do {
> +		entry = readdir(brightness_dir);
> +		if (entry == NULL || entry->d_name[0] == '.')
> +			continue;
> +
> +		if (brightness_get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotFound",
> +				"Actual brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +
> +		if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Maximum brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +		skip_tests = false;
> +
> +		if (max_brightness <= 0) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessMaxTest1",
> +				"Maximum brightness for %s is %d and should be > 0.",
> +				entry->d_name, max_brightness);
> +			continue;
> +		}
> +		fwts_passed(fw, "Maximum brightness for %s is %d which is sane.", entry->d_name, max_brightness);
> +
> +		if ((actual_brightness >=0) && (actual_brightness <= max_brightness))
> +			fwts_passed(fw, "Actual brightness for %s is %d which is in range 0..%d.",
> +				entry->d_name, actual_brightness, max_brightness);
> +		else
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessOutofRange",
> +				"Actual brightness for %s not in range 0..%d.",
> +				entry->d_name, max_brightness);
> +	} while (entry);
> +
> +	return FWTS_OK;
> +}
> +
> +static int auto_brightness_test2(fwts_framework *fw)
> +{
> +	struct dirent *entry;
> +	int max_brightness;
> +	int actual_brightness;
> +	int saved_brightness;
> +	DIR *brightness_dir = brightness_get_dir();
> +
> +	rewinddir(brightness_dir);
> +	do {
> +		int i;
> +		bool failed = false;
> +
> +		entry = readdir(brightness_dir);
> +		if (entry == NULL || entry->d_name[0] == '.')
> +			continue;
> +
> +		if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Maximum brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +
> +		if (max_brightness <= 0) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessMaxTest2",
> +				"Maximum brightness for %s is %d and should be > 0.",
> +				entry->d_name, max_brightness);
> +			continue;
> +		}
> +
> +		if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Maximum brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +
> +
> +		for (i = 0; i <= max_brightness; i++) {
> +			brightness_set_setting(entry->d_name, "brightness", i);
> +			if (brightness_get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) {
> +				fwts_log_info(fw, "Cannot get brightness setting %d for backlight %s.", i, entry->d_name);
> +				failed = true;
> +				continue;
> +			}
> +
> +			if (actual_brightness != i) {
> +				fwts_log_info(fw,
> +					"Actual brightness %d does not match the brightnesss "
> +					"level %d just set for backlight %s.",
> +					actual_brightness, i, entry->d_name);
> +				failed = true;
> +			}
> +		}
> +
> +		if (failed)
> +			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> +				"BrightnessMismatch",
> +				"Actual brightness %d does not match the brightnesss level "
> +				"%d just set for backlight %s.",
> +				actual_brightness, i, entry->d_name);
> +		else
> +			fwts_passed(fw, "Actual brightness matches the brightnesss level for "
> +				"all %d levels for backlight %s.", max_brightness, entry->d_name);
> +
> +		/* Restore original setting */
> +		brightness_set_setting(entry->d_name, "brightness", saved_brightness);
> +	} while (entry);
> +
> +	return FWTS_OK;
> +}
> +
> +static fwts_framework_minor_test auto_brightness_tests[] = {
> +	{ auto_brightness_test1, "Test for maximum and actual brightness." },
> +	{ auto_brightness_test2, "Change actual brightness." },
> +	{ NULL, NULL }
> +};
> +
> +static fwts_framework_ops auto_brightness_ops = {
> +	.description = "Automated LCD brightness test.",
> +	.init        = brightness_init,
> +	.deinit      = brightness_deinit,
> +	.minor_tests = auto_brightness_tests
> +};
> +
> +FWTS_REGISTER("autobrightness", &auto_brightness_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH);
> +
> +#endif
> diff --git a/src/acpi/brightness/brightness-helper.c b/src/acpi/brightness/brightness-helper.c
> new file mode 100644
> index 0000000..ae32006
> --- /dev/null
> +++ b/src/acpi/brightness/brightness-helper.c
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2010-2013 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + *
> + */
> +#include "fwts.h"
> +#include "brightness-helper.h"
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <sys/types.h>
> +#include <dirent.h>
> +
> +/*
> + *  Brightness tests helper functions
> + */
> +
> +static DIR *brightness_dir;
> +static char *brightness_path;
> +
> +/*
> + *  brightness_get_dir()
> + * 	return /sys interface DIR handle opened by brightness_init()
> + */
> +DIR *brightness_get_dir(void)
> +{
> +	return brightness_dir;
> +}
> +
> +/*
> + *  brightness_get_path()
> + *
> + */
> +char *brightness_get_path(void)
> +{
> +	return brightness_path;
> +}
> +
> +/*
> + *  brightness_init()
> + *	generic brightness test init, if successful
> + *	it opens a diretory for the /sys interface
> + */
> +int brightness_init(fwts_framework *fw)
> +{
> +	int i;
> +	static char *sys_path[] = {
> +		"/sys/class/backlight",
> +		"/sys/devices/virtual/backlight",
> +		NULL
> +	};
> +
> +	brightness_path = NULL;
> +	brightness_dir = NULL;
> +
> +	for (i = 0; sys_path[i]; i++) {
> +		brightness_dir = opendir(sys_path[i]);
> +		if (brightness_dir) {
> +			brightness_path = sys_path[i];
> +			return FWTS_OK;
> +		}
> +	}
> +
> +	fwts_failed(fw, LOG_LEVEL_LOW,
> +		"BacklightNoPath",
> +		"No sysfs backlight directory available: cannot test.");
> +
> +	return FWTS_ERROR;
> +}
> +
> +/*
> + *  brightness_deinit()
> + */
> +int brightness_deinit(fwts_framework *fw)
> +{
> +	FWTS_UNUSED(fw);
> +
> +	if (brightness_dir)
> +		closedir(brightness_dir);
> +
> +	brightness_path = NULL;
> +	brightness_dir = NULL;
> +
> +	return FWTS_OK;
> +}
> +
> +/*
> + *  brightness_get_setting()
> + *	get a brightness setting
> + */
> +int brightness_get_setting(const char *entry_name, const char *setting, int *value)
> +{
> +	char path[PATH_MAX];
> +	FILE *fp;
> +
> +	snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting);
> +	if ((fp = fopen(path, "r")) == NULL)
> +		return FWTS_ERROR;
> +
> +	if (fscanf(fp, "%d", value) != 1) {
> +		fclose(fp);
> +		return FWTS_ERROR;
> +	}
> +
> +	fclose(fp);
> +
> +	return FWTS_OK;
> +}
> +
> +/*
> + *  brightness_set_setting()
> + *	set a brightness setting
> + */
> +int brightness_set_setting(const char *entry_name, const char *setting, const int value)
> +{
> +	char path[PATH_MAX];
> +	FILE *fp;
> +
> +	snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting);
> +	if ((fp = fopen(path, "w")) == NULL)
> +		return FWTS_ERROR;
> +
> +	if (fprintf(fp, "%d", value) < 1) {
> +		fclose(fp);
> +		return FWTS_ERROR;
> +	}
> +
> +	fclose(fp);
> +
> +	return FWTS_OK;
> +}
> diff --git a/src/acpi/brightness/brightness-helper.h b/src/acpi/brightness/brightness-helper.h
> new file mode 100644
> index 0000000..0551529
> --- /dev/null
> +++ b/src/acpi/brightness/brightness-helper.h
> @@ -0,0 +1,33 @@
> +/*
> + * Copyright (C) 2010-2013 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + *
> + */
> +#ifndef __BRIGHTNESS_HELPER__
> +#define __BRIGHTNESS_HELPER__
> +
> +#include "fwts.h"
> +#include <limits.h>
> +#include <dirent.h>
> +
> +DIR *brightness_get_dir(void);
> +char *brightness_get_path(void);
> +int brightness_init(fwts_framework *fw);
> +int brightness_deinit(fwts_framework *fw);
> +int brightness_get_setting(const char *entry_name, const char *setting, int *value);
> +int brightness_set_setting(const char *entry_name, const char *setting, const int value);
> +
> +#endif
> diff --git a/src/acpi/brightness/brightness.c b/src/acpi/brightness/brightness.c
> index fd333d5..eb837d9 100644
> --- a/src/acpi/brightness/brightness.c
> +++ b/src/acpi/brightness/brightness.c
> @@ -24,131 +24,22 @@
>   #include <stdio.h>
>   #include <sys/types.h>
>   #include <sys/stat.h>
> +#include <stdbool.h>
>   #include <unistd.h>
>   #include <string.h>
>   #include <limits.h>
>   #include <dirent.h>
>
> -static DIR *brightness_dir;
> -static char *brightness_path;
> +#include "brightness-helper.h"
>
> -static int skip_tests = 0;
> -
> -static int brightness_init(fwts_framework *fw)
> -{
> -	int i;
> -	static char *sys_path[] = {
> -		"/sys/class/backlight",
> -		"/sys/devices/virtual/backlight",
> -		NULL
> -	};
> -
> -	brightness_path = NULL;
> -	brightness_dir = NULL;
> -
> -	for (i = 0; sys_path[i]; i++) {
> -		brightness_dir = opendir(sys_path[i]);
> -		if (brightness_dir) {
> -			brightness_path = sys_path[i];
> -			return FWTS_OK;
> -		}
> -	}
> -
> -	fwts_failed(fw, LOG_LEVEL_LOW, "BacklightNoPath", "No sysfs backlight directory available: cannot test.");
> -	return FWTS_ERROR;
> -}
> -
> -static int brightness_deinit(fwts_framework *fw)
> -{
> -	FWTS_UNUSED(fw);
> -
> -	if (brightness_dir)
> -		closedir(brightness_dir);
> -
> -	return FWTS_OK;
> -}
> -
> -static int get_setting(char *entry_name, char *setting, int *value)
> -{
> -	char path[PATH_MAX];
> -	FILE *fp;
> -
> -	snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting);
> -	if ((fp = fopen(path, "r")) == NULL)
> -		return -1;
> -
> -	if (fscanf(fp, "%d", value) != 1) {
> -		fclose(fp);
> -		return -2;
> -	}
> -
> -	fclose(fp);
> -
> -	return FWTS_OK;
> -}
> -
> -static int set_setting(char *entry_name, char *setting, int value)
> -{
> -	char path[PATH_MAX];
> -	FILE *fp;
> -
> -	snprintf(path, sizeof(path), "%s/%s/%s", brightness_path, entry_name, setting);
> -	if ((fp = fopen(path, "w")) == NULL)
> -		return -1;
> -
> -	if (fprintf(fp, "%d", value) < 1) {
> -		fclose(fp);
> -		return -2;
> -	}
> -
> -	fclose(fp);
> -
> -	return FWTS_OK;
> -}
> +static bool skip_tests = false;
>
>   static int brightness_test1(fwts_framework *fw)
>   {
>   	struct dirent *entry;
> -	int actual_brightness;
> -	int max_brightness;
> -
> -	skip_tests = 1;
> -
> -	rewinddir(brightness_dir);
> -	do {
> -		entry = readdir(brightness_dir);
> -		if (entry && strlen(entry->d_name)>2) {
> -			if (get_setting(entry->d_name, "max_brightness", &max_brightness) == FWTS_OK) {
> -				if (max_brightness <= 0)
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest1", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness);
> -				else {
> -					fwts_passed(fw, "Maximum brightness for %s is %d which is sane.", entry->d_name, max_brightness);
> -					skip_tests = 0;
> -
> -					if (get_setting(entry->d_name, "actual_brightness", &actual_brightness) == FWTS_OK)
> -						if ((actual_brightness >=0) && (actual_brightness <= max_brightness)) {
> -							fwts_passed(fw, "Actual brightness for %s is %d which is in range 0..%d.", entry->d_name, actual_brightness, max_brightness);
> -						}
> -						else
> -							fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessOutofRange", "Actual brightness for %s not in range 0..%d.", entry->d_name, max_brightness);
> -					else
> -						fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotFound", "Actual brightness could not be accessed for %s.", entry->d_name);
> -				}
> -			} else
> -				fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name);
> -		}
> -	} while (entry);
> -
> -	return FWTS_OK;
> -}
> -
> -
> -static int brightness_test2(fwts_framework *fw)
> -{
> -	struct dirent *entry;
>   	int max_brightness;
> -	int actual_brightness;
>   	int saved_brightness;
> +	DIR *brightness_dir = brightness_get_dir();
>
>   	if (skip_tests)	{
>   		fwts_skipped(fw, "Test skipped because previous test failed.");
> @@ -157,49 +48,67 @@ static int brightness_test2(fwts_framework *fw)
>
>   	rewinddir(brightness_dir);
>   	do {
> +		int ch;
> +
>   		entry = readdir(brightness_dir);
> -		if (entry && strlen(entry->d_name)>2) {
> -			if (get_setting(entry->d_name, "max_brightness", &max_brightness) == FWTS_OK) {
> -				if (max_brightness <= 0) {
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest2", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness);
> -					continue;
> -				}
> -				if (get_setting(entry->d_name, "actual_brightness", &saved_brightness) == FWTS_OK) {
> -					int i;
> -					int failed = 0;
> -
> -					for (i=0;i<=max_brightness;i++) {
> -						set_setting(entry->d_name, "brightness", i);
> -						if (get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) {
> -							fwts_log_info(fw, "Cannot get brightness setting %d for backlight %s.", i, entry->d_name);
> -							failed++;
> -							continue;
> -						}
> -						if (actual_brightness != i)  {
> -							fwts_log_info(fw, "Actual brightness %d does not match the brightnesss level %d just set for backlight %s.", actual_brightness, i, entry->d_name);
> -							failed++;
> -						}
> -					}
> -					if (failed)
> -						fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessMismatch", "Actual brightness %d does not match the brightnesss level %d just set for backlight %s.", actual_brightness, i, entry->d_name);
> -					else
> -						fwts_passed(fw, "Actual brightness match the brightnesss level for backlight %s.", entry->d_name);
> -					/* Restore */
> -					set_setting(entry->d_name, "brightness", saved_brightness);
> -				}
> -			} else
> -				fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name);
> +		if (entry == NULL || entry->d_name[0] == '.')
> +			continue;
> +
> +		if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Maximum brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +		if (max_brightness <= 0) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessMaxTest1",
> +				"Maximum brightness for %s is %d and should be > 0.",
> +				entry->d_name, max_brightness);
> +			continue;
> +		}
> +		if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessMaxTest1",
> +				"Failed to get current brightness setting for %s.",
> +				entry->d_name);
> +			continue;
>   		}
> +
> +		fwts_printf(fw, "==== Setting backlight to a low level ====\n");
> +		/*
> +		 * Setting it to zero on some machines turns
> +		 * off the backlight, so set to a low value instead
> +		 */
> +		brightness_set_setting(entry->d_name, "brightness", 1);
> +		ch = fwts_get_reply(fw, "==== Is the Backlight now set to a dim level? [Y/N]: ", "ynYN");
> +		if (ch == 'y' || ch == 'Y')
> +			fwts_passed(fw, "Backlight %s set to dim level.", entry->d_name);
> +		else
> +			fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessDimLevel", "Backlight %s was NOT set to dim level.", entry->d_name);
> +
> +		fwts_printf(fw, "==== Setting backlight to highest level ====\n");
> +		brightness_set_setting(entry->d_name, "brightness", max_brightness);
> +		ch = fwts_get_reply(fw, "==== Is the Backlight now set to a bright level? [Y/N]: ", "ynYN");
> +		if (ch == 'y' || ch == 'Y')
> +			fwts_passed(fw, "Backlight %s set to bright level.", entry->d_name);
> +		else
> +			fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessBrightLevel", "Backlight %s was NOT set to bright level.", entry->d_name);
> +
> +		/* Restore */
> +		brightness_set_setting(entry->d_name, "brightness", saved_brightness);
>   	} while (entry);
>
>   	return FWTS_OK;
>   }
>
> -static int brightness_test3(fwts_framework *fw)
> +static int brightness_test2(fwts_framework *fw)
>   {
>   	struct dirent *entry;
>   	int max_brightness;
>   	int saved_brightness;
> +	DIR *brightness_dir = brightness_get_dir();
>
>   	if (skip_tests)	{
>   		fwts_skipped(fw, "Test skipped because previous test failed.");
> @@ -208,92 +117,49 @@ static int brightness_test3(fwts_framework *fw)
>
>   	rewinddir(brightness_dir);
>   	do {
> +		int i;
> +
>   		entry = readdir(brightness_dir);
> -		if (entry && strlen(entry->d_name)>2) {
> -			if (get_setting(entry->d_name, "max_brightness", &max_brightness) == FWTS_OK) {
> -				if (max_brightness <= 0) {
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest3", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness);
> -					continue;
> -				}
> -				if (get_setting(entry->d_name, "actual_brightness", &saved_brightness) == FWTS_OK) {
> -					int ch;
> -
> -					fwts_printf(fw, "==== Setting backlight to a low level ====\n");
> -					/* Setting it to zero on some machines turns off the backlight, so set to a low value instead */
> -					set_setting(entry->d_name, "brightness", 1);
> -					ch = fwts_get_reply(fw, "==== Is the Backlight now set to a dim level? [Y/N]: ", "ynYN");
> -					if (ch == 'y' || ch == 'Y')
> -						fwts_passed(fw, "Backlight %s set to dim level.", entry->d_name);
> -					else
> -						fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessDimLevel", "Backlight %s was NOT set to dim level.", entry->d_name);
> -
> -					fwts_printf(fw, "==== Setting backlight to highest level ====\n");
> -					set_setting(entry->d_name, "brightness", max_brightness);
> -					ch = fwts_get_reply(fw, "==== Is the Backlight now set to a bright level? [Y/N]: ", "ynYN");
> -					if (ch == 'y' || ch == 'Y')
> -						fwts_passed(fw, "Backlight %s set to bright level.", entry->d_name);
> -					else
> -						fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessBrightLevel", "Backlight %s was NOT set to bright level.", entry->d_name);
> -
> -					/* Restore */
> -					set_setting(entry->d_name, "brightness", saved_brightness);
> -				}
> -			} else
> -				fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name);
> +		if (entry == NULL || entry->d_name[0] == '.')
> +			continue;
> +
> +		if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Maximum brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +		if (max_brightness <= 0) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessMaxTest2",
> +				"Maximum brightness for %s is %d and should be > 0.",
> +				entry->d_name, max_brightness);
> +			continue;
>   		}
> -	} while (entry);
>
> -	return FWTS_OK;
> -}
> +		fwts_printf(fw, "==== Backlight will now slowly transition from dim to bright ====\n");
> +		if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) == FWTS_OK) {
> +			long delay = 5000000 / max_brightness;
> +			int ch;
>
> -static int brightness_test4(fwts_framework *fw)
> -{
> -	struct dirent *entry;
> -	int max_brightness;
> -	int saved_brightness;
> +			if (delay > 1000000)
> +				delay = 1000000;
>
> -	if (skip_tests)	{
> -		fwts_skipped(fw, "Test skipped because previous test failed.");
> -		return FWTS_SKIP;
> -	}
> +			for (i = 0; i <= max_brightness; i++) {
> +				fwts_printf(fw, "Setting to brightness level %d\r", i);
> +				brightness_set_setting(entry->d_name, "brightness", i);
> +				usleep(delay);
> +			}
>
> -	rewinddir(brightness_dir);
> -	do {
> -		entry = readdir(brightness_dir);
> -		if (entry && strlen(entry->d_name)>2) {
> -			if (get_setting(entry->d_name, "max_brightness", &max_brightness) == FWTS_OK) {
> -				int i;
> -
> -				if (max_brightness <= 0) {
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessMaxTest4", "Maximum brightness for %s is %d and should be > 0.", entry->d_name, max_brightness);
> -					continue;
> -				}
> -
> -				fwts_printf(fw, "==== Backlight will now slowly transition from dim to bright ====\n");
> -				if (get_setting(entry->d_name, "actual_brightness", &saved_brightness) == FWTS_OK) {
> -					long delay = 5000000/max_brightness;
> -					int ch;
> -
> -					if (delay > 1000000)
> -						delay = 1000000;
> -
> -					for (i=0;i<=max_brightness;i++) {
> -						fwts_printf(fw, "Setting to brightness level %d\r", i);
> -						set_setting(entry->d_name, "brightness", i);
> -						usleep(delay);
> -					}
> -
> -					ch = fwts_get_reply(fw, "==== Did the backlight go from dim to bright? [Y/N]: ", "ynYN");
> -					if (ch == 'y' || ch == 'Y')
> -						fwts_passed(fw, "Backlight %s was observed going from dim to bright.", entry->d_name);
> -					else
> -						fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessNoDimming", "Backlight %s was NOT observed going from dim to bright.", entry->d_name);
> -
> -					/* Restore */
> -					set_setting(entry->d_name, "brightness", saved_brightness);
> -				}
> -			} else
> -				fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Maximum brightness could not be accessed for %s.", entry->d_name);
> +			ch = fwts_get_reply(fw, "==== Did the backlight go from dim to bright? [Y/N]: ", "ynYN");
> +			if (ch == 'y' || ch == 'Y')
> +				fwts_passed(fw, "Backlight %s was observed going from dim to bright.", entry->d_name);
> +			else
> +				fwts_failed(fw, LOG_LEVEL_MEDIUM, "BrightnessNoDimming", "Backlight %s was NOT observed going from dim to bright.", entry->d_name);
> +
> +			/* Restore */
> +			brightness_set_setting(entry->d_name, "brightness", saved_brightness);
>   		}
>   	} while (entry);
>
> @@ -313,7 +179,7 @@ static int brightness_wait_event(fwts_framework *fw)
>   		return FWTS_ERROR;
>   	}
>
> -	for (i=0;i<=20;i++) {
> +	for (i = 0; i <= 20; i++) {
>   		if ((buffer = fwts_acpi_event_read(fd, &len, 1)) != NULL)
>   			if (strstr(buffer, "video")) {
>   				free(buffer);
> @@ -321,62 +187,85 @@ static int brightness_wait_event(fwts_framework *fw)
>   				break;
>   			}
>
> -		fwts_printf(fw, "Waiting %2.2d/20\r", 20-i);
> +		fwts_printf(fw, "Waiting %2.2d/20\r", 20 - i);
>   	}
> -
>   	fwts_acpi_event_close(fd);
>
>   	return events;
>   }
>
> -static int brightness_test5(fwts_framework *fw)
> +static int brightness_test3(fwts_framework *fw)
>   {
>   	struct dirent *entry;
>   	int saved_brightness;
> +	DIR *brightness_dir = brightness_get_dir();
>
>   	rewinddir(brightness_dir);
>   	do {
> +		int tmp;
> +
>   		entry = readdir(brightness_dir);
> -		if (entry && strlen(entry->d_name)>2) {
> -			if (get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) {
> -				fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name);
> +		if (entry == NULL || entry->d_name[0] == '.')
> +			continue;
> +
> +		if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) {
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNotExist",
> +				"Actual brightness could not be accessed for %s.",
> +				entry->d_name);
> +			continue;
> +		}
> +
> +		brightness_set_setting(entry->d_name, "brightness", 1);
> +		fwts_printf(fw, "==== Press the brightness UP hotkey for %s ====\n", entry->d_name);
> +
> +		if (brightness_wait_event(fw) == 0)
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNoHotKey",
> +				"Did not detect ACPI hotkey event.");
> +		else {
> +			int new_brightness;
> +
> +			if (brightness_get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) {
> +				fwts_failed(fw, LOG_LEVEL_HIGH,
> +					"BrightnessNotExist",
> +					"Actual brightness could not be accessed for %s.",
> +					entry->d_name);
> +			} else {
> +				if (new_brightness > 0)
> +					fwts_passed(fw, "Brightness increased on UP hotkey for %s.", entry->d_name);
> +				else
> +					fwts_failed(fw, LOG_LEVEL_HIGH,
> +						"BrightnessNoIncrease",
> +						"Did not see brightness increased for %s.",
> +						entry->d_name);
> +			}
> +		}
> +
> +		tmp = (saved_brightness > 0) ? saved_brightness : 1;
> +		brightness_set_setting(entry->d_name, "brightness", tmp);
> +		fwts_printf(fw, "==== Press the brightness DOWN hotkey for %s ====\n", entry->d_name);
> +
> +		if (brightness_wait_event(fw) == 0)
> +			fwts_failed(fw, LOG_LEVEL_HIGH,
> +				"BrightnessNoHotKey",
> +				"Did not detect ACPI hotkey event.");
> +		else {
> +			int new_brightness;
> +
> +			if (brightness_get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) {
> +				fwts_failed(fw, LOG_LEVEL_HIGH,
> +					"BrightnessNotExist",
> +					"Actual brightness could not be accessed for %s.",
> +					entry->d_name);
>   			} else {
> -				int tmp;
> -
> -				set_setting(entry->d_name, "brightness", 1);
> -				fwts_printf(fw, "==== Press the brightness UP hotkey for %s ====\n", entry->d_name);
> -
> -				if (brightness_wait_event(fw) == 0)
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoHotKey", "Did not detect ACPI hotkey event.");
> -				else {
> -					int new_brightness;
> -					if (get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) {
> -						fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name);
> -					} else {
> -						if (new_brightness > 0)
> -							fwts_passed(fw, "Brightness increased on UP hotkey for %s.", entry->d_name);
> -						else
> -							fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoIncrease", "Did not see brightness increased for %s.", entry->d_name);
> -					}
> -				}
> -
> -				tmp = (saved_brightness > 0) ? saved_brightness : 1;
> -				set_setting(entry->d_name, "brightness", tmp);
> -				fwts_printf(fw, "==== Press the brightness DOWN hotkey for %s ====\n", entry->d_name);
> -
> -				if (brightness_wait_event(fw) == 0)
> -					fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoHotKey", "Did not detect ACPI hotkey event.");
> -				else {
> -					int new_brightness;
> -					if (get_setting(entry->d_name, "actual_brightness", &new_brightness) != FWTS_OK) {
> -						fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNotExist", "Actual brightness could not be accessed for %s.", entry->d_name);
> -					} else {
> -						if (new_brightness < tmp)
> -							fwts_passed(fw, "Brightness decreased on DOWN hotkey for %s.", entry->d_name);
> -						else
> -							fwts_failed(fw, LOG_LEVEL_HIGH, "BrightnessNoDecrease", "Did not see brightness decrease for %s.", entry->d_name);
> -					}
> -				}
> +				if (new_brightness < tmp)
> +					fwts_passed(fw, "Brightness decreased on DOWN hotkey for %s.", entry->d_name);
> +				else
> +					fwts_failed(fw, LOG_LEVEL_HIGH,
> +						"BrightnessNoDecrease",
> +						"Did not see brightness decrease for %s.",
> +						entry->d_name);
>   			}
>   		}
>   	} while (entry);
> @@ -385,11 +274,9 @@ static int brightness_test5(fwts_framework *fw)
>   }
>
>   static fwts_framework_minor_test brightness_tests[] = {
> -	{ brightness_test1, "Test for maximum and actual brightness." },
> -	{ brightness_test2, "Change actual brightness." },
> -	{ brightness_test3, "Observe all brightness changes." },
> -	{ brightness_test4, "Observe min, max brightness changes." },
> -	{ brightness_test5, "Test brightness hotkeys." },
> +	{ brightness_test1, "Observe all brightness changes." },
> +	{ brightness_test2, "Observe min, max brightness changes." },
> +	{ brightness_test3, "Test brightness hotkeys." },
>   	{ NULL, NULL }
>   };
>
>


Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list