diff options
| author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-05 19:06:42 +0200 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-05 16:01:34 +0200 | 
| commit | c9a8adc15f9de110771156fdc85fb98533648a53 (patch) | |
| tree | cdd6300b1c69a002628a76c4bac45ac6664111d9 /lib/sqfs/test | |
| parent | 57ca46cdd74fd1004a3b0476c136e1f26fcf002d (diff) | |
Move dir_entry_xattr_t from libio to libsquashfs
The structure and functions are renamed to sqfs_xattr_* instead,
an additional helper is added to accept an encoded xattr.
Documentation and unit test are added as well.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/test')
| -rw-r--r-- | lib/sqfs/test/xattr.c | 111 | 
1 files changed, 111 insertions, 0 deletions
| diff --git a/lib/sqfs/test/xattr.c b/lib/sqfs/test/xattr.c new file mode 100644 index 0000000..a5222f4 --- /dev/null +++ b/lib/sqfs/test/xattr.c @@ -0,0 +1,111 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * xattr.c + * + * Copyright (C) 2023 David Oberhollenzer <goliath@infraroot.at> + */ +#include "config.h" +#include "compat.h" +#include "util/test.h" + +#include "sqfs/xattr.h" +#include "sqfs/error.h" + +int main(int argc, char **argv) +{ +	sqfs_xattr_t *ent, *ent2, *list; +	const char *str; +	int id, ret; +	(void)argc; (void)argv; + +	/* prefix API */ +	id = sqfs_get_xattr_prefix_id("user.mime_type"); +	TEST_EQUAL_I(id, SQFS_XATTR_USER); + +	str = sqfs_get_xattr_prefix(id); +	TEST_STR_EQUAL(str, "user."); + +	id = sqfs_get_xattr_prefix_id("security.selinux"); +	TEST_EQUAL_I(id, SQFS_XATTR_SECURITY); + +	str = sqfs_get_xattr_prefix(id); +	TEST_STR_EQUAL(str, "security."); + +	id = sqfs_get_xattr_prefix_id("trusted.bla"); +	TEST_EQUAL_I(id, SQFS_XATTR_TRUSTED); + +	str = sqfs_get_xattr_prefix(id); +	TEST_STR_EQUAL(str, "trusted."); + +	id = sqfs_get_xattr_prefix_id("system.acl"); +	TEST_EQUAL_I(id, SQFS_ERROR_UNSUPPORTED); + +	str = sqfs_get_xattr_prefix(id); +	TEST_NULL(str); + +	/* combined entry API */ +	ent = sqfs_xattr_create("foo.bar", (const sqfs_u8 *)"Hello, World!", 5); +	TEST_NOT_NULL(ent); +	TEST_EQUAL_UI(ent->value_len, 5); +	TEST_STR_EQUAL(ent->key, "foo.bar"); +	TEST_STR_EQUAL((const char *)ent->value, "Hello"); +	sqfs_xattr_list_free(ent); + +	/* with prefix */ +	ret = sqfs_xattr_create_prefixed(&ent, SQFS_XATTR_SECURITY, "selinux", +					 (const sqfs_u8 *)"Hello, World!", 5); +	TEST_EQUAL_I(ret, 0); +	TEST_NOT_NULL(ent); +	TEST_EQUAL_UI(ent->value_len, 5); +	TEST_STR_EQUAL(ent->key, "security.selinux"); +	TEST_STR_EQUAL((const char *)ent->value, "Hello"); +	sqfs_xattr_list_free(ent); + +	ret = sqfs_xattr_create_prefixed(&ent, 42, "selinux", +					 (const sqfs_u8 *)"Hello, World!", 5); +	TEST_EQUAL_I(ret, SQFS_ERROR_UNSUPPORTED); +	TEST_NULL(ent); + +	/* list copy */ +	ent = sqfs_xattr_create("foo.bar", (const sqfs_u8 *)"Hello, World!", 5); +	TEST_NOT_NULL(ent); + +	ent2 = sqfs_xattr_create("bla.blu", (const sqfs_u8 *)"test", 4); +	TEST_NOT_NULL(ent2); + +	list = sqfs_xattr_list_copy(NULL); +	TEST_NULL(list); + +	list = sqfs_xattr_list_copy(ent); +	TEST_NOT_NULL(list); +	TEST_ASSERT(list != ent); +	TEST_STR_EQUAL(list->key, ent->key); +	TEST_STR_EQUAL((const char *)list->value, (const char *)ent->value); +	TEST_EQUAL_UI(list->value_len, ent->value_len); +	sqfs_xattr_list_free(list); + +	ent->next = ent2; +	ent2->next = NULL; + +	list = sqfs_xattr_list_copy(ent); +	TEST_NOT_NULL(list); +	TEST_ASSERT(list != ent && list != ent2); +	TEST_STR_EQUAL(list->key, ent->key); +	TEST_STR_EQUAL((const char *)list->value, (const char *)ent->value); +	TEST_EQUAL_UI(list->value_len, ent->value_len); + +	TEST_NOT_NULL(list->next); +	TEST_ASSERT(list->next != ent && list->next != ent2); +	TEST_STR_EQUAL(list->next->key, ent2->key); +	TEST_STR_EQUAL((const char *)list->next->value, +		       (const char *)ent2->value); +	TEST_EQUAL_UI(list->next->value_len, ent2->value_len); +	sqfs_xattr_list_free(list); + +	ent->next = NULL; +	ent2->next = NULL; +	sqfs_xattr_list_free(ent); +	sqfs_xattr_list_free(ent2); + +	return EXIT_SUCCESS; +} | 
