467e9d1463
* Update TEST_ASSERT to do nothing if condition is true The TEST_ASSERT should not return if the condition is true, because: - it prevents the usage of multiple TEST_ASSERT in a single test case, - that behavior differs from how the assert in the standard library works, and thus may give unexpected results. Make the TEST_ASSERT to print an error message (with an formatted optional user part) when it fails to make debugging easier. * Fix some bugs in TestProvider, add unit tests Use pointer-to-vector in TestProvider so writes can be tested, too. * Add test EncodeDecode16, fix some encode16 bugs The function mbedtls_mpi_write_string needs a bit longer buffer than the resulting string actually will be. Known bug: mbedtls_mpi_read_binary ingores initial null bytes * Add test EncodeDecode64, fix some bugs The functions mbedtls_base64_encode and mbedtls_base64_decode needs a bit longer buffer than the resulting string actually will be. * Remove check for empty data from TestProvider It can be valid to get the hash of empty string. * Add tests for CRC calculation Two type of thests: - compare the result of the CRC calculation to a known to be good results, - generate random data as message, calculate of it's CRC and append that to the message, the CRC of this new data should be 0. * Add test for hash algorithms * Add includes in tests * Remove the use of C++20 ranges It seems that Apple Clang does not support range-based constrained algorithms at this time. * Replace encode16 implementation To encode the zero bytes at the begining of the input vector, too.
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
#include <hex/providers/provider.hpp>
|
|
|
|
#include <hex/helpers/file.hpp>
|
|
#include <hex/helpers/logger.hpp>
|
|
#include <stdexcept>
|
|
|
|
namespace hex::test {
|
|
using namespace hex::prv;
|
|
|
|
class TestProvider : public prv::Provider {
|
|
public:
|
|
TestProvider(std::vector<u8>* data) : Provider(){
|
|
this->setData(data);
|
|
}
|
|
~TestProvider() override = default;
|
|
|
|
[[nodiscard]] bool isAvailable() const override { return true; }
|
|
[[nodiscard]] bool isReadable() const override { return true; }
|
|
[[nodiscard]] bool isWritable() const override { return false; }
|
|
[[nodiscard]] bool isResizable() const override { return false; }
|
|
[[nodiscard]] bool isSavable() const override { return false; }
|
|
|
|
void setData(std::vector<u8>* data) {
|
|
this->m_data = data;
|
|
}
|
|
|
|
[[nodiscard]] std::string getName() const override {
|
|
return "";
|
|
}
|
|
|
|
[[nodiscard]] std::vector<std::pair<std::string, std::string>> getDataInformation() const override {
|
|
return { };
|
|
}
|
|
|
|
void readRaw(u64 offset, void *buffer, size_t size) override {
|
|
if (offset + size > this->m_data->size()) return;
|
|
|
|
std::memcpy(buffer, m_data->data() + offset, size);
|
|
}
|
|
|
|
void writeRaw(u64 offset, const void *buffer, size_t size) override {
|
|
if (offset + size > this->m_data->size()) return;
|
|
|
|
std::memcpy(m_data->data() + offset, buffer, size);
|
|
}
|
|
|
|
size_t getActualSize() const override {
|
|
return this->m_data->size();
|
|
}
|
|
|
|
private:
|
|
std::vector<u8>* m_data;
|
|
};
|
|
|
|
}
|