Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:13:15

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     // The result should be valid *iff* s is non-empty.
0020     REQUIRE(r1.isValid() == !s.empty());
0021     REQUIRE(r1.toString().size() == 32);
0022     REQUIRE(r1.compactForm().size() == 16);
0023   }
0024 }  // namespace
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     //check the MD5Result lookup table
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 }