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

Keng-Yu Lin kengyu at canonical.com
Fri Nov 15 05:50:44 UTC 2013


On Wed, Nov 13, 2013 at 1:17 AM, Colin King <colin.king at canonical.com> 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 }
>  };
>
> --
> 1.8.3.2
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list