1 #include "../caseinsensitivecomparer.h" 3 #include <c++utilities/conversion/stringbuilder.h> 4 #include <c++utilities/io/catchiofailure.h> 5 #include <c++utilities/tests/testutils.h> 7 #include <cppunit/TestFixture.h> 8 #include <cppunit/extensions/HelperMacros.h> 10 #include <openssl/sha.h> 35 for (
const char *i1 = checksum, *i2 = other.
checksum, *end = checksum +
sizeof(checksum); i1 != end; ++i1, ++i2) {
36 if (CaseInsensitiveCharComparer::toLower(static_cast<unsigned char>(*i1))
37 != CaseInsensitiveCharComparer::toLower(static_cast<unsigned char>(*i2))) {
57 void verifyChecksum()
const;
59 {
"matroska_wave1/logo3_256x256.png", {
"810b9172607e281d9a3969018c7d6521de240cc3688fecf598444e666aa6b4dc" } },
60 {
"matroska_wave1/test1.mkv", {
"0996a309ff2095910b9d30d5253b044d637154297ddf7d0bda7f3adedf5addc1" } },
61 {
"matroska_wave1/test2.mkv", {
"5b53d306e56f9bda6e80c3fbd9f3ccd20cc885770449d1fc0b5bec35c71d61e2" } },
62 {
"matroska_wave1/test3.mkv", {
"1722b0d93a6ef1a14dd513bd031cd5901c233b45aa3e3c87be0b0d7348d7d1b5" } },
63 {
"matroska_wave1/test4.mkv", {
"43df750a2a01a37949791b717051b41522081a266b71d113be4b713063843699" } },
64 {
"matroska_wave1/test5.mkv", {
"92acdc33bb0b5d7a4d9b0d6ca792230a78c786a30179dc9999cee41c28642842" } },
65 {
"matroska_wave1/test6.mkv", {
"7cad84b434116e023d340dd584ac833b93f03fb1bd7ea2727fa45de50af0abb9" } },
66 {
"matroska_wave1/test7.mkv", {
"95b21c92ad5a4fe00914ff5009e2a64f12fd4c5fb9cb1c3c888ab50bf0ffe483" } },
67 {
"matroska_wave1/test8.mkv", {
"9dddcd1550b814dae44d62e2b9f27c0eca31d5e190df2220cbf7492e3d6c63da" } },
68 {
"mtx-test-data/mkv/handbrake-chapters-2.mkv", {
"eccc55f3b59a77086b3ffb914525d312c7886eae34e3933352dea2f6f6a1974c" } },
69 {
"mtx-test-data/mkv/tags.mkv", {
"4330019afc3d846600c1ded38158fcac081297f4e56c749251c236f4871e0287" } },
70 {
"mkv/nested-tags.xml", {
"85cfcc94920f114e52fd1aa3df24706cd2710626e065a2c8c55dd209ec8dc8ce" } },
71 {
"mp4/test1.m4a", {
"4f16e0a22525bd13ba859431406d7f5991e0b4f155c51e10e5f32b0c97034b36" } },
72 {
"mtx-test-data/aac/he-aacv2-ps.m4a", {
"be54be0ae45b0184583ced8a84a881a1652a449feb7f6a917e11f60efabb68ac" } },
73 {
"mtx-test-data/alac/othertest-itunes.m4a", {
"5e9c64cde00902211533fbe38aaa67ef5f79a945e1d717951b78b4bbf9ff84e8" } },
74 {
"mtx-test-data/mp3/id3-tag-and-xing-header.mp3", {
"4a9187b05dc74d32e5a3de53494fde9db8c6c25d46082f86de6f424ad28daacf" } },
75 {
"mtx-test-data/mp4/10-DanseMacabreOp.40.m4a", {
"30c915d5656de049d66fd70b0966a33faf038af42365a2bb973e5c2fc0ba2038" } },
76 {
"mtx-test-data/mp4/1080p-DTS-HD-7.1.mp4", {
"fbf929bf8300fc6e53c5c5b7fde4ed2a427fef2d4fd093511c672083039abbf1" } },
77 {
"mtx-test-data/mp4/dash/dragon-age-inquisition-H1LkM6IVlm4-video.mp4", {
"864891f4510f3fa9c49c19e671171cec08ceb331362cf7161419b957be090d47" } },
78 {
"mtx-test-data/ogg/qt4dance_medium.ogg", {
"0b5429da9713be171c6ae0da69621261e8d5ddc9db3da872e5ade1a1c883decd" } },
79 {
"mtx-test-data/opus/v-opus.ogg", {
"e12adece4dbcccf2471b61c3ebd7c6576dee351d85809ab6f01d6f324d65b417" } },
94 file.exceptions(ios_base::eofbit | ios_base::failbit | ios_base::badbit);
95 file.open(testFilePath(path), ios_base::in | ios_base::binary);
97 char readBuffer[4096];
100 file.read(readBuffer,
sizeof(readBuffer));
101 SHA256_Update(&sha256, readBuffer, static_cast<size_t>(file.gcount()));
105 if (file.eof() && !file.bad()) {
106 SHA256_Update(&sha256, readBuffer, static_cast<size_t>(file.gcount()));
114 unsigned char hash[SHA256_DIGEST_LENGTH];
115 SHA256_Final(hash, &sha256);
119 char *hexStringIterator = hexString.
checksum;
120 for (
unsigned char hashNumber : hash) {
121 const string digits = numberToString(hashNumber, 16);
122 *(hexStringIterator++) = digits.size() < 2 ?
'0' : digits.front();
123 *(hexStringIterator++) = digits.back();
125 *hexStringIterator =
'\0';
134 CPPUNIT_ASSERT_EQUAL_MESSAGE(argsToString(
"integrity of testfile \"", path,
'\"'), expectedSha256sum, computeSha256Sum());
143 CPPUNIT_TEST(verifyChecksums);
144 CPPUNIT_TEST_SUITE_END();
147 void verifyChecksums();
152 void TestFileCheck::verifyChecksums()
155 testFile.verifyChecksum();
CPPUNIT_TEST_SUITE_REGISTRATION(TestFileCheck)
Sha256Checksum expectedSha256sum
The TestFileCheck class verifies integrity of all testfiles used in the testsuite of tagparser or tag...
constexpr bool operator==(byte lhs, FlacMetaDataBlockType type)
Sha256Checksum computeSha256Sum() const
Computes the SHA-256 checksums for the file using OpenSSL.
Contains utility classes helping to read and write streams.
The TestFile struct holds the path (relative to testfile dir) and checksum of a test file...
bool operator==(const Sha256Checksum &other) const
Returns whether the current instance equals other ignoring the case.
The Sha256Checksum struct holds the "hex string representation" of a SHA-256 checksum.
void verifyChecksum() const
Checks whether the expected SHA-256 checksum matches the actual checksum.
ostream & operator<<(ostream &os, const Sha256Checksum &checksum)
struct TestFile testFiles[]