+TEST(AsyncSocketException, SSLExceptionType) {
+ {
+ SSLException eof(SSL_ERROR_ZERO_RETURN, 0, 0, 0);
+ EXPECT_EQ(eof.getType(), AsyncSocketException::END_OF_FILE);
+
+ SSLException netEof(SSL_ERROR_SYSCALL, 0, 0, 0);
+ EXPECT_EQ(netEof.getType(), AsyncSocketException::END_OF_FILE);
+
+ SSLException netOther(SSL_ERROR_SYSCALL, 0, 1, 0);
+ EXPECT_EQ(netOther.getType(), AsyncSocketException::NETWORK_ERROR);
+
+ std::array<int, 6> sslErrs{{SSL_ERROR_SSL,
+ SSL_ERROR_WANT_READ,
+ SSL_ERROR_WANT_WRITE,
+ SSL_ERROR_WANT_X509_LOOKUP,
+ SSL_ERROR_WANT_CONNECT,
+ SSL_ERROR_WANT_ACCEPT}};
+
+ for (auto& e : sslErrs) {
+ SSLException sslEx(e, 0, 0, 0);
+ EXPECT_EQ(sslEx.getType(), AsyncSocketException::SSL_ERROR);
+ }
+ }
+
+ {
+ SSLException eof(SSLError::EOF_ERROR);
+ EXPECT_EQ(eof.getType(), AsyncSocketException::END_OF_FILE);
+
+ SSLException net(SSLError::NETWORK_ERROR);
+ EXPECT_EQ(net.getType(), AsyncSocketException::NETWORK_ERROR);
+
+ std::array<SSLError, 4> errs{{SSLError::CLIENT_RENEGOTIATION,
+ SSLError::INVALID_RENEGOTIATION,
+ SSLError::EARLY_WRITE,
+ SSLError::SSL_ERROR}};
+
+ for (auto& e : errs) {
+ SSLException sslEx(e);
+ EXPECT_EQ(sslEx.getType(), AsyncSocketException::SSL_ERROR);
+ }
+ }
+}
+