Files
ESP8266lib/ext/sd/tests/TestSeek.cpp

56 lines
1.2 KiB
C++

#include <gtest/gtest.h>
#include "Helper.h"
#include "../AccessHelper.h"
#include "../fat32/FS.h"
TEST (TestSeek, seek1) {
using BlockDev = AccessHelper<TestDevice>;
using FS = FAT32::FS<BlockDev>;
size_t size = 32*1024*1024;
TestDevice dev(size);
BlockDev bDev(dev);
FS fs(bDev, 0);
ASSERT_FALSE(fs.isValid()); // filesystem must not be considered valid, header contains only zeros
fs.setup(size, true); // initialize the filesystem
ASSERT_TRUE(fs.isValid()); // must be considered valid now
auto testData = [] (const uint32_t pos) {
return (uint8_t) (pos * 21 + 13);
};
// create a file
FS::File f1 = fs.getOrCreateFile("test.txt");
static constexpr uint32_t testSize = 16*1024;
uint8_t d1[testSize];
for (int i = 0; i < testSize; ++i) {
d1[i] = testData(i);
}
ASSERT_EQ(testSize, f1.write(testSize, d1));
// re-open the file
FS::File f2 = fs.getOrCreateFile("test.txt");
for (int i = 0; i < 1024; ++i) {
uint8_t tmp = 0;
f2.read(1, &tmp);
ASSERT_EQ(testData(i), tmp);
}
for (int i = 0; i < 100; ++i) {
uint32_t pos = rand() % testSize;
f2.seekTo(pos);
uint8_t tmp = 0;
f2.read(1, &tmp);
uint8_t expected = testData(pos);
ASSERT_EQ(expected, tmp);
}
}