[PATCH 4/5] Implement tests for user variables

6 views
Skip to first unread message

Andreas J. Reichel

unread,
Nov 3, 2017, 7:53:50 AM11/3/17
to efibootg...@googlegroups.com, Andreas Reichel
From: Andreas Reichel <andreas.r...@siemens.com>

Implement test cases to check user variable storage with and without
USERVAR_TYPE_GLOBAL flag.

Signed-off-by: Andreas Reichel <andreas.r...@siemens.com>
---
include/env_api.h | 1 +
tools/tests/test_ebgenv_api_internal.c | 75 +++++++++++++++++++++++++++++++++-
2 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/include/env_api.h b/include/env_api.h
index 3b1ba1f..3433ac5 100644
--- a/include/env_api.h
+++ b/include/env_api.h
@@ -85,5 +85,6 @@ extern int bgenv_set(BGENV *env, char *key, uint64_t type, void *data,
uint32_t datalen);
extern int bgenv_set_uservar_global(char *key, uint64_t type,
void *data, uint32_t datalen);
+extern uint8_t *bgenv_find_uservar(uint8_t *userdata, char *key);

#endif // __ENV_API_H__
diff --git a/tools/tests/test_ebgenv_api_internal.c b/tools/tests/test_ebgenv_api_internal.c
index 25b9ff8..a2c858f 100644
--- a/tools/tests/test_ebgenv_api_internal.c
+++ b/tools/tests/test_ebgenv_api_internal.c
@@ -16,6 +16,7 @@
#include <env_api.h>
#include <env_config_file.h>
#include <env_config_partitions.h>
+#include <ebgenv.h>

DEFINE_FFF_GLOBALS;

@@ -23,9 +24,8 @@ static char *devpath = "/dev/nobrain";

Suite *ebg_test_suite(void);

-extern bool write_env(CONFIG_PART *part, BG_ENVDATA *env);
+extern bool write_env(CONFIG_PART *, BG_ENVDATA *);
extern EBGENVKEY bgenv_str2enum(char *);
-extern BGENV *bgenv_open_by_index(uint32_t index);

bool write_env_custom_fake(CONFIG_PART *part, BG_ENVDATA *env);

@@ -371,6 +371,77 @@ START_TEST(ebgenv_api_internal_bgenv_set)
}
END_TEST

+START_TEST(ebgenv_api_internal_uservars)
+{
+ RESET_FAKE(write_env);
+ write_env_fake.custom_fake = write_env_custom_fake;
+
+ int res;
+ BGENV *handle = bgenv_open_latest();
+
+ ck_assert(handle != NULL);
+ ck_assert(handle->data != NULL);
+
+ uint64_t type;
+ uint8_t *data;
+ /* Test a user variable using a user-defined data type
+ */
+ type = 1ULL << 36;
+ res = bgenv_set(handle, "myvar", type, "mydata", 5);
+ ck_assert_int_eq(res, 0);
+
+ for (int i = 0; i < ENV_NUM_CONFIG_PARTS; i++) {
+ data = bgenv_find_uservar((uint8_t *)&(envdata[i].userdata),
+ "myvar");
+ if (handle->data != &envdata[i]) {
+ ck_assert(data == NULL);
+ } else
+ {
+ ck_assert(data != NULL);
+ }
+ }
+
+ res = bgenv_set(handle, "myvar", USERVAR_TYPE_GLOBAL, "mydata", 5);
+ ck_assert_int_eq(write_env_fake.call_count, ENV_NUM_CONFIG_PARTS);
+ ck_assert_int_eq(res, 0);
+
+ for (int i = 0; i < ENV_NUM_CONFIG_PARTS; i++) {
+ data = bgenv_find_uservar((uint8_t *)&(envdata[i].userdata),
+ "myvar");
+ ck_assert(data != NULL);
+ }
+
+ res = bgenv_set(handle, "myvar", USERVAR_TYPE_DELETED, "mydata", 5);
+ ck_assert_int_eq(res, 0);
+
+ for (int i = 0; i < ENV_NUM_CONFIG_PARTS; i++) {
+ data = bgenv_find_uservar((uint8_t *)&(envdata[i].userdata),
+ "myvar");
+ if (handle->data != &envdata[i]) {
+ ck_assert(data != NULL);
+ } else
+ {
+ ck_assert(data == NULL);
+ }
+ }
+
+ write_env_fake.call_count = 0;
+
+ res = bgenv_set(handle, "myvar", USERVAR_TYPE_DELETED | USERVAR_TYPE_GLOBAL,
+ "mydata", 5);
+ ck_assert_int_eq(write_env_fake.call_count, ENV_NUM_CONFIG_PARTS);
+ ck_assert_int_eq(res, 0);
+
+ for (int i = 0; i < ENV_NUM_CONFIG_PARTS; i++) {
+ data = bgenv_find_uservar((uint8_t *)&(envdata[i].userdata),
+ "myvar");
+ ck_assert(data == NULL);
+ }
+
+ (void)bgenv_close(handle);
+}
+END_TEST
+
Suite *ebg_test_suite(void)
{
Suite *s;
--
2.14.2

Andreas J. Reichel

unread,
Nov 3, 2017, 8:22:08 AM11/3/17
to efibootg...@googlegroups.com, Andreas Reichel
From: Andreas Reichel <andreas.r...@siemens.com>

Implement test cases to check user variable storage with and without
USERVAR_TYPE_GLOBAL flag.

Signed-off-by: Andreas Reichel <andreas.r...@siemens.com>
---
include/env_api.h | 1 +
tools/tests/test_ebgenv_api_internal.c | 78 ++++++++++++++++++++++++++++++++--
2 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/include/env_api.h b/include/env_api.h
index 3b1ba1f..3433ac5 100644
--- a/include/env_api.h
+++ b/include/env_api.h
@@ -85,5 +85,6 @@ extern int bgenv_set(BGENV *env, char *key, uint64_t type, void *data,
uint32_t datalen);
extern int bgenv_set_uservar_global(char *key, uint64_t type,
void *data, uint32_t datalen);
+extern uint8_t *bgenv_find_uservar(uint8_t *userdata, char *key);

#endif // __ENV_API_H__
diff --git a/tools/tests/test_ebgenv_api_internal.c b/tools/tests/test_ebgenv_api_internal.c
index 25b9ff8..d826578 100644
@@ -388,7 +459,8 @@ Suite *ebg_test_suite(void)
ebgenv_api_internal_bgenv_read,
ebgenv_api_internal_bgenv_create_new,
ebgenv_api_internal_bgenv_get,
- ebgenv_api_internal_bgenv_set
+ ebgenv_api_internal_bgenv_set,
+ ebgenv_api_internal_uservars
};

tc_core = tcase_create("Core");
--
2.14.2

Jan Kiszka

unread,
Nov 3, 2017, 11:09:03 AM11/3/17
to [ext] Andreas J. Reichel, efibootg...@googlegroups.com
Style: } else {

Also below.
Jan

--
Siemens AG, Corporate Technology, CT RDA ITP SES-DE
Corporate Competence Center Embedded Linux
Reply all
Reply to author
Forward
0 new messages