162 lines
6.3 KiB
C
162 lines
6.3 KiB
C
// #define LOG_LOCAL_LEVEL 4
|
|
#include "test_littlefs_common.h"
|
|
#include "spi_flash_mmap.h"
|
|
#include "esp_flash.h"
|
|
|
|
static esp_partition_t get_test_data_static_partition(void);
|
|
static void test_setup_static(const esp_partition_t* partition);
|
|
static void test_teardown_static(const esp_partition_t* partition);
|
|
|
|
void test_setup_static(const esp_partition_t* partition)
|
|
{
|
|
const esp_vfs_littlefs_conf_t conf = {
|
|
.base_path = littlefs_base_path,
|
|
.partition_label = NULL,
|
|
.partition = partition,
|
|
.dont_mount = false,
|
|
.read_only = true,
|
|
};
|
|
|
|
TEST_ESP_OK(esp_vfs_littlefs_register(&conf));
|
|
TEST_ASSERT_TRUE(heap_caps_check_integrity_all(true));
|
|
TEST_ASSERT_TRUE(esp_littlefs_partition_mounted(partition));
|
|
printf("Test setup complete.\n");
|
|
}
|
|
|
|
void test_teardown_static(const esp_partition_t* partition)
|
|
{
|
|
TEST_ESP_OK(esp_vfs_littlefs_unregister_partition(partition));
|
|
TEST_ASSERT_TRUE(heap_caps_check_integrity_all(true));
|
|
TEST_ASSERT_FALSE(esp_littlefs_partition_mounted(partition));
|
|
printf("Test teardown complete.\n");
|
|
}
|
|
|
|
esp_partition_t get_test_data_static_partition(void)
|
|
{
|
|
/* This finds the static partition embedded in the firmware and constructs a partition struct */
|
|
extern const uint8_t partition_blob_start[] asm("_binary_testfs_bin_start");
|
|
extern const uint8_t partition_blob_end[] asm("_binary_testfs_bin_end");
|
|
|
|
return (esp_partition_t){
|
|
.flash_chip = esp_flash_default_chip,
|
|
.type = ESP_PARTITION_TYPE_DATA,
|
|
.subtype = ESP_PARTITION_SUBTYPE_DATA_FAT,
|
|
.address = spi_flash_cache2phys(partition_blob_start),
|
|
.size = ((uint32_t)partition_blob_end) - ((uint32_t)partition_blob_start),
|
|
.label = "",
|
|
.encrypted = false,
|
|
};
|
|
}
|
|
|
|
TEST_CASE("can read partition", "[littlefs_static]")
|
|
{
|
|
const esp_partition_t partition = get_test_data_static_partition();
|
|
test_setup_static(&partition);
|
|
size_t total = 0, used = 0;
|
|
TEST_ESP_OK(esp_littlefs_partition_info(&partition, &total, &used));
|
|
printf("total: %d, used: %d\n", total, used);
|
|
TEST_ASSERT_EQUAL(20480, used); // The test FS has 5 used blocks of 4K
|
|
test_teardown_static(&partition);
|
|
}
|
|
|
|
TEST_CASE("can read file", "[littlefs_static]")
|
|
{
|
|
const esp_partition_t partition = get_test_data_static_partition();
|
|
test_setup_static(&partition);
|
|
|
|
test_littlefs_read_file_with_content(littlefs_base_path "/test1.txt", "test1");
|
|
test_littlefs_read_file_with_content(littlefs_base_path "/test2.txt", "test2");
|
|
test_littlefs_read_file_with_content(littlefs_base_path "/pangram.txt", "The quick brown fox jumps over the lazy dog");
|
|
test_littlefs_read_file_with_content(
|
|
littlefs_base_path "/test_folder/lorem_ipsum.txt",
|
|
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet "
|
|
"dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit "
|
|
"lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit "
|
|
"esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio "
|
|
"dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber "
|
|
"tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. "
|
|
"Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes "
|
|
"demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui "
|
|
"sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, "
|
|
"anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc "
|
|
"nobis videntur parum clari, fiant sollemnes in futurum.");
|
|
|
|
test_teardown_static(&partition);
|
|
}
|
|
|
|
TEST_CASE("can't create file", "[littlefs_static]")
|
|
{
|
|
const esp_partition_t partition = get_test_data_static_partition();
|
|
test_setup_static(&partition);
|
|
|
|
FILE* f = fopen(littlefs_base_path "/new_file.txt", "wb");
|
|
TEST_ASSERT_NULL(f);
|
|
test_teardown_static(&partition);
|
|
}
|
|
|
|
TEST_CASE("can't delete file", "[littlefs_static]")
|
|
{
|
|
const esp_partition_t partition = get_test_data_static_partition();
|
|
test_setup_static(&partition);
|
|
|
|
TEST_ASSERT_EQUAL(unlink(littlefs_base_path "/test1.txt"), -1);
|
|
test_littlefs_read_file_with_content(littlefs_base_path "/test1.txt", "test1");
|
|
|
|
test_teardown_static(&partition);
|
|
}
|
|
|
|
TEST_CASE("can't write to file", "[littlefs_static]")
|
|
{
|
|
const esp_partition_t partition = get_test_data_static_partition();
|
|
test_setup_static(&partition);
|
|
|
|
FILE* f = fopen(littlefs_base_path "/test1.txt", "wb");
|
|
TEST_ASSERT_NULL(f);
|
|
test_littlefs_read_file_with_content(littlefs_base_path "/test1.txt", "test1");
|
|
|
|
test_teardown_static(&partition);
|
|
}
|
|
|
|
TEST_CASE("grow filesystem", "[littlefs]")
|
|
{
|
|
esp_partition_t partition;
|
|
const esp_partition_t *partition_ro = esp_partition_find_first(
|
|
ESP_PARTITION_TYPE_DATA,
|
|
ESP_PARTITION_SUBTYPE_ANY,
|
|
littlefs_test_partition_label
|
|
);
|
|
|
|
esp_vfs_littlefs_conf_t conf = {
|
|
.base_path = littlefs_base_path,
|
|
.partition = (const esp_partition_t *) &partition,
|
|
};
|
|
|
|
size_t shrink_bytes;
|
|
|
|
/* Format a smaller partition */
|
|
{
|
|
memcpy(&partition, partition_ro, sizeof(esp_partition_t));
|
|
// Shrink the partition by 2 blocks
|
|
partition.size -= 8192;
|
|
TEST_ESP_OK(esp_littlefs_format_partition(&partition));
|
|
partition.size += 8192;
|
|
}
|
|
|
|
/* Mount, ensure that it does NOT grow */
|
|
{
|
|
TEST_ESP_OK(esp_vfs_littlefs_register(&conf));
|
|
TEST_ESP_OK(esp_littlefs_partition_info(&partition, &shrink_bytes, NULL));
|
|
TEST_ESP_OK(esp_vfs_littlefs_unregister_partition(&partition));
|
|
TEST_ASSERT_EQUAL(partition.size - 8192, shrink_bytes);
|
|
}
|
|
|
|
/* Mount, ensure that it DOES grow */
|
|
{
|
|
size_t grow_bytes;
|
|
conf.grow_on_mount = true;
|
|
TEST_ESP_OK(esp_vfs_littlefs_register(&conf));
|
|
TEST_ESP_OK(esp_littlefs_partition_info(&partition, &grow_bytes, NULL));
|
|
TEST_ESP_OK(esp_vfs_littlefs_unregister_partition(&partition));
|
|
TEST_ASSERT_EQUAL(shrink_bytes + 8192, grow_bytes);
|
|
}
|
|
}
|