blob: 289deeb8161ab12f8085201bd8e3c5886246b33d [file] [log] [blame]
/*
* Copyright (c) 2019 Peter Bigot Consulting, LLC
*
* SPDX-License-Identifier: Apache-2.0
*/
/* Tests of functions in testfs_util */
#include <string.h>
#include <zephyr/ztest.h>
#include "testfs_tests.h"
#include "testfs_util.h"
#define MNT "/mnt"
#define ELT1 "a"
#define ELT2 "b"
static struct testfs_path path;
static const struct fs_mount_t mnt = {
.mnt_point = MNT,
};
static inline struct testfs_path *reset_path()
{
testfs_path_init(&path, &mnt, TESTFS_PATH_END);
return &path;
}
ZTEST(littlefs, test_util_path_init_base)
{
zassert_equal(testfs_path_init(&path, NULL, TESTFS_PATH_END),
path.path,
"bad root init return");
zassert_equal(strcmp(path.path, "/"), 0, "bad root init path");
zassert_equal(testfs_path_init(&path, &mnt, TESTFS_PATH_END),
path.path,
"bad mnt init return");
zassert_equal(strcmp(path.path, mnt.mnt_point), 0, "bad mnt init path");
if (IS_ENABLED(CONFIG_DEBUG)) {
struct fs_mount_t invalid = {
.mnt_point = "relative",
};
/* Apparently no way to verify this without panic. */
testfs_path_init(&path, &invalid, TESTFS_PATH_END);
}
}
ZTEST(littlefs, test_util_path_init_overrun)
{
char overrun[TESTFS_PATH_MAX + 2] = "/";
size_t overrun_max = sizeof(overrun) - 1;
size_t path_max = sizeof(path.path) - 1;
struct fs_mount_t overrun_mnt = {
.mnt_point = overrun,
};
zassert_true(path_max < overrun_max,
"path length requirements unmet");
memset(overrun + 1, 'A', overrun_max - 1);
zassert_equal(testfs_path_init(&path, &overrun_mnt, TESTFS_PATH_END),
path.path,
"bad overrun init return");
zassert_true(strcmp(path.path, overrun) < 0,
"bad overrun init");
zassert_equal(strncmp(path.path, overrun, path_max),
0,
"bad overrun path");
zassert_equal(path.path[path_max], '\0',
"missing overrun EOS");
}
ZTEST(littlefs, test_util_path_init_extended)
{
zassert_equal(strcmp(testfs_path_init(&path, &mnt,
ELT1,
TESTFS_PATH_END),
MNT "/" ELT1),
0,
"bad mnt init elt1");
zassert_equal(strcmp(testfs_path_init(&path, &mnt,
ELT1,
ELT2,
TESTFS_PATH_END),
MNT "/" ELT1 "/" ELT2),
0,
"bad mnt init elt1 elt2");
}
ZTEST(littlefs, test_util_path_extend)
{
zassert_equal(strcmp(testfs_path_extend(reset_path(),
TESTFS_PATH_END),
MNT),
0,
"empty extend failed");
zassert_equal(strcmp(testfs_path_extend(reset_path(),
ELT2,
TESTFS_PATH_END),
MNT "/" ELT2),
0,
"elt extend failed");
zassert_equal(strcmp(testfs_path_extend(reset_path(),
ELT1,
ELT2,
TESTFS_PATH_END),
MNT "/" ELT1 "/" ELT2),
0,
"elt1 elt2 extend failed");
}
ZTEST(littlefs, test_util_path_extend_up)
{
zassert_equal(strcmp(testfs_path_extend(reset_path(),
ELT2,
"..",
ELT1,
TESTFS_PATH_END),
MNT "/" ELT1),
0,
"elt elt2, up, elt1 failed");
zassert_equal(strcmp(testfs_path_extend(reset_path(),
"..",
TESTFS_PATH_END),
"/"),
0,
"up strip mnt failed");
zassert_equal(strcmp(testfs_path_extend(reset_path(),
"..",
"..",
TESTFS_PATH_END),
"/"),
0,
"up from root failed");
}
ZTEST(littlefs, test_util_path_extend_overrun)
{
char long_elt[TESTFS_PATH_MAX];
memset(long_elt, 'a', sizeof(long_elt) - 1);
long_elt[sizeof(long_elt) - 1] = '\0';
zassert_equal(strcmp(testfs_path_extend(reset_path(),
long_elt,
ELT1,
TESTFS_PATH_END),
MNT),
0,
"stop at overrun failed");
}