Skip to content

Commit

Permalink
Add test for detection of file change
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristianFeldmann committed Dec 3, 2024
1 parent eb15c5d commit 0a3c5fe
Showing 1 changed file with 45 additions and 13 deletions.
58 changes: 45 additions & 13 deletions YUViewUnitTest/dataSource/DataSourceLocalFileTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
#include <TemporaryFile.h>
#include <dataSource/DataSourceLocalFile.h>

#include <thread>

namespace datasource::test
{

Expand All @@ -47,12 +49,13 @@ TEST(DataSourceLocalFileTest, OpenFileThatDoesNotExist)
DataSourceLocalFile file("/path/to/file/that/does/not/exist");
EXPECT_FALSE(file.isOk());
EXPECT_FALSE(file);
EXPECT_TRUE(file.filePath().empty());
EXPECT_TRUE(file.getFilePath().empty());
EXPECT_EQ(file.getInfoList().size(), 0u);
EXPECT_FALSE(file.atEnd());
EXPECT_EQ(file.position(), 0);
EXPECT_FALSE(file.fileSize().has_value());
EXPECT_EQ(file.getPosition(), 0);
EXPECT_FALSE(file.getFileSize().has_value());
EXPECT_FALSE(file.seek(252));
EXPECT_FALSE(file.wasSourceModified());

ByteVector dummyVector;
EXPECT_EQ(file.read(dummyVector, 378), 0);
Expand All @@ -66,7 +69,7 @@ TEST(DataSourceLocalFileTest, OpenFileThatExists_TestRetrievalOfFileInfo)
DataSourceLocalFile file(tempFile.getFilePath());
EXPECT_TRUE(file);

EXPECT_EQ(file.fileSize().value(), 8);
EXPECT_EQ(file.getFileSize().value(), 8);

const auto debugTest = file.getInfoList();
EXPECT_THAT(file.getInfoList(),
Expand All @@ -84,21 +87,24 @@ TEST(DataSourceLocalFileTest, OpenFileThatExists_TestReadingOfData)
EXPECT_TRUE(file.isOk());
EXPECT_TRUE(file);

EXPECT_EQ(file.filePath(), tempFile.getFilePath());
EXPECT_EQ(file.getFilePath(), tempFile.getFilePath());
EXPECT_FALSE(file.atEnd());
EXPECT_EQ(file.position(), 0);
EXPECT_EQ(file.getPosition(), 0);
EXPECT_FALSE(file.wasSourceModified());

ByteVector buffer;
EXPECT_EQ(file.read(buffer, 5), 5);
EXPECT_TRUE(file);
EXPECT_THAT(buffer, ElementsAre('t', 'e', 's', 't', 'd'));
EXPECT_EQ(file.position(), 5);
EXPECT_EQ(file.getPosition(), 5);
EXPECT_FALSE(file.wasSourceModified());

EXPECT_EQ(file.read(buffer, 36282), 3);
EXPECT_TRUE(file);
EXPECT_THAT(buffer, ElementsAre('a', 't', 'a'));
EXPECT_EQ(file.position(), 8);
EXPECT_EQ(file.getPosition(), 8);
EXPECT_TRUE(file.atEnd());
EXPECT_FALSE(file.wasSourceModified());
}

TEST(DataSourceLocalFileTest, OpenFileThatExists_TestSeekingBeforeReading)
Expand All @@ -110,14 +116,14 @@ TEST(DataSourceLocalFileTest, OpenFileThatExists_TestSeekingBeforeReading)

EXPECT_TRUE(file.seek(4));
EXPECT_TRUE(file);
EXPECT_EQ(file.position(), 4);
EXPECT_EQ(file.getPosition(), 4);
EXPECT_FALSE(file.atEnd());

ByteVector buffer;
EXPECT_EQ(file.read(buffer, 100), 4);
EXPECT_TRUE(file);
EXPECT_THAT(buffer, ElementsAre('d', 'a', 't', 'a'));
EXPECT_EQ(file.position(), 8);
EXPECT_EQ(file.getPosition(), 8);
EXPECT_TRUE(file.atEnd());
}

Expand All @@ -132,19 +138,45 @@ TEST(DataSourceLocalFileTest, OpenFileThatExists_TestSeekingFromEOF)
EXPECT_EQ(file.read(buffer, 100), 8);
EXPECT_THAT(buffer, ElementsAre('t', 'e', 's', 't', 'd', 'a', 't', 'a'));
EXPECT_TRUE(file.atEnd());
EXPECT_EQ(file.position(), 8);
EXPECT_EQ(file.getPosition(), 8);
EXPECT_TRUE(file);

EXPECT_TRUE(file.seek(2));
EXPECT_TRUE(file);
EXPECT_EQ(file.position(), 2);
EXPECT_EQ(file.getPosition(), 2);
EXPECT_FALSE(file.atEnd());

EXPECT_EQ(file.read(buffer, 3), 3);
EXPECT_TRUE(file);
EXPECT_THAT(buffer, ElementsAre('s', 't', 'd'));
EXPECT_EQ(file.position(), 5);
EXPECT_EQ(file.getPosition(), 5);
EXPECT_FALSE(file.atEnd());
}

TEST(DataSourceLocalFileTest, ModifyOpenedFileExternally_ShouldBeDetected)
{
yuviewTest::TemporaryFile tempFile(DUMMY_DATA);
ByteVector buffer;

DataSourceLocalFile file(tempFile.getFilePath());

EXPECT_TRUE(file);
EXPECT_FALSE(file.wasSourceModified());
EXPECT_EQ(file.read(buffer, 4), 4);
EXPECT_THAT(buffer, ElementsAre('t', 'e', 's', 't'));

std::ofstream tempFileWriter(tempFile.getFilePath(), std::iostream::out | std::iostream::binary);
tempFileWriter << 'm' << 'o' << 'd' << 'i' << 'f' << 'i' << 'e' << 'd';
tempFileWriter.close();

std::this_thread::sleep_for(std::chrono::seconds(1));

EXPECT_TRUE(file.wasSourceModified());

file.reloadAndResetDataSource();

EXPECT_EQ(file.read(buffer, 100), 8);
EXPECT_THAT(buffer, ElementsAre('m', 'o', 'd', 'i', 'f', 'i', 'e', 'd'));
}

} // namespace datasource::test

0 comments on commit 0a3c5fe

Please sign in to comment.