mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
* Update spiffs_api.cpp Fixes a bug where un-prefixed files are irretrievable with openDir(""). Described: https://github.com/esp8266/Arduino/issues/1818. * Update FS test cases
187 lines
5.1 KiB
C++
187 lines
5.1 KiB
C++
/*
|
|
test_fs.cpp - host side file system tests
|
|
Copyright © 2016 Ivan Grokhotkov
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
*/
|
|
|
|
#include <catch.hpp>
|
|
#include <map>
|
|
#include <FS.h>
|
|
#include "../common/spiffs_mock.h"
|
|
#include <spiffs/spiffs.h>
|
|
|
|
static void createFile (const char* name, const char* content)
|
|
{
|
|
auto f = SPIFFS.open(name, "w");
|
|
REQUIRE(f);
|
|
if (content) {
|
|
f.print(content);
|
|
}
|
|
}
|
|
|
|
static String readFile (const char* name)
|
|
{
|
|
auto f = SPIFFS.open(name, "r");
|
|
if (f) {
|
|
return f.readString();
|
|
}
|
|
return String();
|
|
}
|
|
|
|
static std::set<String> listDir (const char* path)
|
|
{
|
|
std::set<String> result;
|
|
Dir dir = SPIFFS.openDir(path);
|
|
while (dir.next()) {
|
|
REQUIRE(result.find(dir.fileName()) == std::end(result));
|
|
result.insert(dir.fileName());
|
|
}
|
|
return result;
|
|
}
|
|
|
|
TEST_CASE("FS can begin","[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
}
|
|
|
|
TEST_CASE("FS can't begin with zero size","[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(0, 8, 512);
|
|
REQUIRE_FALSE(SPIFFS.begin());
|
|
}
|
|
|
|
TEST_CASE("Before begin is called, open will fail","[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE_FALSE(SPIFFS.open("/foo", "w"));
|
|
}
|
|
|
|
TEST_CASE("FS can create file","[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("/test", "");
|
|
REQUIRE(SPIFFS.exists("/test"));
|
|
}
|
|
|
|
TEST_CASE("Files can be written and appended to","[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
{
|
|
File f = SPIFFS.open("config1.txt", "w");
|
|
REQUIRE(f);
|
|
f.println("file 1");
|
|
}
|
|
{
|
|
File f = SPIFFS.open("config1.txt", "a");
|
|
REQUIRE(f);
|
|
f.println("file 1 again");
|
|
}
|
|
{
|
|
File f = SPIFFS.open("config1.txt", "r");
|
|
REQUIRE(f);
|
|
char buf[128];
|
|
size_t len = f.read((uint8_t*)buf, sizeof(buf));
|
|
buf[len] = 0;
|
|
REQUIRE(strcmp(buf, "file 1\r\nfile 1 again\r\n") == 0);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Files persist after reset", "[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("config1.txt", "file 1");
|
|
|
|
SPIFFS_MOCK_RESET();
|
|
REQUIRE(SPIFFS.begin());
|
|
REQUIRE(readFile("config1.txt") == "file 1");
|
|
}
|
|
|
|
|
|
TEST_CASE("Filesystem is empty after format", "[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.format());
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("/1", "first");
|
|
createFile("/2", "second");
|
|
REQUIRE(SPIFFS.format());
|
|
Dir root = SPIFFS.openDir("/");
|
|
size_t count = 0;
|
|
while (root.next()) {
|
|
++count;
|
|
}
|
|
REQUIRE(count == 0);
|
|
}
|
|
|
|
TEST_CASE("Dir lists all files", "[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("/empty", "");
|
|
createFile("/not_empty", "some text");
|
|
createFile("/another", "more text");
|
|
createFile("/subdir/empty", "");
|
|
createFile("/subdir/not_empty", "text again");
|
|
auto files = listDir("/");
|
|
REQUIRE(files.size() == 5);
|
|
REQUIRE(files.find("/empty") != std::end(files));
|
|
REQUIRE(files.find("/not_empty") != std::end(files));
|
|
REQUIRE(files.find("/another") != std::end(files));
|
|
REQUIRE(files.find("/subdir/empty") != std::end(files));
|
|
REQUIRE(files.find("/subdir/not_empty") != std::end(files));
|
|
}
|
|
|
|
TEST_CASE("File names which are too long are rejected", "[fs]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
const char* emptyName = "";
|
|
const char* longName_31 = "/234567890123456789012345678901";
|
|
const char* longName_32 = "/2345678901234567890123456789012";
|
|
REQUIRE_FALSE(SPIFFS.open(emptyName, "w"));
|
|
REQUIRE_FALSE(SPIFFS.open(emptyName, "r"));
|
|
REQUIRE_FALSE(SPIFFS.exists(emptyName));
|
|
REQUIRE_FALSE(SPIFFS.open(longName_32, "w"));
|
|
REQUIRE_FALSE(SPIFFS.open(longName_32, "r"));
|
|
REQUIRE_FALSE(SPIFFS.exists(longName_32));
|
|
REQUIRE(SPIFFS.open(longName_31, "w"));
|
|
REQUIRE(SPIFFS.open(longName_31, "r"));
|
|
REQUIRE(SPIFFS.exists(longName_31));
|
|
}
|
|
|
|
TEST_CASE("#1685 Duplicate files", "[fs][bugreport]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("/config", "some text");
|
|
createFile("/data", "");
|
|
readFile("/config");
|
|
createFile("/data", "more text");
|
|
listDir("/");
|
|
}
|
|
|
|
TEST_CASE("#1819 Can list all files with openDir(\"\")", "[fs][bugreport]")
|
|
{
|
|
SPIFFS_MOCK_DECLARE(64, 8, 512);
|
|
REQUIRE(SPIFFS.begin());
|
|
createFile("/file1", "some text");
|
|
createFile("/file2", "other text");
|
|
createFile("file3", "more text");
|
|
createFile("sorta-dir/file4", "\n");
|
|
auto files = listDir("");
|
|
REQUIRE(files.size() == 4);
|
|
}
|