Message ID | 555e6a04-70ec-cd44-2834-efc204a935e9@infradead.org |
---|---|
State | Accepted |
Headers | show |
Series | [v2] test/efivar: Rework for efi_mount | expand |
On Tue, 2018-08-14 at 07:25 -0700, Geoff Levand wrote: > Signed-off-by: Geoff Levand <geoff@infradead.org> > --- > v2: Add SOB. Thanks, series merged as 878a2a52 > > test/lib/test-efivar.c | 128 +++++++++++++++++++------------------------------ > 1 file changed, 49 insertions(+), 79 deletions(-) > > diff --git a/test/lib/test-efivar.c b/test/lib/test-efivar.c > index a85b73c..1be95fd 100644 > --- a/test/lib/test-efivar.c > +++ b/test/lib/test-efivar.c > @@ -16,117 +16,87 @@ > * reserved. > * Author: Ge Song <ge.song@hxt-semitech.com> > */ > + > #include <assert.h> > -#include <dirent.h> > #include <errno.h> > -#include <fcntl.h> > -#include <linux/limits.h> > #include <stdbool.h> > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > + > #include <sys/stat.h> > #include <sys/statfs.h> > -#include <unistd.h> > +#include <sys/types.h> > > #include "efi/efivar.h" > +#include "log/log.h" > #include "talloc/talloc.h" > > -#define DEF_ATTR (EFI_VARIABLE_NON_VOLATILE | \ > - EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS) > - > -static const char *test_efivar_guid = "c9c07add-256e-4452-b911-f8d0d35a1ac7"; > -static const char *test_varname = "efivartest"; > -static const char *test_data = "petitboot"; > +static const struct efi_mount efi_mount = { > + .path = "/tmp/pb-test-efivar", > + .guid = "c9c07add-256e-4452-b911-f8d0d35a1ac7", > +}; > +static const char v_name[] = "petitboot-test-one"; > +static const char v_data[] = "petitboot-efi-tester"; > > -static char* find_efitest_path(void) > +void finish(int code) > { > - static char dir[PATH_MAX] = {0}; > - static bool run = false; > - char *rest_path = "/efivarfs_data/"; > - char *pos = NULL; > - > - if (run) > - return dir; > - > - readlink("/proc/self/exe", dir, PATH_MAX); > - > - pos = strrchr(dir, '/'); > - *pos = '\0'; > - > - strcat(dir, rest_path); > - run = true; > - > - return dir; > + efi_del_variable(&efi_mount, v_name); > + rmdir(efi_mount.path); > + exit(code); > } > > -static bool probe(void) > +int main(void) > { > - char *path; > + struct efi_data *efi_data; > int rc; > > - path = find_efitest_path(); > + __pb_log_init(stderr, true); > > - rc = access(path, F_OK); > + rc = mkdir(efi_mount.path, 0755); > if (rc) { > - if (errno == ENOENT) { > - rc = mkdir(path, 0755); > - if(rc) > - return false; > - } else { > - return false; > + if (errno == EEXIST) > + pb_log("mkdir exists\n"); > + else { > + pb_log("mkdir failed: (%d) %s\n", errno, > + strerror(errno)); > + finish(__LINE__); > } > } > > - set_efivarfs_path(path); > + if (!efi_check_mount_magic(&efi_mount, false)) > + finish(__LINE__); > > - return true; > -} > + efi_data = talloc_zero(NULL, struct efi_data); > + efi_data->attributes = EFI_DEFALT_ATTRIBUTES; > + efi_data->data = talloc_strdup(efi_data, v_data); > + efi_data->data_size = sizeof(v_data); > > -int main(void) > -{ > - void *ctx = NULL; > - int rc, errno_value; > - uint32_t attr = DEF_ATTR; > - char *path = NULL; > - struct efi_data *efi_data; > - > - if(!probe()) > - return ENOENT; > - > - talloc_new(ctx); > - > - efi_data = talloc_zero(ctx, struct efi_data); > - efi_data->attributes = attr; > - efi_data->data = talloc_strdup(efi_data, test_data); > - efi_data->data_size = strlen(test_data) + 1; > - > - rc = efi_set_variable(test_efivar_guid, test_varname, > - efi_data); > + if (efi_set_variable(&efi_mount, v_name, efi_data)) > + finish(__LINE__); > > talloc_free(efi_data); > - rc = efi_get_variable(ctx, test_efivar_guid, test_varname, > - &efi_data); > > - assert(efi_data->data != NULL); > - rc = strcmp((char *)efi_data->data, test_data); > - if (rc) { > - talloc_free(ctx); > - assert(0); > - } > - > - rc = efi_del_variable(test_efivar_guid, test_varname); > + if (efi_get_variable(NULL, &efi_mount, v_name, &efi_data)) > + finish(__LINE__); > > - rc = efi_get_variable(ctx, test_efivar_guid, test_varname, > - &efi_data); > + if (!efi_data->data) { > + pb_log("No efi_data->data\n"); > + finish(__LINE__); > + } > > - errno_value = errno; > - talloc_free(ctx); > + if (strcmp((char *)efi_data->data, v_data)) { > + pb_log("Bad efi_data->data: '%s' != '%s'\n", > + (char *)efi_data->data, v_data); > + finish(__LINE__); > + } > > - assert(errno_value == ENOENT); > + if (efi_del_variable(&efi_mount, v_name)) > + finish(__LINE__); > > - path = find_efitest_path(); > - rmdir(path); > + /* Get after delete should fail. */ > + if (!efi_get_variable(NULL, &efi_mount, v_name, &efi_data)) > + finish(__LINE__); > > - return EXIT_SUCCESS; > + finish(EXIT_SUCCESS); > }
diff --git a/test/lib/test-efivar.c b/test/lib/test-efivar.c index a85b73c..1be95fd 100644 --- a/test/lib/test-efivar.c +++ b/test/lib/test-efivar.c @@ -16,117 +16,87 @@ * reserved. * Author: Ge Song <ge.song@hxt-semitech.com> */ + #include <assert.h> -#include <dirent.h> #include <errno.h> -#include <fcntl.h> -#include <linux/limits.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> + #include <sys/stat.h> #include <sys/statfs.h> -#include <unistd.h> +#include <sys/types.h> #include "efi/efivar.h" +#include "log/log.h" #include "talloc/talloc.h" -#define DEF_ATTR (EFI_VARIABLE_NON_VOLATILE | \ - EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS) - -static const char *test_efivar_guid = "c9c07add-256e-4452-b911-f8d0d35a1ac7"; -static const char *test_varname = "efivartest"; -static const char *test_data = "petitboot"; +static const struct efi_mount efi_mount = { + .path = "/tmp/pb-test-efivar", + .guid = "c9c07add-256e-4452-b911-f8d0d35a1ac7", +}; +static const char v_name[] = "petitboot-test-one"; +static const char v_data[] = "petitboot-efi-tester"; -static char* find_efitest_path(void) +void finish(int code) { - static char dir[PATH_MAX] = {0}; - static bool run = false; - char *rest_path = "/efivarfs_data/"; - char *pos = NULL; - - if (run) - return dir; - - readlink("/proc/self/exe", dir, PATH_MAX); - - pos = strrchr(dir, '/'); - *pos = '\0'; - - strcat(dir, rest_path); - run = true; - - return dir; + efi_del_variable(&efi_mount, v_name); + rmdir(efi_mount.path); + exit(code); } -static bool probe(void) +int main(void) { - char *path; + struct efi_data *efi_data; int rc; - path = find_efitest_path(); + __pb_log_init(stderr, true); - rc = access(path, F_OK); + rc = mkdir(efi_mount.path, 0755); if (rc) { - if (errno == ENOENT) { - rc = mkdir(path, 0755); - if(rc) - return false; - } else { - return false; + if (errno == EEXIST) + pb_log("mkdir exists\n"); + else { + pb_log("mkdir failed: (%d) %s\n", errno, + strerror(errno)); + finish(__LINE__); } } - set_efivarfs_path(path); + if (!efi_check_mount_magic(&efi_mount, false)) + finish(__LINE__); - return true; -} + efi_data = talloc_zero(NULL, struct efi_data); + efi_data->attributes = EFI_DEFALT_ATTRIBUTES; + efi_data->data = talloc_strdup(efi_data, v_data); + efi_data->data_size = sizeof(v_data); -int main(void) -{ - void *ctx = NULL; - int rc, errno_value; - uint32_t attr = DEF_ATTR; - char *path = NULL; - struct efi_data *efi_data; - - if(!probe()) - return ENOENT; - - talloc_new(ctx); - - efi_data = talloc_zero(ctx, struct efi_data); - efi_data->attributes = attr; - efi_data->data = talloc_strdup(efi_data, test_data); - efi_data->data_size = strlen(test_data) + 1; - - rc = efi_set_variable(test_efivar_guid, test_varname, - efi_data); + if (efi_set_variable(&efi_mount, v_name, efi_data)) + finish(__LINE__); talloc_free(efi_data); - rc = efi_get_variable(ctx, test_efivar_guid, test_varname, - &efi_data); - assert(efi_data->data != NULL); - rc = strcmp((char *)efi_data->data, test_data); - if (rc) { - talloc_free(ctx); - assert(0); - } - - rc = efi_del_variable(test_efivar_guid, test_varname); + if (efi_get_variable(NULL, &efi_mount, v_name, &efi_data)) + finish(__LINE__); - rc = efi_get_variable(ctx, test_efivar_guid, test_varname, - &efi_data); + if (!efi_data->data) { + pb_log("No efi_data->data\n"); + finish(__LINE__); + } - errno_value = errno; - talloc_free(ctx); + if (strcmp((char *)efi_data->data, v_data)) { + pb_log("Bad efi_data->data: '%s' != '%s'\n", + (char *)efi_data->data, v_data); + finish(__LINE__); + } - assert(errno_value == ENOENT); + if (efi_del_variable(&efi_mount, v_name)) + finish(__LINE__); - path = find_efitest_path(); - rmdir(path); + /* Get after delete should fail. */ + if (!efi_get_variable(NULL, &efi_mount, v_name, &efi_data)) + finish(__LINE__); - return EXIT_SUCCESS; + finish(EXIT_SUCCESS); }
Signed-off-by: Geoff Levand <geoff@infradead.org> --- v2: Add SOB. test/lib/test-efivar.c | 128 +++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 79 deletions(-)