56 lines
1.2 KiB
C++
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);
|
|
}
|
|
|
|
}
|