@@ -1753,6 +1753,42 @@ TEST_F(tls_basic, rekey_tx)
1753
1753
EXPECT_EQ (memcmp (buf , test_str , send_len ), 0 );
1754
1754
}
1755
1755
1756
+ TEST_F (tls_basic , disconnect )
1757
+ {
1758
+ char const * test_str = "test_message" ;
1759
+ int send_len = strlen (test_str ) + 1 ;
1760
+ struct tls_crypto_info_keys key ;
1761
+ struct sockaddr_in addr ;
1762
+ char buf [20 ];
1763
+ int ret ;
1764
+
1765
+ if (self -> notls )
1766
+ return ;
1767
+
1768
+ tls_crypto_info_init (TLS_1_3_VERSION , TLS_CIPHER_AES_GCM_128 ,
1769
+ & key , 0 );
1770
+
1771
+ ret = setsockopt (self -> fd , SOL_TLS , TLS_TX , & key , key .len );
1772
+ ASSERT_EQ (ret , 0 );
1773
+
1774
+ /* Pre-queue the data so that setsockopt parses it but doesn't
1775
+ * dequeue it from the TCP socket. recvmsg would dequeue.
1776
+ */
1777
+ EXPECT_EQ (send (self -> fd , test_str , send_len , 0 ), send_len );
1778
+
1779
+ ret = setsockopt (self -> cfd , SOL_TLS , TLS_RX , & key , key .len );
1780
+ ASSERT_EQ (ret , 0 );
1781
+
1782
+ addr .sin_family = AF_UNSPEC ;
1783
+ addr .sin_addr .s_addr = htonl (INADDR_ANY );
1784
+ addr .sin_port = 0 ;
1785
+ ret = connect (self -> cfd , & addr , sizeof (addr ));
1786
+ EXPECT_EQ (ret , -1 );
1787
+ EXPECT_EQ (errno , EOPNOTSUPP );
1788
+
1789
+ EXPECT_EQ (recv (self -> cfd , buf , send_len , 0 ), send_len );
1790
+ }
1791
+
1756
1792
TEST_F (tls , rekey )
1757
1793
{
1758
1794
char const * test_str_1 = "test_message_before_rekey" ;
0 commit comments