]> git.ozlabs.org Git - petitboot/commitdiff
test/efivar: Rework for efi_mount
authorGeoff Levand <geoff@infradead.org>
Tue, 14 Aug 2018 14:25:09 +0000 (07:25 -0700)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Wed, 15 Aug 2018 00:11:23 +0000 (10:11 +1000)
Signed-off-by: Geoff Levand <geoff@infradead.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
test/lib/test-efivar.c

index a85b73ccb2c6db603418a423985be507a30313ca..1be95fd39450c8fdf95286ffa9b642da3afb4bfa 100644 (file)
  *  reserved.
  *  Author: Ge Song <ge.song@hxt-semitech.com>
  */
  *  reserved.
  *  Author: Ge Song <ge.song@hxt-semitech.com>
  */
+
 #include <assert.h>
 #include <assert.h>
-#include <dirent.h>
 #include <errno.h>
 #include <errno.h>
-#include <fcntl.h>
-#include <linux/limits.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
 #include <sys/stat.h>
 #include <sys/statfs.h>
 #include <sys/stat.h>
 #include <sys/statfs.h>
-#include <unistd.h>
+#include <sys/types.h>
 
 #include "efi/efivar.h"
 
 #include "efi/efivar.h"
+#include "log/log.h"
 #include "talloc/talloc.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;
 
        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 (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);
 
        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);
 }
 }