horcrux/test/io-test.cpp

192 lines
6.2 KiB
C++
Raw Permalink Normal View History

2020-12-12 00:44:49 +00:00
#include "gtest/gtest.h"
2020-12-12 14:36:38 +00:00
#include "io.h"
#include "test.h"
2020-12-12 14:00:13 +00:00
2020-12-12 00:44:49 +00:00
TEST(IoTests, FsPlainInput) {
2020-12-12 23:56:18 +00:00
EXPECT_THROW(horcrux::FsPlainInput input{noexist}, std::invalid_argument);
EXPECT_THROW(horcrux::FsPlainInput input{folder}, std::invalid_argument);
EXPECT_THROW(horcrux::FsPlainInput input{empty}, std::invalid_argument);
EXPECT_NO_THROW(horcrux::FsPlainInput input{text});
EXPECT_NO_THROW(horcrux::FsPlainInput input{image});
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTests, FsPlainInputReadText) {
2020-12-12 23:56:18 +00:00
auto input = horcrux::FsPlainInput{text};
auto buf = generic_read_file(text);
EXPECT_EQ(buf, input.read());
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTests, FsPlainInputReadImg) {
2020-12-12 23:56:18 +00:00
auto input = horcrux::FsPlainInput{image};
auto buf = generic_read_file(image);
EXPECT_EQ(buf, input.read());
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTests, FsCryptoOutput) {
2020-12-12 23:56:18 +00:00
EXPECT_THROW(horcrux::FsCryptoOutput output(noexist, 1), std::invalid_argument);
EXPECT_NO_THROW(horcrux::FsCryptoOutput output(folder, 1, "test_chunk", 1024));
2020-12-12 23:56:18 +00:00
EXPECT_THROW(horcrux::FsCryptoOutput output(folder, 0), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoOutput output(empty, 1), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoOutput output(text, 1), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoOutput output(image, 1), std::invalid_argument);
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTests, FsCryptoOutputWriteImage){
2020-12-12 23:56:18 +00:00
auto ifstream = std::ifstream{image, std::ios::binary};
auto buf = generic_read_file(image);
2020-12-12 00:44:49 +00:00
2020-12-12 23:56:18 +00:00
horcrux::FsCryptoOutput out(folder, 10);
auto written = out.write(buf);
EXPECT_EQ(written, buf.size());
2020-12-12 00:44:49 +00:00
2020-12-12 23:56:18 +00:00
EXPECT_EQ(10, out.created_files.size());
delete_created_files(out);
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTests, FsCryptoOutputWriteText){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(text);
2020-12-12 00:44:49 +00:00
2020-12-12 23:56:18 +00:00
horcrux::FsCryptoOutput out(folder, 2);
auto written = out.write(buf);
EXPECT_EQ(written, buf.size());
2020-12-12 00:44:49 +00:00
2020-12-12 23:56:18 +00:00
EXPECT_EQ(2, out.created_files.size());
delete_created_files(out);
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTest, FsCryptoInput){
2020-12-12 23:56:18 +00:00
EXPECT_THROW(horcrux::FsCryptoInput output({noexist, text, image}), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoInput output({folder, text, image}), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoInput output(std::vector<std::string>{}), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoInput output({empty}), std::invalid_argument);
EXPECT_THROW(horcrux::FsCryptoInput output({empty, empty}), std::invalid_argument);
EXPECT_NO_THROW(horcrux::FsCryptoInput output({empty, empty, text}));
EXPECT_NO_THROW(horcrux::FsCryptoInput output({image, empty, text}));
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTest, FsCryptoInputImage){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
//split image using FsCryptoOutput
auto out = horcrux::FsCryptoOutput(folder, 7);
auto written = out.write(buf);
EXPECT_EQ(written, buf.size());
auto files = get_created_filenames(out);
auto in = horcrux::FsCryptoInput(files);
auto read = in.read();
EXPECT_EQ(read, buf);
files.push_back(text);
auto in2 = horcrux::FsCryptoInput(files);
read = in2.read();
2020-12-12 23:56:18 +00:00
EXPECT_NE(read, buf);
delete_created_files(out);
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTest, FsPlainOuput){
2020-12-12 23:56:18 +00:00
EXPECT_NO_THROW(horcrux::FsPlainOutput output{noexist});
EXPECT_THROW(horcrux::FsPlainOutput output{folder}, std::invalid_argument);
EXPECT_NO_THROW(horcrux::FsPlainOutput output{empty});
EXPECT_NO_THROW(horcrux::FsPlainOutput output{text});
EXPECT_NO_THROW(horcrux::FsPlainOutput output{image});
check_files_status();
2020-12-12 00:44:49 +00:00
}
TEST(IoTest, FsPlainOutputWrite){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
auto out = horcrux::FsPlainOutput(noexist);
auto written = out.write(buf);
EXPECT_EQ(written, buf.size());
auto buf2 = generic_read_file(noexist);
EXPECT_EQ(buf, buf2);
std::filesystem::remove(noexist);
check_files_status();
2020-12-12 00:44:49 +00:00
}
2020-12-12 14:00:13 +00:00
TEST(IoTest, PlainToPlain){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
auto in = horcrux::FsPlainInput(image);
auto out = horcrux::FsPlainOutput(noexist);
2020-12-12 14:00:13 +00:00
2020-12-12 23:56:18 +00:00
//Execute Plain To Plain
out.write(in.read());
2020-12-12 14:00:13 +00:00
2020-12-12 23:56:18 +00:00
//Check outcome
auto buf2 = generic_read_file(noexist);
EXPECT_EQ(buf, buf2);
std::filesystem::remove(noexist);
check_files_status();
2020-12-12 14:00:13 +00:00
}
TEST(IoTest, PlainToCrypto){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
auto in = horcrux::FsPlainInput(image);
auto out = horcrux::FsCryptoOutput(folder, 5);
//Execute Plain to Crypto
out.write(in.read());
//use FsCryptoInput to re-join the files and check the outcome
auto files = get_created_filenames(out);
auto in_test = horcrux::FsCryptoInput(files);
auto buf2 = in_test.read();
EXPECT_EQ(buf, buf2);
delete_created_files(out);
check_files_status();
2020-12-12 14:00:13 +00:00
}
TEST(IoTest, CryptoToCrypto){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
// First use FsCryptoOutput to split the files
auto out_test = horcrux::FsCryptoOutput(folder, 8);
out_test.write(buf);
//use FsCryptoInput to re-join the files
auto files = get_created_filenames(out_test);
auto in = horcrux::FsCryptoInput(files);
auto out = horcrux::FsCryptoOutput(folder, 5, "test");
//Execute Crypto to Crypto
out.write(in.read());
//use FsCryptoInput to re-join the files and check the outcome
files = get_created_filenames(out);
auto in_test = horcrux::FsCryptoInput(files);
auto buf2 = in_test.read();
EXPECT_EQ(buf, buf2);
delete_created_files(out_test);
delete_created_files(out);
check_files_status();
2020-12-12 14:00:13 +00:00
}
TEST(IoTest, CryptoToPlain){
2020-12-12 23:56:18 +00:00
auto buf = generic_read_file(image);
// First use FsCryptoOutput to split the files
auto out_test = horcrux::FsCryptoOutput(folder, 8);
out_test.write(buf);
//use FsCryptoInput to re-join the files
auto files = get_created_filenames(out_test);
auto in = horcrux::FsCryptoInput(files);
auto out = horcrux::FsPlainOutput(noexist);
//Execute Crypto to Plain
out.write(in.read());
//check the outcome
auto buf2 = generic_read_file(noexist);
EXPECT_EQ(buf, buf2);
delete_created_files(out_test);
std::filesystem::remove(noexist);
check_files_status();
2020-12-12 14:00:13 +00:00
}