File indexing completed on 2023-03-17 11:03:55
0001 #include "catch.hpp"
0002
0003 #include "FWCore/Utilities/interface/Digest.h"
0004 #include "FWCore/Utilities/interface/Exception.h"
0005
0006 using cms::Digest;
0007 using cms::MD5Result;
0008
0009 namespace {
0010 void testGivenString(std::string const& s) {
0011 Digest dig1(s);
0012 MD5Result r1 = dig1.digest();
0013
0014 Digest dig2;
0015 dig2.append(s);
0016 MD5Result r2 = dig2.digest();
0017 REQUIRE(r1 == r2);
0018
0019
0020 REQUIRE(r1.isValid() == !s.empty());
0021 REQUIRE(r1.toString().size() == 32);
0022 REQUIRE(r1.compactForm().size() == 16);
0023 }
0024 }
0025
0026 TEST_CASE("Test cms::Digest", "[Digest]") {
0027 SECTION("Identical") {
0028 Digest dig1;
0029 dig1.append("hello");
0030 Digest dig2("hello");
0031
0032 MD5Result r1 = dig1.digest();
0033 MD5Result r2 = dig2.digest();
0034
0035 REQUIRE(r1 == r2);
0036 REQUIRE(!(r1 < r2));
0037 REQUIRE(!(r2 < r1));
0038
0039 REQUIRE(r1.toString().size() == 32);
0040 }
0041 SECTION("various strings") {
0042 testGivenString("a");
0043 testGivenString("{ }");
0044 testGivenString("abc 123 abc");
0045 }
0046 SECTION("empty string") {
0047 std::string e;
0048 testGivenString(e);
0049
0050 Digest dig1;
0051 MD5Result r1 = dig1.digest();
0052
0053 MD5Result r2;
0054 REQUIRE(r1 == r2);
0055
0056 REQUIRE(!r1.isValid());
0057 }
0058 SECTION("conversions") {
0059 std::string data("aldjfakl\tsdjf34234 \najdf");
0060 Digest dig(data);
0061 MD5Result r1 = dig.digest();
0062 REQUIRE(r1.isValid());
0063 std::string hexy = r1.toString();
0064 REQUIRE(hexy.size() == 32);
0065 MD5Result r2;
0066 r2.fromHexifiedString(hexy);
0067 REQUIRE(r1 == r2);
0068 REQUIRE(r1.toString() == r2.toString());
0069 REQUIRE(r1.compactForm() == r2.compactForm());
0070
0071
0072 MD5Result lookup;
0073 MD5Result fromHex;
0074 for (unsigned int i = 0; i < 256; ++i) {
0075 for (unsigned int j = 0; j < 16; ++j) {
0076 lookup.bytes[j] = static_cast<char>(i);
0077 fromHex.fromHexifiedString(lookup.toString());
0078 REQUIRE(lookup == fromHex);
0079 REQUIRE(lookup.toString() == fromHex.toString());
0080 REQUIRE(lookup.compactForm() == fromHex.compactForm());
0081 }
0082 }
0083 }
0084 }