+
+TEST_F(OpenSSLCertUtilsTest, TestDerEncodeDecode) {
+ auto x509 = readCertFromData(kTestCertWithSan);
+
+ auto der = folly::ssl::OpenSSLCertUtils::derEncode(*x509);
+ auto decoded = folly::ssl::OpenSSLCertUtils::derDecode(der->coalesce());
+
+ EXPECT_EQ(
+ folly::ssl::OpenSSLCertUtils::toString(*x509),
+ folly::ssl::OpenSSLCertUtils::toString(*decoded));
+}
+
+TEST_F(OpenSSLCertUtilsTest, TestDerDecodeJunkData) {
+ StringPiece junk{"MyFakeCertificate"};
+ EXPECT_THROW(
+ folly::ssl::OpenSSLCertUtils::derDecode(junk), std::runtime_error);
+}
+
+TEST_F(OpenSSLCertUtilsTest, TestDerDecodeTooShort) {
+ auto x509 = readCertFromData(kTestCertWithSan);
+
+ auto der = folly::ssl::OpenSSLCertUtils::derEncode(*x509);
+ der->trimEnd(1);
+ EXPECT_THROW(
+ folly::ssl::OpenSSLCertUtils::derDecode(der->coalesce()),
+ std::runtime_error);
+}